package com.senseidb.indexing.activity;
import java.io.File;
import java.util.Collections;
import java.util.concurrent.TimeUnit;
import org.json.JSONObject;
import proj.zoie.impl.indexing.ZoieConfig;
import com.senseidb.test.SenseiStarter;
import junit.framework.TestCase;
public class ActivityStressTest extends TestCase {
private static final long UID_BASE = 10000000000L;
private File dir;
private CompositeActivityValues compositeActivityValues;
public void setUp() {
String pathname = getDirPath();
SenseiStarter.rmrf(new File("sensei-test"));
dir = new File(pathname);
dir.mkdirs();
}
public static String getDirPath() {
return "sensei-test/stressTest";
}
@Override
protected void tearDown() throws Exception {
File file = new File("sensei-test");
if (file.exists()) {
file.deleteOnExit();
SenseiStarter.rmrf(file);
}
}
public void test1() throws Exception {
int version = 0;
int iteration = 0;
int numberOfUniqueDocuments = 0;
while(true) {
compositeActivityValues = CompositeActivityValues.createCompositeValues(ActivityPersistenceFactory.getInstance(getDirPath()), java.util.Arrays.asList(PurgeUnusedActivitiesJobTest.getLikesFieldDefinition()), Collections.EMPTY_LIST, ZoieConfig.DEFAULT_VERSION_COMPARATOR);
if (iteration != 0) {
long[] arr = new long[5000];
for (int j = 0; j < arr.length; j++) {
arr[j] = j;
}
compositeActivityValues.delete(arr);
}
for (int i = 0; i < 15000; i++) {
compositeActivityValues.update(i, String.format("%08d", version), ActivityPrimitiveValuesPersistenceTest.toMap(new JSONObject().put("likes", "+1")));
version++;
}
compositeActivityValues.update(1000000 + (numberOfUniqueDocuments++), String.format("%08d", version++), ActivityPrimitiveValuesPersistenceTest.toMap(new JSONObject().put("likes", "+1")));
long[] arr = new long[5000];
for (int j = 0; j < arr.length; j++) {
arr[j] = j + 10000;
}
compositeActivityValues.delete(arr);
if (iteration == 0) {
close(version);
iteration++;
continue;
}
// assertEquals(0, compositeActivityValues.deletedIndexes.size());
compositeActivityValues.flush();
compositeActivityValues.syncWithPersistentVersion(String.format("%08d", version - 1));
assertEquals(10000 + numberOfUniqueDocuments, compositeActivityValues.uidToArrayIndex.size());
assertEquals(10000, compositeActivityValues.deletedIndexes.size());
assertEquals(20000 + numberOfUniqueDocuments, compositeActivityValues.metadata.count);
assertEquals(iteration + 1, compositeActivityValues.getIntValueByUID(5000, "likes"));
assertEquals(iteration + 1, compositeActivityValues.getIntValueByUID(9999, "likes"));
assertEquals(Integer.MIN_VALUE, compositeActivityValues.getIntValueByUID(10000, "likes"));
assertEquals(Integer.MIN_VALUE, compositeActivityValues.getIntValueByUID(14999, "likes"));
assertEquals(1, compositeActivityValues.getIntValueByUID(4999, "likes"));
assertEquals(1, compositeActivityValues.getIntValueByUID(0, "likes"));
assertEquals(1, compositeActivityValues.getIntValueByUID(1000000 + numberOfUniqueDocuments - 1, "likes"));
assertEquals(1, compositeActivityValues.getIntValueByUID(1000000, "likes"));
assertEquals(String.format("%08d", version - 1), compositeActivityValues.metadata.version);
compositeActivityValues.close();
compositeActivityValues.executor.awaitTermination(1, TimeUnit.SECONDS);
iteration++;
if (iteration == 10) {
break;
}
}
}
public void close(int version) throws InterruptedException {
compositeActivityValues.flush();
compositeActivityValues.syncWithPersistentVersion(String.format("%08d", version - 1));
compositeActivityValues.close();
compositeActivityValues.executor.awaitTermination(1, TimeUnit.SECONDS);
}
}