/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.enginedb.stats; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertNotNull; import static org.testng.AssertJUnit.assertNotSame; import static org.testng.AssertJUnit.assertNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.annotations.Factory; import org.testng.annotations.Test; import com.opengamma.engine.calcnode.stats.FunctionCostsDocument; import com.opengamma.enginedb.stats.DbFunctionCostsMaster; import com.opengamma.util.test.AbstractDbTest; import com.opengamma.util.test.DbTest; import com.opengamma.util.test.TestGroup; /** * Test. */ @Test(groups = TestGroup.UNIT_DB) public class DbFunctionCostsMasterTest extends AbstractDbTest { private static final Logger s_logger = LoggerFactory.getLogger(DbFunctionCostsMasterTest.class); private DbFunctionCostsMaster _costsMaster; @Factory(dataProvider = "databases", dataProviderClass = DbTest.class) public DbFunctionCostsMasterTest(String databaseType, String databaseVersion) { super(databaseType, databaseVersion); s_logger.info("running testcases for {}", databaseType); } //------------------------------------------------------------------------- @Override protected void doSetUp() { _costsMaster = new DbFunctionCostsMaster(getDbConnector()); } @Override protected void doTearDown() { _costsMaster = null; } //------------------------------------------------------------------------- @Test public void test_basics() throws Exception { assertNotNull(_costsMaster); assertNotNull(_costsMaster.getDbConnector()); assertNotNull(_costsMaster.getClock()); } //------------------------------------------------------------------------- @Test public void test_master() throws Exception { FunctionCostsDocument doc1 = new FunctionCostsDocument(); doc1.setConfigurationName("Conf1"); doc1.setFunctionId("Func1"); doc1.setInvocationCost(1.1); doc1.setDataInputCost(2.2); doc1.setDataOutputCost(3.3); FunctionCostsDocument doc2 = new FunctionCostsDocument(); doc2.setConfigurationName("Conf2"); doc2.setFunctionId("Func2"); doc2.setInvocationCost(10.1); doc2.setDataInputCost(20.2); doc2.setDataOutputCost(30.3); // check empty assertNull(_costsMaster.load("Conf1", "Func1", null)); assertNull(_costsMaster.load("Conf2", "Func2", null)); // store1 FunctionCostsDocument stored1 = _costsMaster.store(doc1); assertNotNull(stored1); assertNotNull(stored1.getVersion()); assertEquals("Conf1", stored1.getConfigurationName()); assertEquals("Func1", stored1.getFunctionId()); assertEquals(1.1, stored1.getInvocationCost(), 0.001); assertEquals(2.2, stored1.getDataInputCost(), 0.001); assertEquals(3.3, stored1.getDataOutputCost(), 0.001); FunctionCostsDocument loaded1 = _costsMaster.load("Conf1", "Func1", null); assertNotSame(stored1, loaded1); assertEquals(stored1.getVersion(), loaded1.getVersion()); assertEquals("Conf1", loaded1.getConfigurationName()); assertEquals("Func1", loaded1.getFunctionId()); assertEquals(1.1, loaded1.getInvocationCost(), 0.001); assertEquals(2.2, loaded1.getDataInputCost(), 0.001); assertEquals(3.3, loaded1.getDataOutputCost(), 0.001); // store2 FunctionCostsDocument stored2 = _costsMaster.store(doc2); assertNotNull(stored2); assertNotNull(stored2.getVersion()); assertEquals("Conf2", stored2.getConfigurationName()); assertEquals("Func2", stored2.getFunctionId()); assertEquals(10.1, stored2.getInvocationCost(), 0.001); assertEquals(20.2, stored2.getDataInputCost(), 0.001); assertEquals(30.3, stored2.getDataOutputCost(), 0.001); FunctionCostsDocument loaded2 = _costsMaster.load("Conf2", "Func2", null); assertNotSame(stored2, loaded2); assertEquals(stored2.getVersion(), loaded2.getVersion()); assertEquals("Conf2", loaded2.getConfigurationName()); assertEquals("Func2", loaded2.getFunctionId()); assertEquals(10.1, loaded2.getInvocationCost(), 0.001); assertEquals(20.2, loaded2.getDataInputCost(), 0.001); assertEquals(30.3, loaded2.getDataOutputCost(), 0.001); // safe from external modify doc1.setInvocationCost(0); FunctionCostsDocument loaded1b = _costsMaster.load("Conf1", "Func1", null); assertNotSame(loaded1, loaded1b); assertEquals(loaded1, loaded1b); } @Test public void test_history() throws Exception { FunctionCostsDocument doc1 = new FunctionCostsDocument(); doc1.setConfigurationName("Conf"); doc1.setFunctionId("Func"); doc1.setInvocationCost(1.1); doc1.setDataInputCost(2.2); doc1.setDataOutputCost(3.3); FunctionCostsDocument doc2 = new FunctionCostsDocument(); doc2.setConfigurationName("Conf"); doc2.setFunctionId("Func"); doc2.setInvocationCost(1.2); doc2.setDataInputCost(2.3); doc2.setDataOutputCost(3.4); // check empty assertNull(_costsMaster.load("Conf", "Func", null)); // store FunctionCostsDocument stored1 = _costsMaster.store(doc1); Thread.sleep(50); FunctionCostsDocument stored2 = _costsMaster.store(doc2); // load latest FunctionCostsDocument loadedLatest = _costsMaster.load("Conf", "Func", null); assertEquals(stored2.getVersion(), loadedLatest.getVersion()); assertEquals("Conf", loadedLatest.getConfigurationName()); assertEquals("Func", loadedLatest.getFunctionId()); assertEquals(1.2, loadedLatest.getInvocationCost(), 0.001); assertEquals(2.3, loadedLatest.getDataInputCost(), 0.001); assertEquals(3.4, loadedLatest.getDataOutputCost(), 0.001); // load historic FunctionCostsDocument loadedHistoric = _costsMaster.load("Conf", "Func", stored1.getVersion()); assertEquals(stored1.getVersion(), loadedHistoric.getVersion()); assertEquals("Conf", loadedHistoric.getConfigurationName()); assertEquals("Func", loadedHistoric.getFunctionId()); assertEquals(1.1, loadedHistoric.getInvocationCost(), 0.001); assertEquals(2.2, loadedHistoric.getDataInputCost(), 0.001); assertEquals(3.3, loadedHistoric.getDataOutputCost(), 0.001); FunctionCostsDocument loadedHistoric2 = _costsMaster.load("Conf", "Func", stored1.getVersion().plusMillis(1)); assertEquals(loadedHistoric, loadedHistoric2); // load prehistoric assertNull(_costsMaster.load("Conf", "Func", stored1.getVersion().minusMillis(1))); } //------------------------------------------------------------------------- @Test public void test_toString() { assertEquals("DbFunctionCostsMaster", _costsMaster.toString()); } }