1 package com.atlassian.core.util.zip;
2
3 import org.junit.Assert;
4 import org.apache.commons.io.IOUtils;
5 import org.junit.Rule;
6 import org.junit.Test;
7 import org.junit.rules.TemporaryFolder;
8
9 import java.io.BufferedInputStream;
10 import java.io.File;
11 import java.io.FileInputStream;
12 import java.io.IOException;
13 import java.util.zip.ZipEntry;
14 import java.util.zip.ZipInputStream;
15
16 public class FolderArchiverTest
17 {
18 private static final String MUST_EXIST = "Archive must have";
19 private static final String MUST_NOT_EXIST = "This entry must not exist in archive";
20
21 @Rule
22 public TemporaryFolder folder = new TemporaryFolder();
23
24 @Test
25 public void testDoArchive() throws Exception
26 {
27 final File toArchive = folder.newFolder("to-archive");
28 createFileAndCheckExists(toArchive, "test.txt");
29
30 final File archiveFolder = folder.newFolder("folder-with-archive");
31 final File theArchive = createFileAndCheckExists(archiveFolder, "dest.zip");
32
33 new FolderArchiver(toArchive, theArchive).doArchive();
34
35 Assert.assertTrue(MUST_EXIST, checkArchiveContain(theArchive, "test.txt"));
36 Assert.assertFalse(MUST_NOT_EXIST, checkArchiveContain(theArchive, "data/test.txt"));
37 }
38
39 @Test
40 public void testDoFolderArchive() throws Exception
41 {
42 final File toArchive = folder.newFolder("to-archive");
43 createFileAndCheckExists(toArchive, "test.txt");
44
45 final File archiveFolder = folder.newFolder("folder-with-archive");
46 final File theArchive = createFileAndCheckExists(archiveFolder, "dest.zip");
47
48 new FolderArchiver(toArchive, theArchive).doFolderArchive("data");
49
50 Assert.assertFalse(MUST_NOT_EXIST, checkArchiveContain(theArchive, "test.txt"));
51 Assert.assertTrue(MUST_EXIST, checkArchiveContain(theArchive, "data/test.txt"));
52 }
53
54 @Test
55 public void testDoFolderArchiveProhibitedName() throws Exception
56 {
57 final File toArchive = folder.newFolder("to-archive");
58 createFileAndCheckExists(toArchive, "test.txt");
59
60 final File archiveFolder = folder.newFolder("folder-with-archive");
61 final File theArchive = createFileAndCheckExists(archiveFolder, "dest.zip");
62
63 new FolderArchiver(toArchive, theArchive).doFolderArchive("../../../data");
64
65 Assert.assertFalse(MUST_NOT_EXIST, checkArchiveContain(theArchive, "test.txt"));
66 Assert.assertTrue(MUST_EXIST, checkArchiveContain(theArchive, "data/test.txt"));
67 }
68
69
70
71 private boolean checkArchiveContain(final File theArchive, final String path)
72 {
73 ZipInputStream zipInputStream = null;
74 try
75 {
76 zipInputStream = new ZipInputStream(new BufferedInputStream(new FileInputStream(theArchive)));
77 ZipEntry nextEntry;
78 while ((nextEntry = zipInputStream.getNextEntry()) != null)
79 {
80 if (path.equals(nextEntry.getName()))
81 {
82 return true;
83 }
84 }
85 return false;
86 }
87 catch (IOException e)
88 {
89 throw new RuntimeException(e);
90 }
91 finally
92 {
93 IOUtils.closeQuietly(zipInputStream);
94 }
95 }
96
97 private File createFileAndCheckExists(final File toArchive, final String fileName) throws IOException
98 {
99 File file = new File(toArchive, fileName);
100 Assert.assertTrue("File has to be created", file.createNewFile());
101 return file;
102 }
103 }