/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.temptarget; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNull; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import org.testng.annotations.Test; import com.opengamma.id.UniqueId; import com.opengamma.util.test.TestGroup; /** * Test. */ @Test(groups = TestGroup.UNIT) public class RollingTempTargetRepositoryTest { private static class Mock extends RollingTempTargetRepository { @Override protected TempTarget getOldGeneration(final long uid) { throw new UnsupportedOperationException(); } @Override protected TempTarget getNewGeneration(final long uid) { throw new UnsupportedOperationException(); } @Override protected Long findOldGeneration(final TempTarget target) { throw new UnsupportedOperationException(); } @Override protected long findOrAddNewGeneration(final TempTarget target) { throw new UnsupportedOperationException(); } @Override protected boolean copyOldToNewGeneration(final long deadTime, final List<Long> deletes) { throw new UnsupportedOperationException(); } @Override protected void nextGeneration() { throw new UnsupportedOperationException(); } } public void testInvalidScheme() { final RollingTempTargetRepository mock = new Mock(); assertNull(mock.get(UniqueId.of("Foo", "42"))); } public void testGetDefault() { final TempTarget target = new MockTempTarget("Foo"); final RollingTempTargetRepository mock = new Mock() { @Override public TempTarget getNewGeneration(final long v) { assertEquals(v, 0L); return target; } }; assertEquals(mock.get(UniqueId.of(RollingTempTargetRepository.SCHEME, "0")), target); } public void testLocateOld() { final TempTarget target = new MockTempTarget("Foo"); final RollingTempTargetRepository mock = new Mock() { @Override public Long findOldGeneration(final TempTarget t) { assertEquals(t, target); return 42L; } }; assertEquals(mock.locateOrStore(target), UniqueId.of(RollingTempTargetRepository.SCHEME, "42")); } public void testLocateNew() { final TempTarget target = new MockTempTarget("Foo"); final RollingTempTargetRepository mock = new Mock() { @Override public Long findOldGeneration(final TempTarget t) { assertEquals(t, target); return null; } @Override public long findOrAddNewGeneration(final TempTarget t) { assertEquals(t, target); return 69; } }; assertEquals(mock.locateOrStore(target), UniqueId.of(RollingTempTargetRepository.SCHEME, "69")); } public void testHousekeepNoCopy() { final RollingTempTargetRepository mock = new Mock() { @Override public boolean copyOldToNewGeneration(final long deadTime, final List<Long> deletes) { return false; } }; mock.housekeep(); } public void testHousekeep() { final AtomicLong oldGenerationGet = new AtomicLong(); final AtomicLong newGenerationGet = new AtomicLong(); final AtomicInteger nextGenerationCount = new AtomicInteger(); final RollingTempTargetRepository mock = new Mock() { @Override public TempTarget getOldGeneration(final long uid) { oldGenerationGet.set(uid); return null; } @Override public TempTarget getNewGeneration(final long uid) { newGenerationGet.set(uid); return null; } @Override public boolean copyOldToNewGeneration(final long deadTime, final List<Long> deletes) { return true; } @Override public void nextGeneration() { nextGenerationCount.incrementAndGet(); } }; final long id1 = mock.allocIdentifier(); final long id2 = mock.allocIdentifier(); final long id3 = mock.allocIdentifier(); assertEquals(nextGenerationCount.get(), 0); mock.housekeep(); assertEquals(nextGenerationCount.get(), 1); final long id4 = mock.allocIdentifier(); final long id5 = mock.allocIdentifier(); mock.get(UniqueId.of(RollingTempTargetRepository.SCHEME, Long.toString(id1))); assertEquals(oldGenerationGet.get(), id1); mock.get(UniqueId.of(RollingTempTargetRepository.SCHEME, Long.toString(id2))); assertEquals(oldGenerationGet.get(), id2); mock.get(UniqueId.of(RollingTempTargetRepository.SCHEME, Long.toString(id3))); assertEquals(oldGenerationGet.get(), id3); mock.get(UniqueId.of(RollingTempTargetRepository.SCHEME, Long.toString(id4))); assertEquals(newGenerationGet.get(), id4); mock.get(UniqueId.of(RollingTempTargetRepository.SCHEME, Long.toString(id5))); assertEquals(newGenerationGet.get(), id5); } }