package ome.formats.utests;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import ome.util.LSID;
import ome.formats.Index;
import ome.formats.OMEROMetadataStoreClient;
import ome.formats.model.BlitzInstanceProvider;
import ome.xml.model.primitives.PositiveInteger;
import omero.model.Image;
import omero.model.ObjectiveSettings;
import omero.model.Pixels;
import omero.api.ServiceFactoryPrx;
import junit.framework.TestCase;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class IObjectContainerStoreTest extends TestCase
{
private OMEROMetadataStoreClient store;
private static final int IMAGE_INDEX = 0;
@BeforeMethod
protected void setUp() throws Exception
{
ServiceFactoryPrx sf = new TestServiceFactory().proxy();
store = new OMEROMetadataStoreClient();
store.initialize(sf);
store.setReader(new TestReader());
store.setEnumerationProvider(new TestEnumerationProvider());
store.setInstanceProvider(
new BlitzInstanceProvider(store.getEnumerationProvider()));
// Two objects of the same type
store.setImageName("Foo1", IMAGE_INDEX);
store.setImageName("Foo2", IMAGE_INDEX + 1);
// Objects of a different type
store.setPixelsSizeX(new PositiveInteger(1), IMAGE_INDEX);
store.setPixelsSizeX(new PositiveInteger(1), IMAGE_INDEX + 1);
// Add a reference
store.setObjectiveSettingsID("Objective:0", IMAGE_INDEX);
}
@Test
public void testGetCaches()
{
assertNotNull(store.getContainerCache());
assertNotNull(store.getReferenceCache());
assertNull(store.getReferenceStringCache());
}
@Test
public void testSetReferenceStringCache()
{
Map<String, String[]> a = new HashMap<String, String[]>();
store.setReferenceStringCache(a);
assertEquals(a, store.getReferenceStringCache());
}
@Test
public void testGetSourceObject()
{
assertNotNull(store.getSourceObject(new LSID(Image.class, 0)));
}
@Test
public void testGetSourceObjects()
{
assertEquals(2, store.getSourceObjects(Image.class).size());
}
@Test
public void testGetIObjectContainer()
{
LinkedHashMap<Index, Integer> indexes =
new LinkedHashMap<Index, Integer>();
indexes.put(Index.IMAGE_INDEX, IMAGE_INDEX + 2);
store.getIObjectContainer(Image.class, indexes);
assertEquals(3, store.countCachedContainers(Image.class));
}
@Test
public void testCachedContainers()
{
assertEquals(2, store.countCachedContainers(Image.class));
assertEquals(2, store.countCachedContainers(Pixels.class));
assertEquals(1, store.countCachedContainers(
Pixels.class, IMAGE_INDEX));
assertEquals(1, store.countCachedContainers(
Pixels.class, IMAGE_INDEX + 1));
}
@Test
public void testHasReference()
{
assertTrue(store.hasReference(new LSID(ObjectiveSettings.class,
IMAGE_INDEX), new LSID("Objective:0")));
}
@Test
public void testCount10000CachedContainers()
{
for (int i = 0; i < 10000; i++)
{
store.setImageName(String.valueOf(i), i);
}
long t0 = System.currentTimeMillis();
store.countCachedContainers(Image.class, null);
assertTrue((System.currentTimeMillis() - t0) < 100);
}
@Test
public void testGet10000ContainersByClass()
{
for (int i = 0; i < 10000; i++)
{
store.setImageName(String.valueOf(i), i);
}
long t0 = System.currentTimeMillis();
store.getIObjectContainers(Image.class);
assertTrue((System.currentTimeMillis() - t0) < 100);
}
}