From f0832ffc61cbad33ac716b6279ebf80939ef3ef3 Mon Sep 17 00:00:00 2001 From: "Ciro S. Costa" Date: Wed, 27 Jan 2016 12:11:22 -0300 Subject: [PATCH] Fixes event type when emitting binary_ack When submitting binary data in an Ack to the server the packet's type was not the expected (should be 6 - binary_ack - and not 3 - ack). This commit introduces tests as well a fix for the given problem. --- src/main/java/io/socket/client/Socket.java | 8 ++- .../java/io/socket/client/ConnectionTest.java | 58 +++++++++++++++++++ src/test/resources/server.js | 11 ++++ 3 files changed, 76 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/socket/client/Socket.java b/src/main/java/io/socket/client/Socket.java index c402f31..363e4cb 100644 --- a/src/main/java/io/socket/client/Socket.java +++ b/src/main/java/io/socket/client/Socket.java @@ -346,7 +346,13 @@ public class Socket extends Emitter { sent[0] = true; logger.fine(String.format("sending ack %s", args.length != 0 ? args : null)); - int type = HasBinary.hasBinary(args) ? Parser.BINARY_ACK : Parser.ACK; + JSONArray jsonArgs = new JSONArray(); + for (Object arg : args) { + jsonArgs.put(arg); + } + + int type = HasBinary.hasBinary(jsonArgs) + ? Parser.BINARY_ACK : Parser.ACK; Packet packet = new Packet(type, new JSONArray(Arrays.asList(args))); packet.id = id; self.packet(packet); diff --git a/src/test/java/io/socket/client/ConnectionTest.java b/src/test/java/io/socket/client/ConnectionTest.java index 034733a..33ffa4e 100644 --- a/src/test/java/io/socket/client/ConnectionTest.java +++ b/src/test/java/io/socket/client/ConnectionTest.java @@ -3,6 +3,7 @@ package io.socket.client; import io.socket.emitter.Emitter; import org.json.JSONException; import org.json.JSONObject; +import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -90,6 +91,7 @@ public class ConnectionTest extends Connection { @Test(timeout = TIMEOUT) public void receiveDateWithAck() throws URISyntaxException, InterruptedException { final BlockingQueue values = new LinkedBlockingQueue(); + socket = client(); socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() { @Override @@ -111,6 +113,61 @@ public class ConnectionTest extends Connection { socket.close(); } + @Test(timeout = TIMEOUT) + public void sendBinaryAck() throws URISyntaxException, InterruptedException { + final BlockingQueue values = new LinkedBlockingQueue(); + final byte[] buf = "huehue".getBytes(Charset.forName("UTF-8")); + + socket = client(); + socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() { + @Override + public void call(Object... objects) { + socket.emit("callAckBinary"); + socket.on("ack", new Emitter.Listener() { + @Override + public void call(Object... args) { + Ack fn = (Ack) args[0]; + fn.call(buf); + } + }); + + socket.on("ackBack", new Emitter.Listener() { + @Override + public void call(Object... args) { + byte[] data = (byte[])args[0]; + values.offer(data); + } + }); + } + }); + socket.connect(); + Assert.assertArrayEquals(buf, (byte[])values.take()); + socket.close(); + } + + @Test(timeout = TIMEOUT) + public void receiveBinaryDataWithAck() throws URISyntaxException, InterruptedException { + final BlockingQueue values = new LinkedBlockingQueue(); + final byte[] buf = "huehue".getBytes(Charset.forName("UTF-8")); + + socket = client(); + socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() { + @Override + public void call(Object... objects) { + socket.emit("getAckBinary", "", new Ack() { + + @Override + public void call(Object... args) { + values.offer(args[0]); + } + }); + } + }); + socket.connect(); + Assert.assertArrayEquals(buf, (byte[])values.take()); + socket.close(); + } + @Test(timeout = TIMEOUT) public void workWithFalse() throws URISyntaxException, InterruptedException { final BlockingQueue values = new LinkedBlockingQueue(); @@ -731,6 +788,7 @@ public class ConnectionTest extends Connection { socket.close(); } + @Test(timeout = TIMEOUT) public void sendAndGetBinaryData() throws URISyntaxException, InterruptedException { final BlockingQueue values = new LinkedBlockingQueue(); diff --git a/src/test/resources/server.js b/src/test/resources/server.js index 941e426..6e8c14a 100644 --- a/src/test/resources/server.js +++ b/src/test/resources/server.js @@ -57,6 +57,17 @@ io.of(nsp).on('connection', function(socket) { }); }); + socket.on('callAckBinary', function() { + socket.emit('ack', function(buf) { + socket.emit('ackBack', buf); + }); + }); + + socket.on('getAckBinary', function(data, callback) { + var buf = new Buffer('huehue', 'utf8'); + callback(buf); + }); + socket.on('getAckDate', function(data, callback) { callback(new Date()); });