/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.utils.incubator; import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; /** * Test for utility class ZipFolderUtil. * * @author Markus Kunde */ public class ZipFolderUtilTest { /** Constants for assertion texts. */ private static final String CONTENT_FILES_NOT_EQUAL = "Content of files after zip + unzip is not equal."; private static final String STRUCTURE_FILES_NOT_EQUAL = "Structure of files after zip + unzip is not equal."; /** Constants for names, content of files. */ private static final String SUBFOLDER_ZIP_CONTENT2 = "subfolderZipContent2"; private static final String SUBFOLDER_ZIP_CONTENT1 = "subfolderZipContent1"; private static final String SUBFOLDER = "subfolder"; private static final String ROOT_ZIP_CONTENT2 = "rootZipContent2"; private static final String ROOT_ZIP_CONTENT1 = "rootZipContent1"; /** JUnit temp file handler. */ @Rule public TemporaryFolder junitTempFolder = new TemporaryFolder(); private File workingDir; private File rootZipDir; private File rootZipContent1; private File rootZipContent2; private File subZipFolder; private File subfolderZipContent1; private File subfolderZipContent2; /** * SetUp-method. * * @throws Exception exception */ @Before public void setUp() throws Exception { workingDir = junitTempFolder.getRoot(); rootZipDir = new File(workingDir, "rootDirForZipping"); FileUtils.forceMkdir(rootZipDir); rootZipContent1 = new File(rootZipDir, ROOT_ZIP_CONTENT1); FileUtils.touch(rootZipContent1); rootZipContent2 = new File(rootZipDir, ROOT_ZIP_CONTENT2); FileUtils.touch(rootZipContent2); subZipFolder = new File(rootZipDir, SUBFOLDER); FileUtils.forceMkdir(subZipFolder); subfolderZipContent1 = new File(subZipFolder, SUBFOLDER_ZIP_CONTENT1); FileUtils.touch(subfolderZipContent1); subfolderZipContent2 = new File(subZipFolder, SUBFOLDER_ZIP_CONTENT2); FileUtils.touch(subfolderZipContent2); FileUtils.writeStringToFile(rootZipContent1, ROOT_ZIP_CONTENT1); FileUtils.writeStringToFile(rootZipContent2, ROOT_ZIP_CONTENT2); FileUtils.writeStringToFile(subfolderZipContent1, SUBFOLDER_ZIP_CONTENT1); FileUtils.writeStringToFile(subfolderZipContent2, SUBFOLDER_ZIP_CONTENT2); } /** * Test if zipping and unzipping is successful. * @throws IOException thrown if an I/O error occurs * */ @Test public void testZipFolderContent() throws IOException { File zipFile = new File(workingDir, "zipFile"); ZipFolderUtil.zipFolderContent(rootZipDir, zipFile); assertTrue("zip file does not exist", zipFile.exists() && zipFile.isFile()); File unzipFolder = new File(workingDir, "unzipFolder"); FileUtils.forceMkdir(unzipFolder); ZipFolderUtil.extractZipToFolder(unzipFolder, zipFile); // Check if structure is equal. File unzippedSubfolder = new File(unzipFolder, SUBFOLDER); assertTrue("Unzipped subfolder does not exist", unzippedSubfolder.exists() && unzippedSubfolder.isDirectory()); assertTrue(STRUCTURE_FILES_NOT_EQUAL, new File(unzipFolder, ROOT_ZIP_CONTENT1).exists() && new File(unzipFolder, ROOT_ZIP_CONTENT1).isFile()); assertTrue(STRUCTURE_FILES_NOT_EQUAL, new File(unzipFolder, ROOT_ZIP_CONTENT2).exists() && new File(unzipFolder, ROOT_ZIP_CONTENT2).isFile()); assertTrue(STRUCTURE_FILES_NOT_EQUAL, new File(unzippedSubfolder, SUBFOLDER_ZIP_CONTENT1).exists() && new File(unzippedSubfolder, SUBFOLDER_ZIP_CONTENT1).isFile()); assertTrue(STRUCTURE_FILES_NOT_EQUAL, new File(unzippedSubfolder, SUBFOLDER_ZIP_CONTENT2).exists() && new File(unzippedSubfolder, SUBFOLDER_ZIP_CONTENT2).isFile()); // Check if content is equal. assertTrue(CONTENT_FILES_NOT_EQUAL, FileUtils.contentEquals(rootZipContent1, new File(unzipFolder, ROOT_ZIP_CONTENT1))); assertTrue(CONTENT_FILES_NOT_EQUAL, FileUtils.contentEquals(rootZipContent2, new File(unzipFolder, ROOT_ZIP_CONTENT2))); assertTrue(CONTENT_FILES_NOT_EQUAL, FileUtils.contentEquals(subfolderZipContent1, new File(unzippedSubfolder, SUBFOLDER_ZIP_CONTENT1))); assertTrue(CONTENT_FILES_NOT_EQUAL, FileUtils.contentEquals(subfolderZipContent2, new File(unzippedSubfolder, SUBFOLDER_ZIP_CONTENT2))); } }