1
2
3
4
5
6 package net.kwfgrid.gwes.uiproxy;
7
8 import junit.framework.TestCase;
9
10 import java.util.*;
11
12
13
14
15 public class TestSequenceBuffer extends TestCase {
16 protected class DummySequenceBuffer extends SequenceBuffer {
17 protected int getSequenceNumber(Object message) {
18 Integer i = (Integer)message;
19 return i.intValue();
20 }
21
22 public Exception getException() {
23 return _exception;
24 }
25
26 protected boolean shouldHandle(Object message) {
27 return true;
28 }
29 }
30
31 protected List createMessages(int num) {
32 List messages = new LinkedList();
33 for (int i=0; i<num; i++) {
34 messages.add(new Integer(i));
35 }
36 return messages;
37 }
38
39 public void testInitialize() throws BufferException {
40 List messages = createMessages(1);
41 SequenceBuffer buffer = new DummySequenceBuffer();
42 buffer.handle(messages.get(0));
43 Object[] polled = buffer.read();
44 assertEquals("Buffer should not return messages before initialization.", 0, polled.length);
45 buffer.setProperty(SequenceBuffer.FIRST_PROPERTY_KEY, "0");
46 polled = buffer.read();
47 assertEquals("Buffer should return exactly one message after initalization.", 1, polled.length);
48 polled = buffer.read();
49 assertEquals("Buffer should be empty.", 0, polled.length);
50 }
51
52 public void testOrdering() throws BufferException {
53 DummySequenceBuffer buffer = new DummySequenceBuffer();
54 List messages = createMessages(buffer.getSize()+7);
55 buffer.setProperty(SequenceBuffer.FIRST_PROPERTY_KEY, "0");
56 buffer.handle(messages.get(1));
57 buffer.handle(messages.get(0));
58 Object[] polled = buffer.read();
59 assertEquals("Buffer should return two messages.", 2, polled.length);
60 for (int i=0; i<polled.length; i++) {
61 assertEquals("Expected sequence number "+i+".", ""+i, polled[i].toString());
62 }
63 polled = buffer.read();
64 assertEquals("Buffer should be empty.", 0, polled.length);
65
66 buffer = new DummySequenceBuffer();
67 buffer.setProperty(SequenceBuffer.FIRST_PROPERTY_KEY, "0");
68 buffer.handle(messages.get(0));
69 buffer.handle(messages.get(2));
70 buffer.handle(messages.get(1));
71 buffer.handle(messages.get(4));
72 polled = buffer.read();
73 assertEquals("Buffer should return three messages.", 3, polled.length);
74 for (int i=0; i<polled.length; i++) {
75 assertEquals("Expected sequence number "+i+".", ""+i, polled[i].toString());
76 }
77 buffer.handle(messages.get(5));
78 buffer.handle(messages.get(3));
79 polled = buffer.read();
80 assertEquals("Buffer should return three messages.", 3, polled.length);
81 for (int i=0; i<polled.length; i++) {
82 assertEquals("Expected sequence number "+i+".", ""+(i+3), polled[i].toString());
83 }
84 polled = buffer.read();
85 assertEquals("Buffer should be empty.", 0, polled.length);
86 buffer.handle(messages.get(0));
87 polled = buffer.read();
88 assertEquals("Buffer should discard old messages.", 0, polled.length);
89 for (int i=6; i<messages.size()-1; i++) {
90 buffer.handle(messages.get(i));
91 }
92 assertNull("Buffer should not notify overflow.", buffer.getException());
93 buffer.handle(messages.get(messages.size()-1));
94 assertNotNull("Buffer should notify overflow.", buffer.getException());
95 }
96
97 public void testOverflow() throws BufferException {
98 DummySequenceBuffer buffer = new DummySequenceBuffer();
99 buffer.setProperty(SequenceBuffer.FIRST_PROPERTY_KEY, "0");
100 List messages = createMessages(buffer.getSize()+1);
101 for (int i=messages.size()-1; i>=1; i--) {
102 buffer.handle(messages.get(i));
103 }
104 try {
105 Object[] polled = buffer.read();
106 fail("Buffer should notify overflow.");
107 } catch (BufferOverflowException e) {
108
109 }
110
111 buffer = new DummySequenceBuffer();
112 buffer.setProperty(SequenceBuffer.FIRST_PROPERTY_KEY, "1");
113 messages = createMessages(buffer.getSize()+2);
114 for (int i=messages.size()-2; i>=1; i--) {
115 buffer.handle(messages.get(i));
116 }
117 assertNull("Buffer should not notify overflow.", buffer.getException());
118 buffer.handle(messages.get(0));
119 assertNull("Buffer should discard old messages.", buffer.getException());
120 buffer.handle(messages.get(messages.size()-1));
121 try {
122 Object[] polled = buffer.read();
123 fail("Buffer should notify overflow.");
124 } catch (BufferOverflowException e) {
125
126 }
127 }
128
129 public void testSetSize() throws BufferException {
130 DummySequenceBuffer buffer = new DummySequenceBuffer();
131 buffer.setProperty(SequenceBuffer.FIRST_PROPERTY_KEY, "0");
132 List messages = createMessages(buffer.getSize());
133 buffer.handle(messages.get(10));
134 try {
135 buffer.setProperty(AbstractBuffer.SIZE_PROPERTY_KEY, "10");
136 fail("Buffer should throw overflow exception.");
137 } catch (BufferOverflowException x) {
138
139 }
140 try {
141 Object[] polled = buffer.read();
142 fail("Buffer should notify overflow.");
143 } catch (BufferOverflowException e) {
144
145 }
146
147 buffer = new DummySequenceBuffer();
148 buffer.setProperty(SequenceBuffer.FIRST_PROPERTY_KEY, "0");
149 buffer.handle(messages.get(9));
150 buffer.setProperty(AbstractBuffer.SIZE_PROPERTY_KEY, "10");
151 Object[] polled = buffer.read();
152 }
153 }