/*
* Copyright (C) 2003-2010 eXo Platform SAS.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see<http://www.gnu.org/licenses/>.
*/
package org.exoplatform.services.jcr.impl.utils.io;
import junit.framework.TestCase;
import org.exoplatform.services.jcr.impl.util.io.DirectoryHelper;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* @author <a href="abazko@exoplatform.com">Anatoliy Bazko</a>
* @version $Id: TestDirectoryHelper.java 34360 2009-07-22 23:58:59Z tolusha $
*/
public class TestDirectoryHelper extends TestCase
{
public void testCompressEmptyDirectory() throws Exception
{
File rootDir = new File("./target/emptyDir");
rootDir.mkdir();
File zipFile = new File("./target/compress.zip");
try
{
DirectoryHelper.compressDirectory(rootDir, zipFile);
fail("Exception should be thrown");
}
catch (IOException e)
{
// can't compress empty directory
}
}
public void testCompressDirectory() throws Exception
{
// compress/compress.1
File rootDir = new File("./target/compress");
rootDir.mkdir();
OutputStream out = new FileOutputStream(new File(rootDir, "compress.1"));
out.write("compress.1".getBytes());
out.close();
// compress/a/a.1
// compress/a/a.2
File dirA = new File(rootDir, "a");
dirA.mkdir();
out = new FileOutputStream(new File(dirA, "a.1"));
out.write("a.1".getBytes());
out.close();
out = new FileOutputStream(new File(dirA, "a.2"));
out.write("a.2".getBytes());
out.close();
// compress/a/c/c.1
File dirAC = new File(dirA, "c");
dirAC.mkdir();
out = new FileOutputStream(new File(dirAC, "c.1"));
out.write("c.1".getBytes());
out.close();
// compress/b/b.1
File dirB = new File(rootDir, "b");
dirB.mkdir();
out = new FileOutputStream(new File(dirB, "b.1"));
out.write("b.1".getBytes());
out.close();
File zipFile = new File("./target/compressDir.zip");
DirectoryHelper.compressDirectory(rootDir, zipFile);
assertTrue(zipFile.exists());
File dir = new File("./target/uncompress");
DirectoryHelper.uncompressDirectory(zipFile, dir);
assertFile(dir, "compress.1");
assertFile(new File(dir, "a"), "a.1");
assertFile(new File(dir, "a"), "a.2");
assertFile(new File(dir, "b"), "b.1");
assertFile(new File(new File(dir, "a"), "c"), "c.1");
}
public void testCompressFile() throws Exception
{
OutputStream out = new FileOutputStream(new File("./target/compress.file"));
out.write("compress.file".getBytes());
out.close();
File zipFile = new File("./target/compressFile.zip");
DirectoryHelper.compressDirectory(new File("./target/compress.file"), zipFile);
assertTrue(zipFile.exists());
File dir = new File("./target/uncompress");
DirectoryHelper.uncompressDirectory(zipFile, dir);
assertFile(dir, "compress.file");
}
private void assertFile(File dir, String fileName) throws Exception
{
byte[] buf = new byte[20];
File file = new File(dir, fileName);
assertTrue(file.exists());
InputStream in = new FileInputStream(file);
int len = in.read(buf);
in.close();
assertEquals(fileName, new String(buf, 0, len));
}
}