KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jboss > cache > eviction > MRUAlgorithmTest


1 /*
2  * JBoss, the OpenSource J2EE webOS
3  *
4  * Distributable under LGPL license.
5  * See terms of license at gnu.org.
6  */

7 package org.jboss.cache.eviction;
8
9 import junit.framework.TestCase;
10 import org.jboss.cache.Fqn;
11 import org.jboss.cache.RegionManager;
12 import org.jboss.cache.Region;
13
14 /**
15  * Unit tests for MRUAlgorithm.
16  *
17  * @author Daniel Huang (dhuang@jboss.org)
18  * @version $Revision: 1.4 $
19  */

20 public class MRUAlgorithmTest extends TestCase
21 {
22    MRUAlgorithm algorithm;
23    RegionManager regionManager;
24
25    public void setUp() throws Exception JavaDoc
26    {
27       super.setUp();
28       algorithm = new MRUAlgorithm();
29       MRUConfiguration config = new MRUConfiguration();
30       // We have to configure maxNodes!!
31
config.setMaxNodes(0);
32       config.setEvictionPolicyClass(DummyEvictionPolicy.class.getName());
33       regionManager = new RegionManager();
34       regionManager.getRegion("/a/b", true).setEvictionPolicy(config);
35    }
36
37    public void tearDown() throws Exception JavaDoc
38    {
39       super.tearDown();
40    }
41
42    public void testMaxNodes() throws Exception JavaDoc
43    {
44       Fqn fqn1 = Fqn.fromString("/a/b/c");
45       Fqn fqn2 = Fqn.fromString("/a/b/d");
46       Fqn fqn3 = Fqn.fromString("/a/b/e");
47       Region region = regionManager.getRegion("/a/b", true);
48       MRUConfiguration config = (MRUConfiguration) region.getEvictionPolicyConfig();
49       config.setMaxNodes(1);
50       region.putNodeEvent(new EvictedEventNode(fqn1, NodeEventType.ADD_NODE_EVENT));
51       region.putNodeEvent(new EvictedEventNode(fqn2, NodeEventType.ADD_NODE_EVENT));
52       region.putNodeEvent(new EvictedEventNode(fqn3, NodeEventType.ADD_NODE_EVENT));
53       algorithm.process(region);
54
55       assertEquals(1, algorithm.getEvictionQueue().getNumberOfNodes());
56
57       config.setMaxNodes(100);
58       for (int i = 0; i < 150; i++)
59       {
60          Fqn fqn = Fqn.fromString("/a/b/c/" + Integer.toString(i));
61          region.putNodeEvent(new EvictedEventNode(fqn, NodeEventType.ADD_NODE_EVENT));
62       }
63
64       algorithm.process(region);
65
66       assertEquals(100, algorithm.getEvictionQueue().getNumberOfNodes());
67    }
68
69    public void testMRU() throws Exception JavaDoc
70    {
71       Fqn fqn1 = Fqn.fromString("/a/b/c");
72       Fqn fqn2 = Fqn.fromString("/a/b/d");
73       Fqn fqn3 = Fqn.fromString("/a/b/e");
74       Fqn fqn4 = Fqn.fromString("/a/b/f");
75       Fqn fqn5 = Fqn.fromString("/a/b/g");
76       Fqn fqn6 = Fqn.fromString("/a/b/h");
77       Fqn fqn7 = Fqn.fromString("/a/b/i");
78       Fqn fqn8 = Fqn.fromString("/a/b/j");
79       Fqn fqn9 = Fqn.fromString("/a/b/k");
80       Fqn fqn10 = Fqn.fromString("/a/b/l");
81       Region region = regionManager.getRegion("/a/b", true);
82       MRUConfiguration config = (MRUConfiguration) region.getEvictionPolicyConfig();
83       config.setMaxNodes(8);
84       region.putNodeEvent(new EvictedEventNode(fqn1, NodeEventType.ADD_NODE_EVENT));
85       region.putNodeEvent(new EvictedEventNode(fqn2, NodeEventType.ADD_NODE_EVENT));
86       region.putNodeEvent(new EvictedEventNode(fqn3, NodeEventType.ADD_NODE_EVENT));
87       region.putNodeEvent(new EvictedEventNode(fqn4, NodeEventType.ADD_NODE_EVENT));
88       region.putNodeEvent(new EvictedEventNode(fqn5, NodeEventType.ADD_NODE_EVENT));
89       region.putNodeEvent(new EvictedEventNode(fqn6, NodeEventType.ADD_NODE_EVENT));
90       region.putNodeEvent(new EvictedEventNode(fqn7, NodeEventType.ADD_NODE_EVENT));
91       region.putNodeEvent(new EvictedEventNode(fqn8, NodeEventType.ADD_NODE_EVENT));
92
93       algorithm.process(region);
94
95       assertEquals(8, algorithm.getEvictionQueue().getNumberOfNodes());
96
97       region.putNodeEvent(new EvictedEventNode(fqn9, NodeEventType.ADD_NODE_EVENT));
98       region.putNodeEvent(new EvictedEventNode(fqn10, NodeEventType.ADD_NODE_EVENT));
99
100       Thread.sleep(5000);
101
102       region.putNodeEvent(new EvictedEventNode(fqn2, NodeEventType.ADD_NODE_EVENT));
103       region.putNodeEvent(new EvictedEventNode(fqn4, NodeEventType.ADD_NODE_EVENT));
104
105       algorithm.process(region);
106
107       assertEquals(8, algorithm.getEvictionQueue().getNumberOfNodes());
108
109       assertNull(algorithm.getEvictionQueue().getNodeEntry(fqn2));
110       assertNull(algorithm.getEvictionQueue().getNodeEntry(fqn4));
111
112       assertNotNull(algorithm.getEvictionQueue().getNodeEntry(fqn1));
113       assertNotNull(algorithm.getEvictionQueue().getNodeEntry(fqn3));
114       assertNotNull(algorithm.getEvictionQueue().getNodeEntry(fqn5));
115       assertNotNull(algorithm.getEvictionQueue().getNodeEntry(fqn6));
116       assertNotNull(algorithm.getEvictionQueue().getNodeEntry(fqn7));
117       assertNotNull(algorithm.getEvictionQueue().getNodeEntry(fqn8));
118       assertNotNull(algorithm.getEvictionQueue().getNodeEntry(fqn9));
119       assertNotNull(algorithm.getEvictionQueue().getNodeEntry(fqn10));
120    }
121
122 }
123
Popular Tags