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