/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.master.config.impl; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; import static org.testng.AssertJUnit.assertNotNull; import static org.testng.AssertJUnit.assertNull; import static org.testng.AssertJUnit.assertSame; import static org.testng.AssertJUnit.assertTrue; import java.util.HashSet; import java.util.List; import java.util.Set; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import com.google.common.base.Supplier; import com.opengamma.DataNotFoundException; import com.opengamma.core.config.impl.ConfigItem; import com.opengamma.id.ExternalId; import com.opengamma.id.ExternalIdBundle; import com.opengamma.id.ObjectId; import com.opengamma.id.ObjectIdSupplier; import com.opengamma.id.UniqueId; import com.opengamma.master.config.ConfigDocument; import com.opengamma.master.config.ConfigMaster; import com.opengamma.master.config.ConfigMetaDataRequest; import com.opengamma.master.config.ConfigMetaDataResult; import com.opengamma.master.config.ConfigSearchRequest; import com.opengamma.master.config.ConfigSearchResult; import com.opengamma.util.test.TestGroup; /** * Test {@link InMemoryConfigMaster}. */ @Test(groups = TestGroup.UNIT) public class InMemoryConfigMasterTest { private static final UniqueId OTHER_UID = UniqueId.of("U", "1"); private static final ExternalId VAL1 = ExternalId.of("Test", "sec1"); private static final ExternalId VAL2 = ExternalId.of("Test", "sec2"); private static final ExternalIdBundle VAL3 = ExternalIdBundle.of(VAL1); private static final ExternalIdBundle VAL4 = ExternalIdBundle.of(VAL2); private ConfigMaster _testEmpty; private ConfigMaster _testPopulated; private ConfigItem<ExternalId> _item1; private ConfigItem<ExternalId> _item2; private ConfigItem<ExternalIdBundle> _item3; private ConfigItem<ExternalIdBundle> _item4; @SuppressWarnings("unchecked") @BeforeMethod public void setUp() { _testEmpty = new InMemoryConfigMaster(new ObjectIdSupplier("Test")); _testPopulated = new InMemoryConfigMaster(new ObjectIdSupplier("Test")); _item1 = ConfigItem.of(VAL1); _item1.setName("ONE"); _item1 = (ConfigItem<ExternalId>) _testPopulated.add(new ConfigDocument(_item1)).getConfig(); _item2 = ConfigItem.of(VAL2); _item2.setName("TWO"); _item2 = (ConfigItem<ExternalId>) _testPopulated.add(new ConfigDocument(_item2)).getConfig(); _item3 = ConfigItem.of(VAL3); _item3.setName("THREE"); _item3 = (ConfigItem<ExternalIdBundle>) _testPopulated.add(new ConfigDocument(_item3)).getConfig(); _item4 = ConfigItem.of(VAL4); _item4.setName("FOUR"); _item4 = (ConfigItem<ExternalIdBundle>) _testPopulated.add(new ConfigDocument(_item4)).getConfig(); } //------------------------------------------------------------------------- @Test(expectedExceptions = IllegalArgumentException.class) public void test_constructor_nullSupplier() { new InMemoryConfigMaster((Supplier<ObjectId>) null); } @SuppressWarnings("unchecked") public void test_defaultSupplier() { InMemoryConfigMaster master = new InMemoryConfigMaster(); ConfigItem<ExternalId> item = ConfigItem.of(VAL1); item.setName("ONE"); ConfigItem<ExternalId> added = (ConfigItem<ExternalId>) master.add(new ConfigDocument(item)).getConfig(); assertEquals("MemCfg", added.getUniqueId().getScheme()); } @SuppressWarnings("unchecked") public void test_alternateSupplier() { InMemoryConfigMaster master = new InMemoryConfigMaster(new ObjectIdSupplier("Hello")); ConfigItem<ExternalId> item = ConfigItem.of(VAL1); item.setName("ONE"); ConfigItem<ExternalId> added = (ConfigItem<ExternalId>) master.add(new ConfigDocument(item)).getConfig(); assertEquals("Hello", added.getUniqueId().getScheme()); } //------------------------------------------------------------------------- public void test_search_oneId_noMatch() { ConfigSearchRequest<ExternalId> request = new ConfigSearchRequest<ExternalId>(); request.addConfigId(ObjectId.of("A", "UNREAL")); ConfigSearchResult<ExternalId> result = _testPopulated.search(request); assertEquals(0, result.getDocuments().size()); } public void test_search_oneId() { ConfigSearchRequest<ExternalId> request = new ConfigSearchRequest<ExternalId>(); request.addConfigId(_item2.getObjectId()); ConfigSearchResult<ExternalId> result = _testPopulated.search(request); assertEquals(1, result.getDocuments().size()); assertEquals(_item2, result.getFirstDocument().getConfig()); } //------------------------------------------------------------------------- public void test_metaData() { ConfigMetaDataResult test = _testPopulated.metaData(new ConfigMetaDataRequest()); assertNotNull(test); assertEquals(2, test.getConfigTypes().size()); assertTrue(test.getConfigTypes().contains(ExternalId.class)); assertTrue(test.getConfigTypes().contains(ExternalIdBundle.class)); } public void test_metaData_noTypes() { ConfigMetaDataRequest request = new ConfigMetaDataRequest(); request.setConfigTypes(false); ConfigMetaDataResult test = _testPopulated.metaData(request); assertNotNull(test); assertEquals(0, test.getConfigTypes().size()); } //------------------------------------------------------------------------- public void test_search_emptyMaster() { ConfigSearchRequest<Object> request = new ConfigSearchRequest<Object>(); ConfigSearchResult<Object> result = _testEmpty.search(request); assertEquals(0, result.getPaging().getTotalItems()); assertEquals(0, result.getDocuments().size()); } public void test_search_populatedMaster_all() { ConfigSearchRequest<Object> request = new ConfigSearchRequest<Object>(); ConfigSearchResult<Object> result = _testPopulated.search(request); assertEquals(4, result.getPaging().getTotalItems()); List<ConfigDocument> docs = result.getDocuments(); Set<ConfigItem<?>> items = new HashSet<ConfigItem<?>>(); for (ConfigDocument doc : docs) { items.add(doc.getConfig()); } assertEquals(4, items.size()); assertEquals(true, items.contains(_item1)); assertEquals(true, items.contains(_item2)); assertEquals(true, items.contains(_item3)); assertEquals(true, items.contains(_item4)); } public void test_search_populatedMaster_filterByName() { ConfigSearchRequest<Object> request = new ConfigSearchRequest<Object>(); request.setName("ONE"); ConfigSearchResult<Object> result = _testPopulated.search(request); assertEquals(1, result.getPaging().getTotalItems()); assertEquals(1, result.getDocuments().size()); assertEquals(true, result.getValues().contains(_item1)); } public void test_search_populatedMaster_filterByType() { ConfigSearchRequest<ExternalId> request = new ConfigSearchRequest<ExternalId>(); request.setType(ExternalId.class); ConfigSearchResult<ExternalId> result = _testPopulated.search(request); assertEquals(2, result.getPaging().getTotalItems()); assertEquals(2, result.getDocuments().size()); assertEquals(true, result.getValues().contains(_item1)); assertEquals(true, result.getValues().contains(_item2)); } //------------------------------------------------------------------------- @Test(expectedExceptions = DataNotFoundException.class) public void test_get_emptyMaster() { assertNull(_testEmpty.get(OTHER_UID)); } public void test_get_populatedMaster() { assertSame(_item1, _testPopulated.get(_item1.getUniqueId()).getConfig()); assertSame(_item2, _testPopulated.get(_item2.getUniqueId()).getConfig()); assertSame(_item3, _testPopulated.get(_item3.getUniqueId()).getConfig()); assertSame(_item4, _testPopulated.get(_item4.getUniqueId()).getConfig()); } public void test_get_typed_populatedMaster() { ConfigItem<?> storedDoc1 = _testPopulated.get(_item1.getUniqueId()).getConfig(); assertSame(_item1, storedDoc1); ConfigItem<?> storedDoc2 = _testPopulated.get(_item2.getUniqueId()).getConfig(); assertSame(_item2, storedDoc2); ConfigItem<?> storedDoc3 = _testPopulated.get(_item3.getUniqueId()).getConfig(); assertSame(_item3, storedDoc3); ConfigItem<?> storedDoc4 = _testPopulated.get(_item4.getUniqueId()).getConfig(); assertSame(_item4, storedDoc4); } public void test_get_invalid_typed_populatedMaster() { ConfigItem<?> storedDoc1 = _testPopulated.get(_item1.getUniqueId()).getConfig(); assertSame(_item1, storedDoc1); } //------------------------------------------------------------------------- public void test_add_emptyMaster() { ConfigItem<ExternalId> item = ConfigItem.of(VAL1); item.setName("Test"); ConfigDocument doc = _testEmpty.add(new ConfigDocument(item)); assertNotNull(doc.getVersionFromInstant()); assertEquals("Test", doc.getUniqueId().getScheme()); assertSame(VAL1, doc.getConfig().getValue()); } //------------------------------------------------------------------------- @Test(expectedExceptions = DataNotFoundException.class) public void test_update_emptyMaster() { ConfigItem<ExternalId> item = ConfigItem.of(VAL1); item.setUniqueId(OTHER_UID); _testEmpty.update(new ConfigDocument(item)); } public void test_update_populatedMaster() { ConfigItem<ExternalId> item = ConfigItem.of(VAL1); item.setUniqueId(_item1.getUniqueId()); ConfigDocument updated = _testPopulated.update(new ConfigDocument(item)); assertTrue(_item1.getUniqueId().getScheme().equals(updated.getUniqueId().getScheme())); assertTrue(_item1.getUniqueId().getValue().equals(updated.getUniqueId().getValue())); assertFalse(_item1.getUniqueId().getVersion().equals(updated.getUniqueId().getVersion())); assertNotNull(updated.getVersionFromInstant()); assertNotNull(updated.getVersionFromInstant()); } //------------------------------------------------------------------------- @Test(expectedExceptions = DataNotFoundException.class) public void test_remove_emptyMaster() { _testEmpty.remove(OTHER_UID); } public void test_remove_populatedMaster() { _testPopulated.remove(_item1.getUniqueId()); ConfigSearchRequest<Object> request = new ConfigSearchRequest<Object>(); ConfigSearchResult<Object> result = _testPopulated.search(request); assertEquals(3, result.getPaging().getTotalItems()); List<ConfigDocument> docs = result.getDocuments(); Set<ConfigItem<?>> items = new HashSet<ConfigItem<?>>(); for (ConfigDocument doc : docs) { items.add(doc.getConfig()); } assertEquals(3, items.size()); assertEquals(true, items.contains(_item2)); assertEquals(true, items.contains(_item3)); assertEquals(true, items.contains(_item4)); } }