package org.jboss.shrinkwrap.resolver.impl.maven; import org.apache.commons.io.FileUtils; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import static org.junit.Assert.*; /** * @author Florian Besser */ public class PackageDirHelperTestCase { @Rule public TemporaryFolder tempFolder = new TemporaryFolder(); @Test public void packageDirectories_empty_canUnzip() throws Exception { File output = tempFolder.newFile("output.zip"); MavenResolvedArtifactImpl.PackageDirHelper.packageDirectories(output); File outputFolder = tempFolder.newFolder("outputFolder"); assertTrue(canUnzip(output, outputFolder)); } @Test public void packageDirectories_singleEntry_canUnzip() throws Exception { File output = tempFolder.newFile("output.zip"); File inputFolder = tempFolder.newFolder("inputFolder"); FileUtils.forceMkdir(inputFolder); File inputFile = new File(inputFolder, "exampleInput.foo"); FileUtils.write(inputFile, "some data"); MavenResolvedArtifactImpl.PackageDirHelper.packageDirectories(output, inputFolder); File outputFolder = tempFolder.newFolder("outputFolder"); assertTrue(canUnzip(output, outputFolder)); } @Test public void packageDirectories_singleEntryWithSubEntries_canUnzip() throws Exception { File output = tempFolder.newFile("output.zip"); File inputRootFolder = tempFolder.newFolder("inputRootFolder"); File inputSubFolder = new File(inputRootFolder, "inputSubFolder"); FileUtils.forceMkdir(inputSubFolder); File inputFile = new File(inputSubFolder, "exampleInput.foo"); FileUtils.write(inputFile, "some data"); MavenResolvedArtifactImpl.PackageDirHelper.packageDirectories(output, inputRootFolder); File outputFolder = tempFolder.newFolder("outputFolder"); assertTrue(canUnzip(output, outputFolder)); } private boolean canUnzip(File zipFile, File outputFolder) { byte[] buffer = new byte[1024]; try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile))) { //get the zipped file list entry ZipEntry ze = zis.getNextEntry(); while (ze != null) { String fileName = ze.getName(); File newFile = new File(outputFolder, fileName); //create all non exists folders //else you will hit FileNotFoundException for compressed folder FileUtils.forceMkdir(newFile.getParentFile()); try (FileOutputStream fos = new FileOutputStream(newFile)) { int len; while ((len = zis.read(buffer)) > 0) { fos.write(buffer, 0, len); } } ze = zis.getNextEntry(); } return true; } catch (IOException ex) { return false; } } }