package com.wonderant.gzip;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.zip.GZIPInputStream;
import org.apache.commons.io.FileUtils;
import org.junit.Before;
import org.junit.Test;
import org.kamranzafar.jtar.TarEntry;
import org.kamranzafar.jtar.TarInputStream;
public class GzipTest {
private File folder;
private File expectedFile;
private String dir;
@Before
public void Before() {
dir = "target/testFolder";
folder = new File(dir);
expectedFile = new File(folder.getAbsolutePath() + "/../"
+ folder.getName() + ".tar.gz");
FileUtils.deleteQuietly(expectedFile);
try {
FileUtils.deleteDirectory(folder);
} catch (IOException e) {
}
folder.mkdirs();
}
@Test
public void testGZipEmptyFolder() throws Exception {
TarAndGzip.folder(folder);
assertTrue("not found zip: " + expectedFile.getCanonicalPath(),
expectedFile.exists());
assertEquals("testFolder/", listContents(expectedFile));
}
@Test
public void testGZipWithFile() throws Exception {
FileUtils.writeStringToFile(new File(dir + "/myfile.txt"),
"hellö world", "UTF-8");
TarAndGzip.folder(folder);
assertTrue("not found zip: " + expectedFile.getCanonicalPath(),
expectedFile.exists());
assertEquals("testFolder/\n" + "testFolder/myfile.txt",
listContents(expectedFile));
}
@Test
public void testGZipWithNestedFile() throws Exception {
new File(dir + "/newDir").mkdirs();
FileUtils.writeStringToFile(new File(dir + "/newDir/myfile.txt"),
"hellö world", "UTF-8");
TarAndGzip.folder(folder);
assertTrue("not found zip: " + expectedFile.getCanonicalPath(),
expectedFile.exists());
assertEquals("testFolder/\n" + "testFolder/newDir/\n"
+ "testFolder/newDir/myfile.txt", listContents(expectedFile));
}
@Test
public void testGZipWithNestedEmptyFolder() throws Exception {
new File(dir + "/newDir").mkdirs();
TarAndGzip.folder(folder);
assertTrue("not found zip: " + expectedFile.getCanonicalPath(),
expectedFile.exists());
assertEquals("testFolder/\n" + "testFolder/newDir/",
listContents(expectedFile));
}
@Test
public void testWithIgnoreFile() throws Exception {
createComplicated();
TarAndGzip.folder(folder);
assertEquals("testFolder/\n" + "testFolder/backup/\n"
+ "testFolder/data/\n" + "testFolder/data/myfile.txt\n"
+ "testFolder/logs/\n" + "testFolder/logs/log1.txt\n"
+ "testFolder/logs/log2.txt", listContents(expectedFile));
TarAndGzip.folder(folder, Arrays.asList("logs/log1.txt"));
assertEquals("testFolder/\n" + "testFolder/backup/\n"
+ "testFolder/data/\n" + "testFolder/data/myfile.txt\n"
+ "testFolder/logs/\n" + "testFolder/logs/log2.txt",
listContents(expectedFile));
TarAndGzip.folder(folder, Arrays.asList("logs/log.*"));
assertEquals("testFolder/\n" + "testFolder/backup/\n"
+ "testFolder/data/\n" + "testFolder/data/myfile.txt\n"
+ "testFolder/logs/", listContents(expectedFile));
TarAndGzip.folder(folder,
Arrays.asList("logs/log1.txt", "logs/log2.txt"));
assertEquals("testFolder/\n" + "testFolder/backup/\n"
+ "testFolder/data/\n" + "testFolder/data/myfile.txt\n"
+ "testFolder/logs/", listContents(expectedFile));
}
@Test
public void testWithIgnoreDirectory() throws Exception {
createComplicated();
TarAndGzip.folder(folder, Arrays.asList("logs", "backup"));
assertEquals("testFolder/\n" + "testFolder/data/\n"
+ "testFolder/data/myfile.txt", listContents(expectedFile));
}
@Test
public void testExpectedAlreadyPresent() throws Exception {
createComplicated();
FileUtils.writeStringToFile(expectedFile, "somedata");
TarAndGzip.folder(folder, Arrays.asList("logs", "backup"));
assertEquals("testFolder/\n" + "testFolder/data/\n"
+ "testFolder/data/myfile.txt", listContents(expectedFile));
}
private String listContents(File pExpectedFile) throws IOException {
TarInputStream tis = new TarInputStream(new BufferedInputStream(
new GZIPInputStream(new FileInputStream(pExpectedFile))));
TarEntry entry;
String result = "";
while ((entry = tis.getNextEntry()) != null) {
result += entry.getName() + "\n";
}
return result.trim();
}
private void createComplicated() throws IOException {
new File(dir + "/data").mkdirs();
new File(dir + "/logs").mkdirs();
new File(dir + "/backup").mkdirs();
FileUtils.writeStringToFile(new File(dir + "/data/myfile.txt"),
"hellö world", "UTF-8");
FileUtils.writeStringToFile(new File(dir + "/logs/log1.txt"),
"hellö world", "UTF-8");
FileUtils.writeStringToFile(new File(dir + "/logs/log2.txt"),
"hellö world", "UTF-8");
}
}