1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 package org.apache.log4j.helpers;
26
27 import org.apache.log4j.spi.LoggingEvent;
28 import org.apache.log4j.Logger;
29 import org.apache.log4j.Level;
30 import org.apache.log4j.helpers.CyclicBuffer;
31
32 import junit.framework.TestCase;
33 import junit.framework.TestSuite;
34 import junit.framework.TestFailure;
35 import junit.framework.Test;
36
37 /***
38 Unit test the {@link CyclicBuffer}.
39
40 @author Ceki Gülcü
41
42 */
43 public class CyclicBufferTestCase extends TestCase {
44
45 static Logger cat = Logger.getLogger("x");
46
47 static int MAX = 1000;
48
49 static LoggingEvent[] e = new LoggingEvent[MAX];
50
51 {
52 for (int i = 0; i < MAX; i++) {
53 e[i] = new LoggingEvent("", cat, Level.DEBUG, "e"+i, null);
54 }
55 }
56
57
58 public CyclicBufferTestCase(String name) {
59 super(name);
60 }
61
62
63 public
64 void setUp() {
65
66 }
67
68
69 public
70 void test0() {
71 int size = 2;
72
73 CyclicBuffer cb = new CyclicBuffer(size);
74 assertEquals(cb.getMaxSize(), size);
75
76 cb.add(e[0]);
77 assertEquals(cb.length(), 1);
78 assertEquals(cb.get(), e[0]); assertEquals(cb.length(), 0);
79 assertNull(cb.get()); assertEquals(cb.length(), 0);
80
81
82 cb = new CyclicBuffer(size);
83 cb.add(e[0]);
84 cb.add(e[1]);
85 assertEquals(cb.length(), 2);
86 assertEquals(cb.get(), e[0]); assertEquals(cb.length(), 1);
87 assertEquals(cb.get(), e[1]); assertEquals(cb.length(), 0);
88 assertNull(cb.get()); assertEquals(cb.length(), 0);
89
90
91 }
92
93 /***
94 Test a buffer of size 1,2,4,8,..,128
95 */
96 public
97 void test1() {
98 for(int bufSize = 1; bufSize <= 128; bufSize *=2)
99 doTest1(bufSize);
100 }
101
102 void doTest1(int size) {
103
104 CyclicBuffer cb = new CyclicBuffer(size);
105
106 assertEquals(cb.getMaxSize(), size);
107
108 for(int i = -(size+10); i < (size+10); i++) {
109 assertNull(cb.get(i));
110 }
111
112 for(int i = 0; i < MAX; i++) {
113 cb.add(e[i]);
114 int limit = i < size-1 ? i : size-1;
115
116
117
118 for(int j = limit; j >= 0; j--) {
119
120 assertEquals(cb.get(j), e[i-(limit-j)]);
121 }
122 assertNull(cb.get(-1));
123 assertNull(cb.get(limit+1));
124 }
125 }
126
127 public
128 void testResize() {
129 for(int isize = 1; isize <= 128; isize *=2) {
130 doTestResize(isize, isize/2+1, isize/2+1);
131 doTestResize(isize, isize/2+1, isize+10);
132 doTestResize(isize, isize+10, isize/2+1);
133 doTestResize(isize, isize+10, isize+10);
134 }
135 }
136
137 void doTestResize(int initialSize, int numberOfAdds, int newSize) {
138
139
140 CyclicBuffer cb = new CyclicBuffer(initialSize);
141 for(int i = 0; i < numberOfAdds; i++) {
142 cb.add(e[i]);
143 }
144 cb.resize(newSize);
145
146 int offset = numberOfAdds - initialSize;
147 if(offset< 0)
148 offset = 0;
149
150 int len = newSize < numberOfAdds ? newSize : numberOfAdds;
151 len = len < initialSize ? len : initialSize;
152
153 for(int j = 0; j < len; j++) {
154 assertEquals(cb.get(j), e[offset+j]);
155 }
156
157 }
158
159
160 public
161 static
162 Test suite() {
163 TestSuite suite = new TestSuite();
164 suite.addTest(new CyclicBufferTestCase("test0"));
165 suite.addTest(new CyclicBufferTestCase("test1"));
166 suite.addTest(new CyclicBufferTestCase("testResize"));
167 return suite;
168 }
169 }