View Javadoc

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 }