Skip to content

Commit 2faa0d8

Browse files
committed
Add basic tests for fragment support.
Fix netty ByteMessage test extension class.
1 parent 632ba47 commit 2faa0d8

File tree

3 files changed

+129
-39
lines changed

3 files changed

+129
-39
lines changed

src/test/java/com/ning/http/client/websocket/ByteMessageTest.java

Lines changed: 83 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,10 @@
1414

1515
import com.ning.http.client.AsyncHttpClient;
1616
import com.ning.http.client.AsyncHttpClientConfig;
17-
import com.ning.http.client.providers.netty.NettyWebSocket;
1817
import org.testng.annotations.Test;
1918

2019
import javax.servlet.http.HttpServletRequest;
2120
import java.io.IOException;
22-
import java.util.Arrays;
2321
import java.util.concurrent.CountDownLatch;
2422
import java.util.concurrent.atomic.AtomicReference;
2523

@@ -34,6 +32,7 @@ private final class EchoByteWebSocket implements org.eclipse.jetty.websocket.Web
3432
@Override
3533
public void onOpen(Connection connection) {
3634
this.connection = connection;
35+
connection.setMaxBinaryMessageSize(1000);
3736
}
3837

3938
@Override
@@ -156,48 +155,95 @@ public void onFragment(byte[] fragment, boolean last) {
156155

157156
@Test
158157
public void echoOnOpenMessagesTest() throws Throwable {
159-
AsyncHttpClient c = getAsyncHttpClient(new AsyncHttpClientConfig.Builder().build());
160-
final CountDownLatch latch = new CountDownLatch(2);
161-
final AtomicReference<byte[]> text = new AtomicReference<byte[]>(null);
158+
AsyncHttpClient c = getAsyncHttpClient(new AsyncHttpClientConfig.Builder().build());
159+
final CountDownLatch latch = new CountDownLatch(2);
160+
final AtomicReference<byte[]> text = new AtomicReference<byte[]>(null);
162161

163-
WebSocket websocket = c.prepareGet(getTargetUrl())
164-
.execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(new WebSocketByteListener() {
162+
WebSocket websocket = c.prepareGet(getTargetUrl())
163+
.execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(new WebSocketByteListener() {
165164

166-
@Override
167-
public void onOpen(WebSocket websocket) {
168-
websocket.sendMessage("ECHO".getBytes()).sendMessage("ECHO".getBytes());
169-
}
165+
@Override
166+
public void onOpen(WebSocket websocket) {
167+
websocket.sendMessage("ECHO".getBytes()).sendMessage("ECHO".getBytes());
168+
}
170169

171-
@Override
172-
public void onClose(WebSocket websocket) {
173-
latch.countDown();
174-
}
170+
@Override
171+
public void onClose(WebSocket websocket) {
172+
latch.countDown();
173+
}
175174

176-
@Override
177-
public void onError(Throwable t) {
178-
t.printStackTrace();
179-
latch.countDown();
180-
}
175+
@Override
176+
public void onError(Throwable t) {
177+
t.printStackTrace();
178+
latch.countDown();
179+
}
181180

182-
@Override
183-
public void onMessage(byte[] message) {
184-
if (text.get() == null) {
185-
text.set(message);
186-
} else {
187-
byte[] n = new byte[text.get().length + message.length];
188-
System.arraycopy(text.get(), 0, n, 0, text.get().length);
189-
System.arraycopy(message, 0, n, text.get().length, message.length);
190-
text.set(n);
181+
@Override
182+
public void onMessage(byte[] message) {
183+
if (text.get() == null) {
184+
text.set(message);
185+
} else {
186+
byte[] n = new byte[text.get().length + message.length];
187+
System.arraycopy(text.get(), 0, n, 0, text.get().length);
188+
System.arraycopy(message, 0, n, text.get().length, message.length);
189+
text.set(n);
190+
}
191+
latch.countDown();
191192
}
192-
latch.countDown();
193-
}
194193

195-
@Override
196-
public void onFragment(byte[] fragment, boolean last) {
197-
}
198-
}).build()).get();
194+
@Override
195+
public void onFragment(byte[] fragment, boolean last) {
196+
}
197+
}).build()).get();
199198

200-
latch.await();
201-
assertEquals(text.get(), "ECHOECHO".getBytes());
199+
latch.await();
200+
assertEquals(text.get(), "ECHOECHO".getBytes());
201+
}
202+
203+
@Test
204+
public void echoFragments() throws Exception {
205+
AsyncHttpClient c = getAsyncHttpClient(new AsyncHttpClientConfig.Builder().build());
206+
final CountDownLatch latch = new CountDownLatch(1);
207+
final AtomicReference<byte[]> text = new AtomicReference<byte[]>(null);
208+
209+
WebSocket websocket = c.prepareGet(getTargetUrl())
210+
.execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(new WebSocketByteListener() {
211+
212+
@Override
213+
public void onOpen(WebSocket websocket) {
214+
}
215+
216+
@Override
217+
public void onClose(WebSocket websocket) {
218+
latch.countDown();
219+
}
220+
221+
@Override
222+
public void onError(Throwable t) {
223+
t.printStackTrace();
224+
latch.countDown();
225+
}
226+
227+
@Override
228+
public void onMessage(byte[] message) {
229+
if (text.get() == null) {
230+
text.set(message);
231+
} else {
232+
byte[] n = new byte[text.get().length + message.length];
233+
System.arraycopy(text.get(), 0, n, 0, text.get().length);
234+
System.arraycopy(message, 0, n, text.get().length, message.length);
235+
text.set(n);
236+
}
237+
latch.countDown();
238+
}
239+
240+
@Override
241+
public void onFragment(byte[] fragment, boolean last) {
242+
}
243+
}).build()).get();
244+
websocket.stream("ECHO".getBytes(), false);
245+
websocket.stream("ECHO".getBytes(), true);
246+
latch.await();
247+
assertEquals(text.get(), "ECHOECHO".getBytes());
202248
}
203249
}

src/test/java/com/ning/http/client/websocket/TextMessageTest.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ private final class EchoTextWebSocket implements org.eclipse.jetty.websocket.Web
3232
@Override
3333
public void onOpen(Connection connection) {
3434
this.connection = connection;
35+
connection.setMaxTextMessageSize(1000);
3536
}
3637

3738
@Override
@@ -310,4 +311,47 @@ public void onError(Throwable t) {
310311
latch.await();
311312
assertEquals(text.get(), "ECHOECHO");
312313
}
314+
315+
@Test(timeOut = 60000)
316+
public void echoFragments() throws Throwable {
317+
AsyncHttpClient c = getAsyncHttpClient(new AsyncHttpClientConfig.Builder().build());
318+
final CountDownLatch latch = new CountDownLatch(1);
319+
final AtomicReference<String> text = new AtomicReference<String>("");
320+
321+
WebSocket websocket = c.prepareGet(getTargetUrl())
322+
.execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(new WebSocketTextListener() {
323+
324+
@Override
325+
public void onMessage(String message) {
326+
text.set(message);
327+
latch.countDown();
328+
}
329+
330+
@Override
331+
public void onFragment(String fragment, boolean last) {
332+
}
333+
334+
@Override
335+
public void onOpen(com.ning.http.client.websocket.WebSocket websocket) {
336+
}
337+
338+
@Override
339+
public void onClose(com.ning.http.client.websocket.WebSocket websocket) {
340+
latch.countDown();
341+
}
342+
343+
@Override
344+
public void onError(Throwable t) {
345+
t.printStackTrace();
346+
latch.countDown();
347+
}
348+
}).build()).get();
349+
350+
websocket.streamText("ECHO", false);
351+
websocket.streamText("ECHO", true);
352+
353+
latch.await();
354+
assertEquals(text.get(), "ECHOECHO");
355+
}
356+
313357
}

src/test/java/com/ning/http/client/websocket/netty/NettyByteMessageTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
import com.ning.http.client.AsyncHttpClient;
1616
import com.ning.http.client.AsyncHttpClientConfig;
1717
import com.ning.http.client.async.ProviderUtil;
18-
import com.ning.http.client.websocket.TextMessageTest;
18+
import com.ning.http.client.websocket.ByteMessageTest;
1919

20-
public class NettyByteMessageTest extends TextMessageTest {
20+
public class NettyByteMessageTest extends ByteMessageTest {
2121
@Override
2222
public AsyncHttpClient getAsyncHttpClient(AsyncHttpClientConfig config) {
2323
return ProviderUtil.nettyProvider(config);

0 commit comments

Comments
 (0)