/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.core.historicaltimeseries.impl; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.testng.AssertJUnit.assertEquals; import net.sf.ehcache.CacheManager; import org.testng.annotations.AfterClass; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import org.threeten.bp.LocalDate; import com.opengamma.core.change.BasicChangeManager; import com.opengamma.core.historicaltimeseries.HistoricalTimeSeries; import com.opengamma.core.historicaltimeseries.HistoricalTimeSeriesSource; import com.opengamma.core.id.ExternalSchemes; import com.opengamma.id.ExternalId; import com.opengamma.id.ExternalIdBundle; import com.opengamma.id.UniqueId; import com.opengamma.timeseries.date.localdate.ImmutableLocalDateDoubleTimeSeries; import com.opengamma.util.ehcache.EHCacheUtils; import com.opengamma.util.test.TestGroup; /** * Test. */ @Test(groups = {TestGroup.UNIT, "ehcache"}) public class EHCachingHistoricalTimeSeriesSourceTest { private static final UniqueId UID = UniqueId.of("A", "B"); private HistoricalTimeSeriesSource _underlyingSource; private EHCachingHistoricalTimeSeriesSource _cachingSource; private CacheManager _cacheManager; @BeforeClass public void setUpClass() { _cacheManager = EHCacheUtils.createTestCacheManager(EHCachingHistoricalTimeSeriesSourceTest.class); } @AfterClass public void tearDownClass() { EHCacheUtils.shutdownQuiet(_cacheManager); } @BeforeMethod public void setUp() { _underlyingSource = mock(HistoricalTimeSeriesSource.class); when(_underlyingSource.changeManager()).thenReturn(new BasicChangeManager()); _cachingSource = new EHCachingHistoricalTimeSeriesSource(_underlyingSource, _cacheManager); } @AfterMethod public void tearDown() { _cachingSource.shutdown(); } //------------------------------------------------------------------------- public void getHistoricalTimeSeries_UniqueId() { LocalDate[] dates = {LocalDate.of(2011, 6, 30)}; double[] values = {12.34d}; ImmutableLocalDateDoubleTimeSeries timeSeries = ImmutableLocalDateDoubleTimeSeries.of(dates, values); HistoricalTimeSeries series = new SimpleHistoricalTimeSeries(UID, timeSeries); when(_underlyingSource.getHistoricalTimeSeries(UID)).thenReturn(series); // Fetching same series twice should return same result HistoricalTimeSeries series1 = _cachingSource.getHistoricalTimeSeries(UID); HistoricalTimeSeries series2 = _cachingSource.getHistoricalTimeSeries(UID); assertEquals(series, series1); assertEquals(series, series2); assertEquals(series1, series2); // underlying source should only have been called once if cache worked as expected verify(_underlyingSource, times(1)).getHistoricalTimeSeries(UID); } public void getExternalIdBundle_UniqueId() { ExternalId djxTicker = ExternalId.of(ExternalSchemes.BLOOMBERG_TICKER, "DJX Index"); ExternalId djxBUID = ExternalId.of(ExternalSchemes.BLOOMBERG_BUID, "EI09JDX"); ExternalIdBundle idBundle = ExternalIdBundle.of(djxTicker, djxBUID); when(_underlyingSource.getExternalIdBundle(UID)).thenReturn(idBundle); // Fetching same series twice should return same result ExternalIdBundle bundle1 = _cachingSource.getExternalIdBundle(UID); ExternalIdBundle bundle2 = _cachingSource.getExternalIdBundle(UID); assertEquals(idBundle, bundle1); assertEquals(idBundle, bundle2); assertEquals(bundle1, bundle2); // underlying source should only have been called once if cache worked as expected verify(_underlyingSource, times(1)).getExternalIdBundle(UID); } }