/* *************************************************************************************** * Copyright (C) 2006 EsperTech, Inc. All rights reserved. * * http://www.espertech.com/esper * * http://www.espertech.com * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the GPL license * * a copy of which has been included with this distribution in the license.txt file. * *************************************************************************************** */ package com.espertech.esper.epl.db; import com.espertech.esper.client.ConfigurationCacheReferenceType; import com.espertech.esper.core.support.SupportSchedulingServiceImpl; import com.espertech.esper.epl.expression.time.TimeAbacusMilliseconds; import com.espertech.esper.epl.join.table.EventTable; import com.espertech.esper.epl.join.table.UnindexedEventTableImpl; import com.espertech.esper.schedule.SchedulingServiceImpl; import com.espertech.esper.timer.TimeSourceServiceImpl; import junit.framework.TestCase; public class TestDataCacheExpiringImpl extends TestCase { private SupportSchedulingServiceImpl scheduler; private DataCacheExpiringImpl cache; private EventTable[] lists = new EventTable[10]; public void setUp() { for (int i = 0; i < lists.length; i++) { lists[i] = new UnindexedEventTableImpl(0); } } public void testPurgeInterval() { SchedulingServiceImpl scheduler = new SchedulingServiceImpl(new TimeSourceServiceImpl()); cache = new DataCacheExpiringImpl(10, 20, ConfigurationCacheReferenceType.HARD, scheduler, 1, null, TimeAbacusMilliseconds.INSTANCE); // age 10 sec, purge 1000 seconds // test single entry in cache scheduler.setTime(5000); cache.put(make("a"), 1, new EventTable[]{lists[0]}); // a at 5 sec assertSame(lists[0], cache.getCached(make("a"), 1)[0]); scheduler.setTime(26000); SupportSchedulingServiceImpl.evaluateSchedule(scheduler); assertEquals(0, cache.getSize()); // test 4 entries in cache scheduler.setTime(30000); cache.put(make("b"), 1, new EventTable[]{lists[1]}); // b at 30 sec scheduler.setTime(35000); cache.put(make("c"), 1, new EventTable[]{lists[2]}); // c at 35 sec scheduler.setTime(40000); cache.put(make("d"), 1, new EventTable[]{lists[3]}); // d at 40 sec scheduler.setTime(45000); cache.put(make("e"), 1, new EventTable[]{lists[4]}); // d at 40 sec scheduler.setTime(50000); SupportSchedulingServiceImpl.evaluateSchedule(scheduler); assertEquals(2, cache.getSize()); // only d and e assertSame(lists[3], cache.getCached(make("d"), 1)[0]); assertSame(lists[4], cache.getCached(make("e"), 1)[0]); } public void testGet() { scheduler = new SupportSchedulingServiceImpl(); cache = new DataCacheExpiringImpl(10, 1000, ConfigurationCacheReferenceType.HARD, scheduler, 1, null, TimeAbacusMilliseconds.INSTANCE); // age 10 sec, purge 1000 seconds assertNull(cache.getCached(make("a"), 1)); scheduler.setTime(5000); cache.put(make("a"), 1, new EventTable[]{lists[0]}); // a at 5 sec assertSame(lists[0], cache.getCached(make("a"), 1)[0]); scheduler.setTime(10000); cache.put(make("b"), 1, new EventTable[]{lists[1]}); // b at 10 sec assertSame(lists[0], cache.getCached(make("a"), 1)[0]); assertSame(lists[1], cache.getCached(make("b"), 1)[0]); scheduler.setTime(11000); cache.put(make("c"), 1, new EventTable[]{lists[2]}); // c at 11 sec cache.put(make("d"), 1, new EventTable[]{lists[3]}); // d at 11 sec scheduler.setTime(14999); assertSame(lists[0], cache.getCached(make("a"), 1)[0]); scheduler.setTime(15000); assertSame(lists[0], cache.getCached(make("a"), 1)[0]); scheduler.setTime(15001); assertNull(cache.getCached(make("a"), 1)); scheduler.setTime(15001); assertNull(cache.getCached(make("a"), 1)); scheduler.setTime(15001); assertNull(cache.getCached(make("a"), 1)); assertSame(lists[1], cache.getCached(make("b"), 1)[0]); assertSame(lists[2], cache.getCached(make("c"), 1)[0]); assertSame(lists[3], cache.getCached(make("d"), 1)[0]); scheduler.setTime(20000); assertSame(lists[1], cache.getCached(make("b"), 1)[0]); scheduler.setTime(20001); assertNull(cache.getCached(make("b"), 1)); scheduler.setTime(21001); assertNull(cache.getCached(make("a"), 1)); assertNull(cache.getCached(make("b"), 1)); assertNull(cache.getCached(make("c"), 1)); assertNull(cache.getCached(make("d"), 1)); scheduler.setTime(22000); cache.put(make("b"), 1, new EventTable[]{lists[1]}); // b at 22 sec cache.put(make("d"), 1, new EventTable[]{lists[3]}); // d at 22 sec scheduler.setTime(32000); assertSame(lists[1], cache.getCached(make("b"), 1)[0]); assertSame(lists[3], cache.getCached(make("d"), 1)[0]); } private Object[] make(String key) { return new Object[]{key}; } }