package org.geowebcache.diskquota.storage; import java.math.BigInteger; import junit.framework.TestCase; public class PageStatsTest extends TestCase { private static final int CREATION_TIME_MINUTES = 1000; private MockSystemUtils mockSysUtils; public void setUp() { mockSysUtils = new MockSystemUtils(); mockSysUtils.setCurrentTimeMinutes(CREATION_TIME_MINUTES); mockSysUtils.setCurrentTimeMillis(CREATION_TIME_MINUTES * 60 * 1000); SystemUtils.set(mockSysUtils); } public void testAddHitsNoFillFactor() { PageStats stats = new PageStats(1); stats.setFillFactor(0f); stats.addHitsAndAccessTime(10, CREATION_TIME_MINUTES, CREATION_TIME_MINUTES); float frequencyOfUsePerMinute = stats.getFrequencyOfUsePerMinute(); assertEquals(Float.MIN_VALUE, frequencyOfUsePerMinute, 1e-6f); } public void testAddHitsNoFillFactorNewLastAccessTime() { PageStats stats = new PageStats(1); stats.setFillFactor(0f); stats.addHitsAndAccessTime(10, CREATION_TIME_MINUTES + 2, CREATION_TIME_MINUTES); float frequencyOfUsePerMinute = stats.getFrequencyOfUsePerMinute(); assertEquals(Float.MIN_VALUE, frequencyOfUsePerMinute, 1e-6f); } public void testAddHitsFullFillFactor() { PageStats stats = new PageStats(1); stats.setFillFactor(1f); final int numHits = 10; stats.addHitsAndAccessTime(numHits, CREATION_TIME_MINUTES, CREATION_TIME_MINUTES); float frequencyOfUsePerMinute = stats.getFrequencyOfUsePerMinute(); assertEquals(numHits, frequencyOfUsePerMinute, 1e-6f); } public void testAddHitsFullFillFactorNewLastAccessTime() { PageStats stats = new PageStats(1); stats.setFillFactor(1f); // 10 hits added in the two minutes after page creation int numHits = 10; stats.addHitsAndAccessTime(numHits, CREATION_TIME_MINUTES + 2, CREATION_TIME_MINUTES); float frequencyOfUsePerMinute = stats.getFrequencyOfUsePerMinute(); assertEquals(numHits / 3f, frequencyOfUsePerMinute, 1e-6f); // 100 hits added in one minute later numHits = 100; stats.addHitsAndAccessTime(numHits, CREATION_TIME_MINUTES + 3, CREATION_TIME_MINUTES); frequencyOfUsePerMinute = stats.getFrequencyOfUsePerMinute(); assertEquals(110f / 4f, frequencyOfUsePerMinute, 1e-6f); } public void testAddHitsHalfFillFactor() { PageStats stats = new PageStats(1); stats.setFillFactor(0.5f); final int numHits = 10; stats.addHitsAndAccessTime(numHits, CREATION_TIME_MINUTES, CREATION_TIME_MINUTES); float frequencyOfUsePerMinute = stats.getFrequencyOfUsePerMinute(); assertEquals(numHits / 2f, frequencyOfUsePerMinute, 1e-6f); } public void testAddHitsHalfFillFactorNewLastAccessTime() { PageStats stats = new PageStats(1); float fillFactor = 0.5f; stats.setFillFactor(fillFactor); int numHits = 10; stats.addHitsAndAccessTime(numHits, CREATION_TIME_MINUTES + 2, CREATION_TIME_MINUTES); float frequencyOfUsePerMinute = stats.getFrequencyOfUsePerMinute(); assertEquals(fillFactor * (numHits / 3f), frequencyOfUsePerMinute, 1e-6f); } public void testAddTiles() { PageStats stats = new PageStats(1); final BigInteger maxTiles = BigInteger.valueOf(1000); stats.addTiles(1, maxTiles); assertEquals(1 / 1000f, stats.getFillFactor(), 1e-6f); stats.addTiles(499, maxTiles); assertEquals(0.5f, stats.getFillFactor(), 1e-6f); stats.addTiles(500, maxTiles); assertEquals(1f, stats.getFillFactor(), 1e-6f); } }