package bo.gotthardt.deploy;
import com.google.common.base.Charsets;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.io.Files;
import org.codehaus.plexus.archiver.tar.TarGZipUnArchiver;
import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.logging.console.ConsoleLogger;
import org.junit.Before;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link TarGzArchive}.
*
* @author Bo Gotthardt
*/
public class TarGzArchiveTest {
private File input;
private File unpackDir;
@Before
public void setup() throws IOException {
input = File.createTempFile("qwerty", ".txt");
Files.append("test", input, Charsets.UTF_8);
unpackDir = Files.createTempDir();
input.deleteOnExit();
unpackDir.deleteOnExit();
}
@Test
public void shouldCreateTarGzArchiveWithInputFile() throws IOException {
File output = TarGzArchive.create(ImmutableSet.of(input), "");
assertThat(output).exists();
assertThat(output.getName()).endsWith(".tgz");
List<File> unpackedFiles = unpack(output);
assertThat(unpackedFiles).hasSize(1);
assertThat(unpackedFiles.get(0).getName()).isEqualTo(input.getName());
assertThat(Files.toString(unpackedFiles.get(0), Charsets.UTF_8)).isEqualTo("test");
}
@Test
public void shouldPlaceInputFileInSpecifiedFolder() throws IOException {
File output = TarGzArchive.create(ImmutableSet.of(input), "testfolder");
assertThat(output).exists();
List<File> unpackedFiles = unpack(output);
File folder = unpackedFiles.get(0);
assertThat(folder).isDirectory();
assertThat(folder.getName()).isEqualTo("testfolder");
List<File> filesInsideFolder = ImmutableList.copyOf(folder.listFiles());
assertThat(filesInsideFolder).hasSize(1);
assertThat(filesInsideFolder.get(0).getName()).isEqualTo(input.getName());
}
private List<File> unpack(File tgzFile) {
TarGZipUnArchiver unarchiver = new TarGZipUnArchiver(tgzFile);
unarchiver.enableLogging(new ConsoleLogger(Logger.LEVEL_DISABLED, "console"));
unarchiver.setDestDirectory(unpackDir);
unarchiver.extract();
return ImmutableList.copyOf(unpackDir.listFiles());
}
}