4141import org .codehaus .plexus .components .io .attributes .Java7FileAttributes ;
4242import org .codehaus .plexus .components .io .attributes .PlexusIoResourceAttributeUtils ;
4343import 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 ;
4446import org .codehaus .plexus .components .io .functions .InputStreamTransformer ;
47+ import org .codehaus .plexus .components .io .resources .PlexusIoFileResource ;
4548import org .codehaus .plexus .components .io .resources .PlexusIoFileResourceCollection ;
4649import 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 ;
4752import org .codehaus .plexus .logging .Logger ;
4853import org .codehaus .plexus .logging .console .ConsoleLogger ;
4954import org .codehaus .plexus .util .FileUtils ;
6974 * @author Emmanuel Venisse
7075 * @version $Id$
7176 */
77+ @ SuppressWarnings ( "OctalInteger" )
7278public class ZipArchiverTest
7379 extends BasePlexusArchiverTest
7480{
@@ -135,6 +141,7 @@ public void testOverddidenPermissions()
135141 }
136142
137143
144+
138145 public void testCreateArchiveWithDetectedModes ()
139146 throws Exception
140147 {
@@ -433,6 +440,9 @@ private ZipArchiver newArchiver( String name )
433440 return archiver ;
434441 }
435442
443+ private void fileModeAssert (int expected , int actual ){
444+ assertEquals ( Integer .toString ( expected , 8 ), Integer .toString ( actual , 8 ));
445+ }
436446 private void createArchive ( ZipArchiver archiver )
437447 throws ArchiverException , IOException
438448 {
@@ -449,34 +459,34 @@ private void createArchive( ZipArchiver archiver )
449459 {
450460 if ( ze .getName ().startsWith ( "worldwritable" ) )
451461 {
452- assertEquals ( 0777 , UnixStat .PERM_MASK & ze .getUnixMode () );
462+ fileModeAssert ( 0777 , UnixStat .PERM_MASK & ze .getUnixMode () );
453463 }
454464 else if ( ze .getName ().startsWith ( "groupwritable" ) )
455465 {
456- assertEquals ( 0070 , UnixStat .PERM_MASK & ze .getUnixMode () );
466+ fileModeAssert ( 0070 , UnixStat .PERM_MASK & ze .getUnixMode () );
457467 }
458468 else
459469 {
460- assertEquals ( 0500 , UnixStat .PERM_MASK & ze .getUnixMode () );
470+ fileModeAssert ( 0500 , UnixStat .PERM_MASK & ze .getUnixMode () );
461471 }
462472 }
463473 else
464474 {
465475 if ( ze .getName ().equals ( "one.txt" ) )
466476 {
467- assertEquals ( 0640 , UnixStat .PERM_MASK & ze .getUnixMode () );
477+ fileModeAssert ( 0640 , UnixStat .PERM_MASK & ze .getUnixMode () );
468478 }
469479 else if ( ze .getName ().equals ( "two.txt" ) )
470480 {
471- assertEquals ( 0664 , UnixStat .PERM_MASK & ze .getUnixMode () );
481+ fileModeAssert ( 0664 , UnixStat .PERM_MASK & ze .getUnixMode () );
472482 }
473483 else if ( ze .isUnixSymlink () )
474484 {
475485 // assertEquals( ze.getName(), 0500, UnixStat.PERM_MASK & ze.getUnixMode() );
476486 }
477487 else
478488 {
479- assertEquals ( 0400 , UnixStat .PERM_MASK & ze .getUnixMode () );
489+ fileModeAssert ( 0400 , UnixStat .PERM_MASK & ze .getUnixMode () );
480490 }
481491 }
482492
@@ -670,4 +680,66 @@ public void testDefaultUTF8withUTF8()
670680 zipArchiver .addDirectory ( new File ( "src/test/resources/miscUtf8" ) );
671681 zipArchiver .createArchive ();
672682 }
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+ }
673745}
0 commit comments