View Javadoc

1   /*
2    * Copyright (c) 2005, The K-Wf Grid Consortium
3    * Fraunhofer Institute for Computer Architecture and Software Technology
4    * See http://www.kwfgrid.eu and http://www.first.fraunhofer.de for more details.
5    */
6   package net.kwfgrid.gwes.uiproxy;
7   
8   import junit.framework.TestCase;
9   
10  import java.util.*;
11  
12  /**
13     Tests for the SequenceBuffer.
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 	    // fine
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 	    // fine
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 	    // fine
139 	}
140 	try {
141 	    Object[] polled = buffer.read();
142 	    fail("Buffer should notify overflow.");
143 	} catch (BufferOverflowException e) {
144 	    // fine
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 }