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
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
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
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 }