1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package net.grinder.communication;
23
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertSame;
26 import static org.junit.Assert.assertTrue;
27 import static org.junit.Assert.fail;
28
29 import java.util.ArrayList;
30 import java.util.List;
31
32 import org.junit.Test;
33
34
35
36
37
38
39
40 public class TestQueuedSenderDecorator {
41
42 private final static class StubSender implements Sender {
43
44 private List<Message> m_messagesReceived = new ArrayList<Message>();
45 private boolean m_shutdown;
46
47 public void send(Message message) throws CommunicationException {
48 m_messagesReceived.add(message);
49 }
50
51 public void shutdown() {
52 m_shutdown = true;
53 }
54
55 public Message[] getMessagesReceived() {
56 try {
57 return m_messagesReceived.toArray(new Message[0]);
58 }
59 finally {
60 m_messagesReceived.clear();
61 }
62 }
63
64 public boolean getIsShutdown() {
65 return m_shutdown;
66 }
67 }
68
69 @Test public void testConstructor() throws Exception {
70 final StubSender sender = new StubSender();
71
72 new QueuedSenderDecorator(sender);
73 }
74
75 @Test public void testSend() throws Exception {
76 final StubSender sender = new StubSender();
77
78 final QueuedSender queuedSender = new QueuedSenderDecorator(sender);
79
80 final Message message1 = new SimpleMessage();
81 final Message message2 = new SimpleMessage();
82
83 queuedSender.send(message1);
84 queuedSender.send(message2);
85 queuedSender.flush();
86
87 final Message[] messagesReceived = sender.getMessagesReceived();
88
89 assertEquals(2, messagesReceived.length);
90 assertSame(message1, messagesReceived[0]);
91 assertSame(message2, messagesReceived[1]);
92 }
93
94 @Test public void testQueueAndFlush() throws Exception {
95 final StubSender sender = new StubSender();
96
97 final QueuedSender queuedSender = new QueuedSenderDecorator(sender);
98
99 final Message message1 = new SimpleMessage();
100 final Message message2 = new SimpleMessage();
101 final Message message3 = new SimpleMessage();
102 final Message message4 = new SimpleMessage();
103
104 queuedSender.send(message1);
105
106 assertEquals(0, sender.getMessagesReceived().length);
107
108 queuedSender.flush();
109
110 final Message[] messagesReceived = sender.getMessagesReceived();
111
112 assertEquals(1, messagesReceived.length);
113 assertSame(message1, messagesReceived[0]);
114
115 queuedSender.send(message1);
116 queuedSender.send(message2);
117 queuedSender.send(message3);
118 queuedSender.flush();
119 queuedSender.send(message4);
120
121 final Message[] messagesReceived2 = sender.getMessagesReceived();
122
123 assertEquals(3, messagesReceived2.length);
124 assertSame(message1, messagesReceived2[0]);
125 assertSame(message2, messagesReceived2[1]);
126 assertSame(message3, messagesReceived2[2]);
127
128 queuedSender.flush();
129
130 final Message[] messagesReceived3 = sender.getMessagesReceived();
131
132 assertEquals(1, messagesReceived3.length);
133 assertSame(message4, messagesReceived3[0]);
134 }
135
136 @Test public void testShutdown() throws Exception {
137 final StubSender sender = new StubSender();
138
139 final QueuedSender queuedSender = new QueuedSenderDecorator(sender);
140
141 assertTrue(!sender.getIsShutdown());
142
143 queuedSender.shutdown();
144
145 assertTrue(sender.getIsShutdown());
146
147 try {
148 queuedSender.send(new SimpleMessage());
149 fail("Expected CommunicationException");
150 }
151 catch (CommunicationException e) {
152 }
153
154 try {
155 queuedSender.flush();
156 fail("Expected CommunicationException");
157 }
158 catch (CommunicationException e) {
159 }
160 }
161 }