package crmdna.objectstore;
import com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig;
import com.google.appengine.tools.development.testing.LocalServiceTestHelper;
import com.googlecode.objectify.ObjectifyFilter;
import crmdna.client.Client;
import crmdna.common.ICode;
import crmdna.objectstore.ObjectStore.TimeUnit;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.Serializable;
import static crmdna.common.TestUtil.ensureResourceNotFoundException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class ObjectStoreTest {
private final LocalServiceTestHelper datastoreHelper = new LocalServiceTestHelper(
new LocalDatastoreServiceTestConfig().setApplyAllHighRepJobPolicy());
private final String client = "isha";
private final String invalidClient = "nonexistant";
@Before
public void setUp() {
datastoreHelper.setUp();
ObjectifyFilter.complete();
Client.create(client);
}
@After
public void tearDown() {
ObjectifyFilter.complete();
datastoreHelper.tearDown();
}
@Test
public void putGetAndSafeGetTest() throws InterruptedException {
long objectId = ObjectStore.put(client, new Long(100), 100,
TimeUnit.MILLISECONDS);
assertTrue(objectId != 0);
long l = (long) ObjectStore.get(client, objectId);
assertEquals(100, l);
objectId = ObjectStore
.put(client, "sathya", 100, TimeUnit.MILLISECONDS);
assertTrue(objectId != 0);
String s = (String) ObjectStoreCore.get(client, objectId);
assertEquals("sathya", s);
// sleep for 50ms
Thread.sleep(50);
assertEquals("sathya", ObjectStore.get(client, objectId));
// sleep for another 150ms. object should get expired
Thread.sleep(150);
assertEquals(null, ObjectStore.get(client, objectId));
// safeget should throw exception
final long id = objectId;
ensureResourceNotFoundException(new ICode() {
@Override
public void run() {
ObjectStore.safeGet(client, id);
}
});
// put an object
Prop prop = new Prop();
prop.id = 100;
prop.name = "Singapore";
objectId = ObjectStore.put(client, prop, 100, TimeUnit.HOURS);
prop = (Prop) ObjectStore.get(client, objectId);
assertTrue(prop != null);
assertEquals(100, prop.id);
assertEquals("Singapore", prop.name);
// client should be valid
ensureResourceNotFoundException(new ICode() {
@Override
public void run() {
ObjectStore.put(invalidClient, "sathya", 100, TimeUnit.HOURS);
}
});
}
public static class Prop implements Serializable {
private static final long serialVersionUID = 1L;
public long id;
public String name;
}
}