1   /*
2    * $Id: InMemoryStoreTestCase.java 12181 2008-06-26 20:05:55Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  package org.mule.util.store;
11  
12  import org.mule.tck.AbstractMuleTestCase;
13  
14  public class InMemoryStoreTestCase extends AbstractMuleTestCase
15  {
16      public void testTimedExpiry() throws Exception
17         {
18             // entryTTL=3 and expiryInterval=1 will cause background expiry
19             InMemoryObjectStore store = new InMemoryObjectStore();
20             store.setName("timed");
21             store.setMaxEntries(3);
22             store.setEntryTTL(3000);
23             store.setExpirationInterval(1000);
24             store.initialise();
25  
26             // store entries in quick succession
27             assertTrue(store.storeObject("1", "1"));
28             assertTrue(store.storeObject("2", "2"));
29             assertTrue(store.storeObject("3", "3"));
30  
31             // they should still be alive at this point
32             assertTrue(store.containsObject("1"));
33             assertTrue(store.containsObject("2"));
34             assertTrue(store.containsObject("3"));
35  
36             // wait until the entry TTL has been exceeded
37             Thread.sleep(4000);
38  
39             // make sure all values are gone
40             assertFalse(store.containsObject("1"));
41             assertFalse(store.containsObject("2"));
42             assertFalse(store.containsObject("3"));
43         }
44  
45         public void testMaxSize() throws Exception
46         {
47             InMemoryObjectStore store = new InMemoryObjectStore();
48             store.setName("bounded");
49             store.setMaxEntries(3);
50             // entryTTL=-1 means we will have to expire manually
51             store.setEntryTTL(-1);
52             store.setExpirationInterval(1000);
53             store.initialise();
54  
55  
56             assertTrue(store.storeObject("1", "1"));
57             assertTrue(store.storeObject("2", "2"));
58             assertTrue(store.storeObject("3", "3"));
59  
60             assertTrue(store.containsObject("1"));
61             assertTrue(store.containsObject("2"));
62             assertTrue(store.containsObject("3"));
63  
64             // sleep a bit to make sure that entries are not expired, even though the expiry
65             // thread is running every second
66             Thread.sleep(3000);
67             assertTrue(store.containsObject("1"));
68             assertTrue(store.containsObject("2"));
69             assertTrue(store.containsObject("3"));
70  
71             // exceed threshold
72             assertTrue(store.storeObject("4", "4"));
73  
74             // the oldest entry should still be there
75             assertTrue(store.containsObject("1"));
76  
77             // expire manually
78             store.expire();
79             assertFalse(store.containsObject("1"));
80             assertTrue(store.containsObject("2"));
81             assertTrue(store.containsObject("3"));
82             assertTrue(store.containsObject("4"));
83  
84             // exceed some more
85             assertTrue(store.storeObject("5", "5"));
86             store.expire();
87             assertFalse(store.containsObject("2"));
88             assertTrue(store.containsObject("3"));
89             assertTrue(store.containsObject("4"));
90             assertTrue(store.containsObject("5"));
91  
92             // and multiple times
93             assertTrue(store.storeObject("6", "6"));
94             assertTrue(store.storeObject("7", "7"));
95             assertTrue(store.storeObject("8", "8"));
96             assertTrue(store.storeObject("9", "9"));
97  
98             store.expire();
99             assertTrue(store.containsObject("7"));
100            assertTrue(store.containsObject("8"));
101            assertTrue(store.containsObject("9"));
102            assertFalse(store.containsObject("3"));
103            assertFalse(store.containsObject("4"));
104            assertFalse(store.containsObject("5"));
105            assertFalse(store.containsObject("6"));
106        }
107 
108 }