Package com.googlecode.lucene.gae.tool

Source Code of com.googlecode.lucene.gae.tool.IndexToolTest

package com.googlecode.lucene.gae.tool;

import static org.junit.Assert.assertEquals;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Collection;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.lucene.store.Directory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.googlecode.lucene.gae.TestUtils;
import com.googlecode.lucene.gae.datastore.DataStoreDirectory;

public class IndexToolTest {

  @Before
  public void setUp() throws Exception {
    TestUtils.setUp();
  }

  @After
  public void tearDown() throws Exception {
    TestUtils.tearDown();
  }

  @Test
  public void testClean() throws Exception {

    Directory dir = new DataStoreDirectory("teste");

    IndexTool tool = new IndexTool(dir);

    tool.clean();

  }

  @Test
  public void testExportZip() throws Exception {

    Directory testDir = TestUtils.createTestDirectory();

    TestUtils.write(testDir, "teste1");
    TestUtils.write(testDir, "teste2");
    TestUtils.write(testDir, "teste3");

    IndexTool tool = new IndexTool(testDir);

    File zip = createDestFile("export.zip");

    FileOutputStream out = new FileOutputStream(zip);
    tool.exportZip(out);
    out.close();

    decompress(zip, TestUtils.DEST_INDEX_DIR);

    compareDirs(TestUtils.TEST_INDEX_DIR, TestUtils.DEST_INDEX_DIR);

  }

  @Test
  public void testImportZip() throws Exception {

    Directory testDir = TestUtils.createTestDirectory();

    TestUtils.write(testDir, "teste1");
    TestUtils.write(testDir, "teste2");
    TestUtils.write(testDir, "teste3");

    File zip = createDestFile("export.zip");

    compress(TestUtils.TEST_INDEX_DIR, zip);

    Directory detDir = TestUtils.createDestDirectory();

    IndexTool tool = new IndexTool(detDir);

    FileInputStream in = new FileInputStream(zip);
    tool.importZip(in);
    in.close();

    compareDirs(TestUtils.TEST_INDEX_DIR, TestUtils.DEST_INDEX_DIR);

  }

  @Test
  public void testOptimize() throws Exception {

    Directory dir = new DataStoreDirectory("teste");

    IndexTool tool = new IndexTool(dir);

    tool.optimize(TestUtils.getWriterConfig());

  }

  @Test
  public void testOptimizeAndClean() throws Exception {

    Directory dir = new DataStoreDirectory("teste");

    IndexTool tool = new IndexTool(dir);

    tool.optimizeAndClean(TestUtils.getWriterConfig());

  }

  @Test
  public void testReadFile() throws Exception {

    Directory testDir = TestUtils.createTestDirectory();

    TestUtils.write(testDir, "teste1");
    TestUtils.write(testDir, "teste2");
    TestUtils.write(testDir, "teste3");

    String[] files = testDir.listAll();

    Directory destDir = TestUtils.createDestDirectory();

    IndexTool tool = new IndexTool(destDir);

    for (String name : files) {

      File file = new File(TestUtils.TEST_INDEX_PATH, name);
      FileInputStream in = new FileInputStream(file);
      tool.readFile(name, in);
      in.close();

    }

    compareDirs(TestUtils.TEST_INDEX_DIR, TestUtils.DEST_INDEX_DIR);

  }

  @Test
  public void testWriteFile() throws Exception {

    Directory testDir = TestUtils.createTestDirectory();

    TestUtils.write(testDir, "teste1");
    TestUtils.write(testDir, "teste2");
    TestUtils.write(testDir, "teste3");

    String[] files = testDir.listAll();

    TestUtils.createDestDirectory();

    IndexTool tool = new IndexTool(testDir);

    for (String name : files) {

      File file = createDestFile(name);
      FileOutputStream out = new FileOutputStream(file);
      tool.writeFile(name, out);
      out.close();

    }

    compareDirs(TestUtils.TEST_INDEX_DIR, TestUtils.DEST_INDEX_DIR);

  }

  private void compareDirs(File testDir, File destDir) throws Exception {

    IOFileFilter filter = FileFilterUtils.trueFileFilter();
    Collection<File> files = FileUtils.listFiles(testDir, filter, filter);

    for (File testFile : files) {

      File destFile = new File(destDir, testFile.getName());

      assertEquals(testFile.exists(), destFile.exists());
      assertEquals(testFile.length(), destFile.length());

      byte[] testBytes = FileUtils.readFileToByteArray(testFile);
      byte[] destBytes = FileUtils.readFileToByteArray(destFile);

      assertEquals(testFile.getName(), TestUtils.toString(testBytes), TestUtils.toString(destBytes));

    }

  }

  private void compress(File scrDir, File zip) throws Exception {

    // create byte buffer
    byte[] buffer = new byte[1024];

    IOFileFilter filter = FileFilterUtils.trueFileFilter();
    Collection<File> files = FileUtils.listFiles(scrDir, filter, filter);

    ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zip));

    for (File file : files) {

      FileInputStream srcIn = new FileInputStream(file);
      zipOut.putNextEntry(new ZipEntry(file.getName()));

      int length;
      while ((length = srcIn.read(buffer)) > 0) {
        zipOut.write(buffer, 0, length);
      }

      srcIn.close();
      zipOut.closeEntry();

    }

    zipOut.close();

  }

  private File createDestFile(String name) throws Exception {

    File dir = new File(TestUtils.DEST_INDEX_PATH);

    if (!dir.exists()) {
      dir.mkdirs();
    }

    File file = new File(dir, name);

    if (!file.exists()) {
      file.createNewFile();
    }

    return file;

  }

  private void decompress(File zip, File destDir) throws Exception {

    byte buffer[] = new byte[1024];

    ZipInputStream zis = new ZipInputStream(new FileInputStream(zip));

    ZipEntry entry = null;

    while ((entry = zis.getNextEntry()) != null) {

      File destFile = new File(destDir, entry.getName());
      FileOutputStream destOut = new FileOutputStream(destFile);

      int count;
      while ((count = zis.read(buffer)) != -1) {
        destOut.write(buffer, 0, count);
      }

      destOut.close();

    }

    zis.close();

  }

}
TOP

Related Classes of com.googlecode.lucene.gae.tool.IndexToolTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.