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.assertNotNull;
26 import static org.junit.Assert.assertNull;
27 import static org.junit.Assert.fail;
28
29 import java.io.InputStream;
30 import java.io.ObjectOutputStream;
31 import java.io.OutputStream;
32 import java.net.Socket;
33
34 import net.grinder.communication.Connector.ConnectDetails;
35
36 import org.junit.Test;
37
38
39
40
41
42
43
44 public class TestClientReceiver {
45
46 @Test public void testReceive() throws Exception {
47
48 final SocketAcceptorThread socketAcceptor = SocketAcceptorThread.create();
49
50 final Connector connector =
51 new Connector(socketAcceptor.getHostName(), socketAcceptor.getPort(),
52 ConnectionType.AGENT);
53
54 final Address address = new StubAddress();
55
56 final Receiver clientReceiver = ClientReceiver.connect(connector, address);
57
58 socketAcceptor.join();
59
60 final Socket acceptedSocket = socketAcceptor.getAcceptedSocket();
61
62 assertConnection(
63 acceptedSocket.getInputStream(), ConnectionType.AGENT, address);
64
65 final OutputStream socketOutput = acceptedSocket.getOutputStream();
66
67 final SimpleMessage message1 = new SimpleMessage();
68
69 final ObjectOutputStream objectStream1 =
70 new ObjectOutputStream(socketOutput);
71 objectStream1.writeObject(message1);
72 objectStream1.flush();
73
74 final SimpleMessage message2 = new SimpleMessage();
75
76 final ObjectOutputStream objectStream2 =
77 new ObjectOutputStream(socketOutput);
78 objectStream2.writeObject(message2);
79 objectStream2.flush();
80
81 final Message receivedMessage1 = clientReceiver.waitForMessage();
82 final Message receivedMessage2 = clientReceiver.waitForMessage();
83
84 assertEquals(message1, receivedMessage1);
85 assertEquals(message2, receivedMessage2);
86
87 socketAcceptor.close();
88
89 try {
90 ClientReceiver.connect(connector, address);
91 fail("Expected CommunicationException");
92 }
93 catch (CommunicationException e) {
94 }
95 }
96
97 private void assertConnection(InputStream in,
98 ConnectionType type,
99 Address address) throws Exception {
100 final ConnectDetails details = Connector.read(in);
101 assertEquals(type, details.getConnectionType());
102 assertEquals(address, details.getAddress());
103 }
104
105 @Test public void testShutdown() throws Exception {
106
107 final SocketAcceptorThread socketAcceptor = SocketAcceptorThread.create();
108
109 final Connector connector =
110 new Connector(socketAcceptor.getHostName(), socketAcceptor.getPort(),
111 ConnectionType.AGENT);
112
113 final Address address = new StubAddress();
114
115 final Receiver clientReceiver = ClientReceiver.connect(connector, address);
116
117 socketAcceptor.join();
118
119 final Socket acceptedSocket = socketAcceptor.getAcceptedSocket();
120 assertConnection(
121 acceptedSocket.getInputStream(), ConnectionType.AGENT, address);
122
123 final OutputStream socketOutput = acceptedSocket.getOutputStream();
124
125 final SimpleMessage message1 = new SimpleMessage();
126
127 final ObjectOutputStream objectStream1 =
128 new ObjectOutputStream(socketOutput);
129 objectStream1.writeObject(message1);
130 objectStream1.flush();
131
132 final Message receivedMessage = clientReceiver.waitForMessage();
133 assertNotNull(receivedMessage);
134
135 clientReceiver.shutdown();
136
137 assertNull(clientReceiver.waitForMessage());
138
139 socketAcceptor.close();
140 }
141
142 @Test public void testCloseCommunicationMessage() throws Exception {
143
144 final SocketAcceptorThread socketAcceptor = SocketAcceptorThread.create();
145
146 final Connector connector =
147 new Connector(socketAcceptor.getHostName(), socketAcceptor.getPort(),
148 ConnectionType.AGENT);
149
150 final Address address = new StubAddress();
151
152 final Receiver clientReceiver = ClientReceiver.connect(connector, address);
153
154 socketAcceptor.join();
155
156 final Socket acceptedSocket = socketAcceptor.getAcceptedSocket();
157
158 assertConnection(
159 acceptedSocket.getInputStream(), ConnectionType.AGENT, address);
160
161 final OutputStream socketOutput = acceptedSocket.getOutputStream();
162
163 final SimpleMessage message1 = new SimpleMessage();
164
165 final ObjectOutputStream objectStream1 =
166 new ObjectOutputStream(socketOutput);
167 objectStream1.writeObject(message1);
168 objectStream1.flush();
169
170 final Message receivedMessage = clientReceiver.waitForMessage();
171 assertNotNull(receivedMessage);
172
173 final Message closeCommunicationMessage = new CloseCommunicationMessage();
174
175 final ObjectOutputStream objectStream2 =
176 new ObjectOutputStream(socketOutput);
177 objectStream2.writeObject(closeCommunicationMessage);
178 objectStream2.flush();
179
180 assertNull(clientReceiver.waitForMessage());
181
182 socketAcceptor.close();
183 }
184 }
185