package proj.zoie.test;
import java.io.File;
import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.util.Comparator;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import org.apache.log4j.Appender;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.index.IndexReader;
import org.junit.After;
import org.junit.Before;
import proj.zoie.api.DocIDMapperFactory;
import proj.zoie.api.ZoieSegmentReader;
import proj.zoie.api.indexing.IndexReaderDecorator;
import proj.zoie.impl.indexing.SimpleReaderCache;
import proj.zoie.impl.indexing.ZoieConfig;
import proj.zoie.impl.indexing.ZoieSystem;
import proj.zoie.test.data.DataInterpreterForTests;
public class ZoieTestCaseBase {
static {
Appender appender = null;
PatternLayout layout = new PatternLayout();
layout.setConversionPattern("%d{yyyy/MM/dd HH:mm:ss.SSS} %p [%c{1}] [%x] %m%n");
try {
appender = new org.apache.log4j.FileAppender(layout, "zoie-test-log.log");
} catch (IOException e) {
e.printStackTrace();
}
org.apache.log4j.BasicConfigurator.configure(appender);
}
static Logger log = Logger.getLogger(ZoieTestCaseBase.class);
static MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();
public void registerMBean(Object standardmbean, String mbeanname) {
try {
mbeanServer.registerMBean(standardmbean, new ObjectName("Zoie:name=" + mbeanname));
} catch (Exception e) {
log.warn(e);
}
}
public void unregisterMBean(String mbeanname) {
try {
mbeanServer.unregisterMBean(new ObjectName("Zoie:name=" + mbeanname));
} catch (Exception e) {
log.warn(e);
}
}
@After
@Before
public void tearDown() {
deleteDirectory(getIdxDir());
}
protected static File getIdxDir() {
File tmpDir = new File(System.getProperty("java.io.tmpdir"));
File tempFile = new File(tmpDir, "test-idx");
int i = 0;
while (tempFile.exists()) {
if (i > 10) {
log.info("cannot delete");
throw new IllegalStateException("cannot delete");
}
log.info("deleting " + tempFile);
deleteDirectory(tempFile);
// tempFile.delete();
try {
Thread.sleep(50);
} catch (Exception e) {
log.error("thread interrupted in sleep in deleting file" + e);
}
i++;
}
return tempFile;
}
protected static File getTmpDir() {
return new File(System.getProperty("java.io.tmpdir"));
}
protected static ZoieSystem<IndexReader, String> createZoie(File idxDir, boolean realtime,
Comparator<String> versionComparator) {
return createZoie(idxDir, realtime, 20, versionComparator);
}
protected static ZoieSystem<IndexReader, String> createZoie(File idxDir, boolean realtime,
Comparator<String> versionComparator, boolean immediateRefresh) {
return createZoie(idxDir, realtime, 20, versionComparator, immediateRefresh);
}
protected static ZoieSystem<IndexReader, String> createZoie(File idxDir, boolean realtime,
long delay, Comparator<String> versionComparator, boolean immediateRefresh) {
return createZoie(idxDir, realtime, delay, null, null, versionComparator, immediateRefresh);
}
/**
* @param idxDir
* @param realtime
* @param delay delay for interpreter (simulating a slow interpreter)
* @param zoieVersionFactory
* @return
*/
protected static ZoieSystem<IndexReader, String> createZoie(File idxDir, boolean realtime,
long delay, Comparator<String> versionComparator) {
return createZoie(idxDir, realtime, delay, null, null, versionComparator, false);
}
protected static ZoieSystem<IndexReader, String> createZoie(File idxDir, boolean realtime,
DocIDMapperFactory docidMapperFactory, Comparator<String> versionComparator) {
return createZoie(idxDir, realtime, 2, null, docidMapperFactory, versionComparator, false);
}
/**
* @param idxDir
* @param realtime
* @param delay delay for interpreter (simulating a slow interpreter)
* @param analyzer
* @param docidMapperFactory
* @param zoieVersionFactory
* @return
*/
protected static ZoieSystem<IndexReader, String> createZoie(File idxDir, boolean realtime,
long delay, Analyzer analyzer, DocIDMapperFactory docidMapperFactory,
Comparator<String> versionComparator, boolean immediateRefresh) {
ZoieConfig config = new ZoieConfig();
config.setDocidMapperFactory(docidMapperFactory);
config.setBatchSize(50);
config.setBatchDelay(2000);
config.setRtIndexing(realtime);
config.setVersionComparator(versionComparator);
config.setSimilarity(null);
config.setAnalyzer(null);
if (immediateRefresh) {
config.setReadercachefactory(SimpleReaderCache.FACTORY);
}
ZoieSystem<IndexReader, String> idxSystem = new ZoieSystem<IndexReader, String>(idxDir,
new DataInterpreterForTests(delay, analyzer), new TestIndexReaderDecorator(), config);
return idxSystem;
}
protected static class TestIndexReaderDecorator implements IndexReaderDecorator<IndexReader> {
@Override
public IndexReader decorate(ZoieSegmentReader<IndexReader> indexReader) throws IOException {
return indexReader;
}
@Override
public IndexReader redecorate(IndexReader decorated, ZoieSegmentReader<IndexReader> copy) throws IOException {
return decorated;
}
}
protected static boolean deleteDirectory(File path) {
if (path.exists()) {
File[] files = path.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
deleteDirectory(files[i]);
} else {
files[i].delete();
}
}
}
return (path.delete());
}
protected static class QueryThread extends Thread {
public volatile boolean stop = false;
public volatile boolean mismatch = false;
public volatile String message = null;
public Exception exception = null;
}
}