View Javadoc
1   package org.codehaus.plexus.archiver;
2   
3   import java.io.File;
4   import java.io.IOException;
5   import java.nio.file.Files;
6   
7   import org.codehaus.plexus.archiver.dir.DirectoryArchiver;
8   import org.codehaus.plexus.archiver.tar.TarArchiver;
9   import org.codehaus.plexus.archiver.tar.TarLongFileMode;
10  import org.codehaus.plexus.archiver.tar.TarUnArchiver;
11  import org.codehaus.plexus.archiver.zip.ZipArchiver;
12  import org.codehaus.plexus.archiver.zip.ZipUnArchiver;
13  import org.junit.jupiter.api.Test;
14  import org.junit.jupiter.api.condition.DisabledOnOs;
15  import org.junit.jupiter.api.condition.OS;
16  
17  import static org.junit.jupiter.api.Assertions.assertFalse;
18  import static org.junit.jupiter.api.Assertions.assertTrue;
19  
20  /**
21   * @author Kristian Rosenvold
22   */
23  class SymlinkTest extends TestSupport {
24  
25      @Test
26      @DisabledOnOs(OS.WINDOWS)
27      void testSymlinkDir() throws IOException {
28          File dummyContent = getTestFile("src/test/resources/symlinks/src/symDir");
29          assertTrue(dummyContent.isDirectory());
30          assertTrue(Files.isSymbolicLink(dummyContent.toPath()));
31      }
32  
33      @Test
34      @DisabledOnOs(OS.WINDOWS)
35      void testSymlinkDirWithSlash() throws IOException {
36          File dummyContent = getTestFile("src/test/resources/symlinks/src/symDir/");
37          assertTrue(dummyContent.isDirectory());
38          assertTrue(Files.isSymbolicLink(dummyContent.toPath()));
39      }
40  
41      @Test
42      @DisabledOnOs(OS.WINDOWS)
43      void testSymlinkFile() {
44          File dummyContent = getTestFile("src/test/resources/symlinks/src/symR");
45          assertFalse(dummyContent.isDirectory());
46          assertTrue(Files.isSymbolicLink(dummyContent.toPath()));
47      }
48  
49      @Test
50      void testSymlinkTar() throws Exception {
51          TarArchiver archiver = (TarArchiver) lookup(Archiver.class, "tar");
52          archiver.setLongfile(TarLongFileMode.posix);
53  
54          File dummyContent = getTestFile("src/test/resources/symlinks/src");
55          archiver.addDirectory(dummyContent);
56          final File archiveFile = new File("target/output/symlinks.tar");
57          archiver.setDestFile(archiveFile);
58          archiver.createArchive();
59          File output = getTestFile("target/output/untaredSymlinks");
60          output.mkdirs();
61          TarUnArchiver unarchiver = (TarUnArchiver) lookup(UnArchiver.class, "tar");
62          unarchiver.setSourceFile(archiveFile);
63          unarchiver.setDestFile(output);
64          unarchiver.extract();
65          // second unpacking should also work
66          unarchiver.extract();
67      }
68  
69      @Test
70      void testSymlinkZip() throws Exception {
71          ZipArchiver archiver = (ZipArchiver) lookup(Archiver.class, "zip");
72  
73          File dummyContent = getTestFile("src/test/resources/symlinks/src");
74          archiver.addDirectory(dummyContent);
75          final File archiveFile = new File("target/output/symlinks.zip");
76          archiveFile.delete();
77          archiver.setDestFile(archiveFile);
78          archiver.createArchive();
79  
80          File output = getTestFile("target/output/unzippedSymlinks");
81          output.mkdirs();
82          ZipUnArchiver unarchiver = (ZipUnArchiver) lookup(UnArchiver.class, "zip");
83          unarchiver.setSourceFile(archiveFile);
84          unarchiver.setDestFile(output);
85          unarchiver.extract();
86          // second unpacking should also work
87          unarchiver.extract();
88      }
89  
90      @Test
91      @DisabledOnOs(OS.WINDOWS)
92      void testSymlinkDirArchiver() throws Exception {
93          DirectoryArchiver archiver = (DirectoryArchiver) lookup(Archiver.class, "dir");
94  
95          File dummyContent = getTestFile("src/test/resources/symlinks/src");
96          archiver.addDirectory(dummyContent);
97          final File archiveFile = new File("target/output/dirarchiver-symlink");
98          archiveFile.mkdirs();
99          archiver.setDestFile(archiveFile);
100         archiver.addSymlink("target/output/dirarchiver-symlink/aNewDir/symlink", ".");
101 
102         archiver.createArchive();
103 
104         File symbolicLink = new File("target/output/dirarchiver-symlink/symR");
105         assertTrue(Files.isSymbolicLink(symbolicLink.toPath()));
106 
107         symbolicLink = new File("target/output/dirarchiver-symlink/aDirWithALink/backOutsideToFileX");
108         assertTrue(Files.isSymbolicLink(symbolicLink.toPath()));
109     }
110 }