/** * 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.testng.AssertJUnit.assertEquals; import java.util.ArrayList; import java.util.List; import net.sf.ehcache.CacheManager; import org.joda.beans.Bean; import org.testng.annotations.Test; import com.opengamma.id.UniqueId; import com.opengamma.master.security.SecuritySearchRequest; import com.opengamma.util.ehcache.EHCacheUtils; import com.opengamma.util.paging.PagingRequest; import com.opengamma.util.test.TestGroup; import com.opengamma.util.tuple.IntObjectPair; @Test(groups = TestGroup.UNIT) public class EHCachingSearchCacheTest { private static final int TOTAL_SIZE = 100; private static final String TEST_SCHEME = "TEST"; @Test public void testSearchCache() { for (int requestSize = 1; requestSize < TOTAL_SIZE; requestSize = requestSize + 17) { for (int requestStartStepSize = 1; requestStartStepSize < TOTAL_SIZE / 2; requestStartStepSize = requestStartStepSize + 71) { EHCachingSearchCache searchCache = getCleanSearchCache(); for (int requestStartPos = 0; requestStartPos * requestStartStepSize < TOTAL_SIZE * 4; requestStartPos++) { PagingRequest pagingRequest = PagingRequest.ofIndex((requestStartPos * requestStartStepSize) % TOTAL_SIZE, requestSize); assertEquals(searchCache.search(new SecuritySearchRequest(), pagingRequest, false).getSecond(), buildResultIDs( PagingRequest.ofIndex( pagingRequest.getFirstItem(), Math.min(pagingRequest.getLastItem() - pagingRequest.getFirstItem(), TOTAL_SIZE - pagingRequest.getFirstItem() ) ) ) ); } } } } @Test public void testSearchCachePrefetching() { for (int requestSize = 1; requestSize < TOTAL_SIZE; requestSize = requestSize + 17) { for (int requestStartStepSize = 1; requestStartStepSize < TOTAL_SIZE / 2; requestStartStepSize = requestStartStepSize + 71) { EHCachingSearchCache searchCache = getCleanSearchCache(); for (int requestStartPos = 0; requestStartPos * requestStartStepSize < TOTAL_SIZE * 4; requestStartPos++) { PagingRequest pagingRequest = PagingRequest.ofIndex((requestStartPos * requestStartStepSize) % TOTAL_SIZE, requestSize); searchCache.prefetch(new SecuritySearchRequest(), pagingRequest); assertEquals(searchCache.search(new SecuritySearchRequest(), pagingRequest, false).getSecond(), buildResultIDs( PagingRequest.ofIndex( pagingRequest.getFirstItem(), Math.min(pagingRequest.getLastItem() - pagingRequest.getFirstItem(), TOTAL_SIZE - pagingRequest.getFirstItem() ) ) ) ); } } } } /** * Returns an empty cache manager * @return the cache manager */ private CacheManager getCleanCacheManager() { CacheManager cacheManager = EHCacheUtils.createTestCacheManager(getClass().getName() + System.currentTimeMillis()); cacheManager.clearAll(); cacheManager.removalAll(); return cacheManager; } private EHCachingSearchCache getCleanSearchCache() { return new EHCachingSearchCache("Test", getCleanCacheManager(), new EHCachingSearchCache.Searcher() { @Override public IntObjectPair<List<UniqueId>> search(Bean request, PagingRequest pagingRequest) { List<UniqueId> result = buildResultIDs(pagingRequest); return IntObjectPair.of(TOTAL_SIZE, result); } }); } private List<UniqueId> buildResultIDs(PagingRequest pagingRequest) { List<UniqueId> result = new ArrayList<>(); for (int i = pagingRequest.getFirstItem(); i < pagingRequest.getLastItem(); i++) { UniqueId uniqueId = UniqueId.of(TEST_SCHEME, Integer.toString(i), "1"); result.add(uniqueId); } return result; } }