/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.master.cache;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.testng.Assert.assertEquals;
import net.sf.ehcache.CacheManager;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.threeten.bp.LocalDateTime;
import org.threeten.bp.ZoneOffset;
import org.threeten.bp.ZonedDateTime;
import com.opengamma.id.VersionCorrection;
import com.opengamma.master.AbstractChangeProvidingMaster;
import com.opengamma.util.ehcache.EHCacheUtils;
import com.opengamma.util.test.TestGroup;
/**
* Test EHCaching master behaviour that is common across all masters, using dummy TestDocument and TestMaster classes
*/
@Test(groups = TestGroup.UNIT)
public class EHCachingMasterTest extends AbstractEHCachingMasterTest<CacheTestMaster, CacheTestDocument> {
{
// Initialise security documents
// Document A
docA100_V1999to2010_Cto2011 = new CacheTestDocument(A100_UID);
docA200_V2010to = new CacheTestDocument(A200_UID);
docA300_V1999to2010_C2011to = new CacheTestDocument(A300_UID);
// Document B
docB200_V2000to2009 = new CacheTestDocument(B200_UID);
docB400_V2009to2011 = new CacheTestDocument(B400_UID);
docB500_V2011to = new CacheTestDocument(B500_UID);
// Document C
docC100_Vto2011 = new CacheTestDocument(C100_UID);
docC300_V2011to = new CacheTestDocument(C300_UID);
// Document to add
DOC_TO_ADD = new CacheTestDocument(null);
DOC_ADDED = new CacheTestDocument(ADDED_UID);
}
class EHCachingTestMaster extends AbstractEHCachingMaster<CacheTestDocument> {
public EHCachingTestMaster(String name, AbstractChangeProvidingMaster<CacheTestDocument> underlying, CacheManager cacheManager) {
super(name, underlying, cacheManager);
}
}
//-------------------------------------------------------------------------
private CacheManager _cacheManager;
@BeforeClass
public void setUpClass() {
_cacheManager = EHCacheUtils.createTestCacheManager(EHCachingMasterTest.class);
}
@BeforeMethod
public void setUp() {
EHCacheUtils.clear(_cacheManager);
}
@AfterClass
public void tearDownClass() {
EHCacheUtils.shutdownQuiet(_cacheManager);
}
@Test
public void testGetUidVersioned() {
CacheTestMaster mockUnderlyingMaster = (CacheTestMaster) populateMockMaster(mock(CacheTestMaster.class));
EHCachingTestMaster cachingMaster = new EHCachingTestMaster("test", mockUnderlyingMaster, _cacheManager);
// Assert returned documents
assertEquals(docB200_V2000to2009, cachingMaster.get(docB200_V2000to2009.getUniqueId()));
assertEquals(docA100_V1999to2010_Cto2011, cachingMaster.get(docA100_V1999to2010_Cto2011.getUniqueId()));
assertEquals(docA100_V1999to2010_Cto2011, cachingMaster.get(docA100_V1999to2010_Cto2011.getUniqueId()));
assertEquals(docA100_V1999to2010_Cto2011, cachingMaster.get(docA100_V1999to2010_Cto2011.getUniqueId()));
assertEquals(docB200_V2000to2009, cachingMaster.get(docB200_V2000to2009.getUniqueId()));
assertEquals(docB200_V2000to2009, cachingMaster.get(docB200_V2000to2009.getUniqueId()));
assertEquals(docA100_V1999to2010_Cto2011, cachingMaster.get(docA100_V1999to2010_Cto2011.getUniqueId()));
assertEquals(docB200_V2000to2009, cachingMaster.get(docB200_V2000to2009.getUniqueId()));
// Assert invocation counts
verify(mockUnderlyingMaster, times(1)).get(docA100_V1999to2010_Cto2011.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docA200_V2010to.getUniqueId());
verify(mockUnderlyingMaster, times(1)).get(docB200_V2000to2009.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docB400_V2009to2011.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docB500_V2011to.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docC100_Vto2011.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docC300_V2011to.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docA200_V2010to.getObjectId(), VersionCorrection.LATEST);
verify(mockUnderlyingMaster, times(0)).get(docB500_V2011to.getObjectId(), VersionCorrection.LATEST);
verify(mockUnderlyingMaster, times(0)).get(docC300_V2011to.getObjectId(), VersionCorrection.LATEST);
cachingMaster.shutdown();
}
@Test
public void testGetUidUnversioned() {
CacheTestMaster mockUnderlyingMaster = (CacheTestMaster) populateMockMaster(mock(CacheTestMaster.class));
EHCachingTestMaster cachingMaster = new EHCachingTestMaster("test", mockUnderlyingMaster, _cacheManager);
// Assert returned documents
assertEquals(docB500_V2011to, cachingMaster.get(docB200_V2000to2009.getUniqueId().toLatest()));
assertEquals(docA200_V2010to, cachingMaster.get(docA100_V1999to2010_Cto2011.getUniqueId().toLatest()));
assertEquals(docA200_V2010to, cachingMaster.get(docA100_V1999to2010_Cto2011.getUniqueId().toLatest()));
assertEquals(docA200_V2010to, cachingMaster.get(docA100_V1999to2010_Cto2011.getUniqueId().toLatest()));
assertEquals(docB500_V2011to, cachingMaster.get(docB200_V2000to2009.getUniqueId().toLatest()));
assertEquals(docB500_V2011to, cachingMaster.get(docB200_V2000to2009.getUniqueId().toLatest()));
assertEquals(docA200_V2010to, cachingMaster.get(docA100_V1999to2010_Cto2011.getUniqueId().toLatest()));
assertEquals(docB500_V2011to, cachingMaster.get(docB200_V2000to2009.getUniqueId().toLatest()));
// Assert invocation counts
verify(mockUnderlyingMaster, times(1)).get(A300_UID.toLatest());
verify(mockUnderlyingMaster, times(1)).get(B500_UID.toLatest());
verify(mockUnderlyingMaster, times(0)).get(C300_UID.toLatest());
verify(mockUnderlyingMaster, times(0)).get(docA100_V1999to2010_Cto2011.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docA200_V2010to.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docB200_V2000to2009.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docB400_V2009to2011.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docB500_V2011to.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docC100_Vto2011.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docC300_V2011to.getUniqueId());
cachingMaster.shutdown();
}
@Test
public void testGetOidLatestVersionCorrection() {
CacheTestMaster mockUnderlyingMaster = (CacheTestMaster) populateMockMaster(mock(CacheTestMaster.class));
EHCachingTestMaster cachingMaster = new EHCachingTestMaster("test", mockUnderlyingMaster, _cacheManager);
// Assert returned documents
assertEquals(docB500_V2011to, cachingMaster.get(B_OID, VersionCorrection.LATEST));
assertEquals(docA200_V2010to, cachingMaster.get(A_OID, VersionCorrection.LATEST));
assertEquals(docA200_V2010to, cachingMaster.get(A_OID, VersionCorrection.LATEST));
assertEquals(docA200_V2010to, cachingMaster.get(A_OID, VersionCorrection.LATEST));
assertEquals(docB500_V2011to, cachingMaster.get(B_OID, VersionCorrection.LATEST));
assertEquals(docB500_V2011to, cachingMaster.get(B_OID, VersionCorrection.LATEST));
assertEquals(docA200_V2010to, cachingMaster.get(A_OID, VersionCorrection.LATEST));
assertEquals(docB500_V2011to, cachingMaster.get(B_OID, VersionCorrection.LATEST));
// Assert invocation counts
verify(mockUnderlyingMaster, times(1)).get(A_OID, VersionCorrection.LATEST);
verify(mockUnderlyingMaster, times(1)).get(B_OID, VersionCorrection.LATEST);
verify(mockUnderlyingMaster, times(0)).get(C_OID, VersionCorrection.LATEST);
verify(mockUnderlyingMaster, times(0)).get(docA100_V1999to2010_Cto2011.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docA200_V2010to.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docB200_V2000to2009.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docB400_V2009to2011.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docB500_V2011to.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docC100_Vto2011.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docC300_V2011to.getUniqueId());
cachingMaster.shutdown();
}
@Test
public void testGetOidMixedVersionCorrection() {
CacheTestMaster mockUnderlyingMaster = (CacheTestMaster) populateMockMaster(mock(CacheTestMaster.class));
EHCachingTestMaster cachingMaster = new EHCachingTestMaster("test", mockUnderlyingMaster, _cacheManager);
//TODO enhance testing of v/c range border cases
// Assert returned documents
assertEquals(docB500_V2011to, cachingMaster.get(B_OID, VersionCorrection.LATEST));
assertEquals(docA100_V1999to2010_Cto2011, cachingMaster.get(A_OID,
VersionCorrection.of(ZonedDateTime.of(LocalDateTime.of(2009, 1, 1, 12, 0, 0, 0), ZoneOffset.UTC).toInstant(),
ZonedDateTime.of(LocalDateTime.of(2010, 1, 1, 12, 0, 0, 0), ZoneOffset.UTC).toInstant())));
assertEquals(docA200_V2010to, cachingMaster.get(A_OID, VersionCorrection.LATEST));
assertEquals(docA300_V1999to2010_C2011to, cachingMaster.get(A_OID,
VersionCorrection.of(ZonedDateTime.of(LocalDateTime.of(2009, 6, 6, 12, 0, 0, 0), ZoneOffset.UTC).toInstant(), now)));
assertEquals(docB500_V2011to, cachingMaster.get(B_OID, VersionCorrection.of(now, now)));
assertEquals(docB500_V2011to, cachingMaster.get(B_OID, VersionCorrection.LATEST));
assertEquals(docA200_V2010to, cachingMaster.get(A_OID, VersionCorrection.LATEST));
assertEquals(docB500_V2011to, cachingMaster.get(B_OID,
VersionCorrection.of(ZonedDateTime.of(LocalDateTime.of(2011, 6, 6, 12, 0, 0, 0), ZoneOffset.UTC).toInstant(), now)));
// Assert invocation counts
verify(mockUnderlyingMaster, times(1)).get(B_OID, VersionCorrection.LATEST);
verify(mockUnderlyingMaster, times(1)).get(A_OID,
VersionCorrection.of(ZonedDateTime.of(LocalDateTime.of(2009, 1, 1, 12, 0, 0, 0), ZoneOffset.UTC).toInstant(),
ZonedDateTime.of(LocalDateTime.of(2010, 1, 1, 12, 0, 0, 0), ZoneOffset.UTC).toInstant()));
verify(mockUnderlyingMaster, times(1)).get(A_OID, VersionCorrection.LATEST);
verify(mockUnderlyingMaster, times(1)).get(A_OID,
VersionCorrection.of(ZonedDateTime.of(LocalDateTime.of(2009, 6, 6, 12, 0, 0, 0), ZoneOffset.UTC).toInstant(), now));
verify(mockUnderlyingMaster, times(0)).get(B_OID, VersionCorrection.of(now, now));
verify(mockUnderlyingMaster, times(0)).get(B_OID,
VersionCorrection.of(ZonedDateTime.of(LocalDateTime.of(2011, 6, 6, 12, 0, 0, 0), ZoneOffset.UTC).toInstant(), now));
verify(mockUnderlyingMaster, times(0)).get(C_OID, VersionCorrection.LATEST);
verify(mockUnderlyingMaster, times(0)).get(docA100_V1999to2010_Cto2011.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docA200_V2010to.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docA300_V1999to2010_C2011to.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docB200_V2000to2009.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docB400_V2009to2011.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docB500_V2011to.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docC100_Vto2011.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(docC300_V2011to.getUniqueId());
cachingMaster.shutdown();
}
//@Test
//public void testCachedMiss() {
// TestMaster mockUnderlyingMaster = (TestMaster) populateMockMaster(mock(TestMaster.class));
// EHCachingTestMaster cachingMaster = new EHCachingTestMaster("test", mockUnderlyingMaster, _cacheManager);
//
// //TODO
//
// cachingMaster.shutdown();
//}
//
////-------------------------------------------------------------------------
//
//@Test
//public void testUpdate() {
// TestMaster mockUnderlyingMaster = (TestMaster) populateMockMaster(mock(TestMaster.class));
// EHCachingTestMaster cachingMaster = new EHCachingTestMaster("test", mockUnderlyingMaster, _cacheManager);
//
// //TODO
//
// cachingMaster.shutdown();
//}
@Test
public void testAdd() {
CacheTestMaster mockUnderlyingMaster = (CacheTestMaster) populateMockMaster(mock(CacheTestMaster.class));
EHCachingTestMaster cachingMaster = new EHCachingTestMaster("test", mockUnderlyingMaster, _cacheManager);
// Assert returned documents
assertEquals(DOC_ADDED, cachingMaster.add(DOC_TO_ADD));
// Assert cache contents
assertEquals(DOC_ADDED, cachingMaster.get(DOC_ADDED.getUniqueId()));
assertEquals(DOC_ADDED, cachingMaster.get(DOC_ADDED.getObjectId(), VersionCorrection.LATEST));
assertEquals(DOC_ADDED, cachingMaster.get(DOC_ADDED.getObjectId(), VersionCorrection.of(now, now)));
// Assert invocation counts
verify(mockUnderlyingMaster, times(1)).add(DOC_TO_ADD);
verify(mockUnderlyingMaster, times(0)).add(DOC_ADDED);
verify(mockUnderlyingMaster, times(0)).get(DOC_ADDED.getUniqueId());
verify(mockUnderlyingMaster, times(0)).get(DOC_TO_ADD.getUniqueId());
cachingMaster.shutdown();
}
//@Test
//public void testRemove() {
// TestMaster mockUnderlyingMaster = (TestMaster) populateMockMaster(mock(TestMaster.class));
// EHCachingTestMaster cachingMaster = new EHCachingTestMaster("test", mockUnderlyingMaster, _cacheManager);
//
// //TODO
//
// cachingMaster.shutdown();
//}
//
//@Test
//public void testCorrect() { // same as replaceVersion()
// TestMaster mockUnderlyingMaster = (TestMaster) populateMockMaster(mock(TestMaster.class));
// EHCachingTestMaster cachingMaster = new EHCachingTestMaster("test", mockUnderlyingMaster, _cacheManager);
//
// //TODO
//
// cachingMaster.shutdown();
//}
//
//@Test
//public void testReplaceVersion() {
// TestMaster mockUnderlyingMaster = (TestMaster) populateMockMaster(mock(TestMaster.class));
// EHCachingTestMaster cachingMaster = new EHCachingTestMaster("test", mockUnderlyingMaster, _cacheManager);
//
// //TODO
//
// cachingMaster.shutdown();
//}
//
//@Test
//public void testReplaceAllVersions() {
// TestMaster mockUnderlyingMaster = (TestMaster) populateMockMaster(mock(TestMaster.class));
// EHCachingTestMaster cachingMaster = new EHCachingTestMaster("test", mockUnderlyingMaster, _cacheManager);
//
// //TODO
//
// cachingMaster.shutdown();
//}
//
//@Test
//public void testReplaceVersions() {
// TestMaster mockUnderlyingMaster = (TestMaster) populateMockMaster(mock(TestMaster.class));
// EHCachingTestMaster cachingMaster = new EHCachingTestMaster("test", mockUnderlyingMaster, _cacheManager);
//
// //TODO
//
// cachingMaster.shutdown();
//}
//
//@Test
//public void testRemoveVersion() {
// TestMaster mockUnderlyingMaster = (TestMaster) populateMockMaster(mock(TestMaster.class));
// EHCachingTestMaster cachingMaster = new EHCachingTestMaster("test", mockUnderlyingMaster, _cacheManager);
//
// //TODO
//
// cachingMaster.shutdown();
//}
//
//@Test
//public void testAddVersion() {
// TestMaster mockUnderlyingMaster = (TestMaster) populateMockMaster(mock(TestMaster.class));
// EHCachingTestMaster cachingMaster = new EHCachingTestMaster("test", mockUnderlyingMaster, _cacheManager);
//
// //TODO
//
// cachingMaster.shutdown();
//}
//
//@Test
//public void testChangeProvider() {
// TestMaster mockUnderlyingMaster = (TestMaster) populateMockMaster(mock(TestMaster.class));
// EHCachingTestMaster cachingMaster = new EHCachingTestMaster("test", mockUnderlyingMaster, _cacheManager);
//
// //TODO
//
// cachingMaster.shutdown();
//}
}