41
41
import org .codehaus .plexus .components .io .attributes .Java7FileAttributes ;
42
42
import org .codehaus .plexus .components .io .attributes .PlexusIoResourceAttributeUtils ;
43
43
import org .codehaus .plexus .components .io .attributes .PlexusIoResourceAttributes ;
44
+ import org .codehaus .plexus .components .io .attributes .SimpleResourceAttributes ;
45
+ import org .codehaus .plexus .components .io .functions .ContentSupplier ;
44
46
import org .codehaus .plexus .components .io .functions .InputStreamTransformer ;
47
+ import org .codehaus .plexus .components .io .resources .PlexusIoFileResource ;
45
48
import org .codehaus .plexus .components .io .resources .PlexusIoFileResourceCollection ;
46
49
import org .codehaus .plexus .components .io .resources .PlexusIoResource ;
50
+ import org .codehaus .plexus .components .io .resources .PlexusIoResourceCollection ;
51
+ import org .codehaus .plexus .components .io .resources .ResourceFactory ;
47
52
import org .codehaus .plexus .logging .Logger ;
48
53
import org .codehaus .plexus .logging .console .ConsoleLogger ;
49
54
import org .codehaus .plexus .util .FileUtils ;
69
74
* @author Emmanuel Venisse
70
75
* @version $Id$
71
76
*/
77
+ @ SuppressWarnings ( "OctalInteger" )
72
78
public class ZipArchiverTest
73
79
extends BasePlexusArchiverTest
74
80
{
@@ -135,6 +141,7 @@ public void testOverddidenPermissions()
135
141
}
136
142
137
143
144
+
138
145
public void testCreateArchiveWithDetectedModes ()
139
146
throws Exception
140
147
{
@@ -433,6 +440,9 @@ private ZipArchiver newArchiver( String name )
433
440
return archiver ;
434
441
}
435
442
443
+ private void fileModeAssert (int expected , int actual ){
444
+ assertEquals ( Integer .toString ( expected , 8 ), Integer .toString ( actual , 8 ));
445
+ }
436
446
private void createArchive ( ZipArchiver archiver )
437
447
throws ArchiverException , IOException
438
448
{
@@ -449,34 +459,34 @@ private void createArchive( ZipArchiver archiver )
449
459
{
450
460
if ( ze .getName ().startsWith ( "worldwritable" ) )
451
461
{
452
- assertEquals ( 0777 , UnixStat .PERM_MASK & ze .getUnixMode () );
462
+ fileModeAssert ( 0777 , UnixStat .PERM_MASK & ze .getUnixMode () );
453
463
}
454
464
else if ( ze .getName ().startsWith ( "groupwritable" ) )
455
465
{
456
- assertEquals ( 0070 , UnixStat .PERM_MASK & ze .getUnixMode () );
466
+ fileModeAssert ( 0070 , UnixStat .PERM_MASK & ze .getUnixMode () );
457
467
}
458
468
else
459
469
{
460
- assertEquals ( 0500 , UnixStat .PERM_MASK & ze .getUnixMode () );
470
+ fileModeAssert ( 0500 , UnixStat .PERM_MASK & ze .getUnixMode () );
461
471
}
462
472
}
463
473
else
464
474
{
465
475
if ( ze .getName ().equals ( "one.txt" ) )
466
476
{
467
- assertEquals ( 0640 , UnixStat .PERM_MASK & ze .getUnixMode () );
477
+ fileModeAssert ( 0640 , UnixStat .PERM_MASK & ze .getUnixMode () );
468
478
}
469
479
else if ( ze .getName ().equals ( "two.txt" ) )
470
480
{
471
- assertEquals ( 0664 , UnixStat .PERM_MASK & ze .getUnixMode () );
481
+ fileModeAssert ( 0664 , UnixStat .PERM_MASK & ze .getUnixMode () );
472
482
}
473
483
else if ( ze .isUnixSymlink () )
474
484
{
475
485
// assertEquals( ze.getName(), 0500, UnixStat.PERM_MASK & ze.getUnixMode() );
476
486
}
477
487
else
478
488
{
479
- assertEquals ( 0400 , UnixStat .PERM_MASK & ze .getUnixMode () );
489
+ fileModeAssert ( 0400 , UnixStat .PERM_MASK & ze .getUnixMode () );
480
490
}
481
491
}
482
492
@@ -670,4 +680,66 @@ public void testDefaultUTF8withUTF8()
670
680
zipArchiver .addDirectory ( new File ( "src/test/resources/miscUtf8" ) );
671
681
zipArchiver .createArchive ();
672
682
}
683
+
684
+ public void testForcedFileModes ()
685
+ throws IOException
686
+ {
687
+ File step1file = new File ( "target/output/forced-file-mode.zip" );
688
+ {
689
+ final ZipArchiver zipArchiver = getZipArchiver ( step1file );
690
+ zipArchiver .setFileMode ( 0077 );
691
+ zipArchiver .setDirectoryMode ( 0007 );
692
+ PlexusIoResourceAttributes attrs = new SimpleResourceAttributes ( 123 , "fred" , 22 , "filntstones" , 0111 );
693
+ PlexusIoResource resource =
694
+ ResourceFactory .createResource ( new File ( "src/test/resources/folders/File.txt" ), "Test.txt" , null ,
695
+ attrs );
696
+ zipArchiver .addResource ( resource , "Test2.txt" , 0707 );
697
+ PlexusIoFileResourceCollection files = new PlexusIoFileResourceCollection ();
698
+ files .setBaseDir ( new File ( "src/test/resources/folders" ) );
699
+ files .setPrefix ( "sixsixsix/" );
700
+ zipArchiver .addResources ( files );
701
+
702
+ zipArchiver .createArchive ();
703
+
704
+ ZipFile zf = new ZipFile ( step1file );
705
+ fileModeAssert ( 040007 , zf .getEntry ( "sixsixsix/a/" ).getUnixMode () );
706
+ fileModeAssert ( 0100077 , zf .getEntry ( "sixsixsix/b/FileInB.txt" ).getUnixMode () );
707
+ fileModeAssert ( 0100707 , zf .getEntry ( "Test2.txt" ).getUnixMode () );
708
+ zf .close ();
709
+ }
710
+
711
+ File Step2file = new File ( "target/output/forced-file-mode-from-zip.zip" );
712
+ {
713
+ final ZipArchiver za2 = getZipArchiver ( Step2file );
714
+ za2 .setFileMode ( 0666 );
715
+ za2 .setDirectoryMode ( 0676 );
716
+
717
+ PlexusIoZipFileResourceCollection zipSrc = new PlexusIoZipFileResourceCollection ();
718
+ zipSrc .setFile ( step1file );
719
+ zipSrc .setPrefix ( "zz/" );
720
+ za2 .addResources ( zipSrc );
721
+ za2 .createArchive ();
722
+ ZipFile zf = new ZipFile ( Step2file );
723
+ fileModeAssert ( 040676 , zf .getEntry ( "zz/sixsixsix/a/" ).getUnixMode () );
724
+ fileModeAssert ( 0100666 , zf .getEntry ( "zz/Test2.txt" ).getUnixMode () );
725
+ zf .close ();
726
+ }
727
+
728
+ File step3file = new File ( "target/output/forced-file-mode-from-zip2.zip" );
729
+ {
730
+ final ZipArchiver za2 = getZipArchiver ( step3file );
731
+ za2 .setFileMode ( 0666 );
732
+ za2 .setDirectoryMode ( 0676 );
733
+
734
+ PlexusArchiverZipFileResourceCollection zipSrc = new PlexusArchiverZipFileResourceCollection ();
735
+ zipSrc .setFile ( step1file );
736
+ zipSrc .setPrefix ( "zz/" );
737
+ za2 .addResources ( zipSrc );
738
+ za2 .createArchive ();
739
+ ZipFile zf = new ZipFile ( Step2file );
740
+ fileModeAssert ( 040676 , zf .getEntry ( "zz/sixsixsix/a/" ).getUnixMode () );
741
+ fileModeAssert ( 0100666 , zf .getEntry ( "zz/Test2.txt" ).getUnixMode () );
742
+ zf .close ();
743
+ }
744
+ }
673
745
}
0 commit comments