/** * Copyright 2012 Ronen Hamias, Anton Kharenko * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ package io.scalecube.socketio.serialization; import static org.junit.Assert.assertEquals; import io.scalecube.socketio.packets.Packet; import io.scalecube.socketio.packets.PacketType; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.util.CharsetUtil; import org.junit.Test; import java.io.IOException; /** * * @author Anton Kharenko * */ public class PacketDecoderTest { @Test public void testDecodeDisconnectPacket() throws IOException { // Given String message = "0::/woot"; ByteBuf byteMessage = Unpooled.copiedBuffer(message, CharsetUtil.UTF_8); // When Packet packet = PacketDecoder.decodePacket(byteMessage); // Then assertEquals(PacketType.DISCONNECT, packet.getType()); // Assert.assertEquals("/woot", packet.getEndpoint()); } @Test public void testDecodeConnectPacketWithEndpoint() throws IOException { // Given String message = "1::/tobi"; ByteBuf byteMessage = Unpooled.copiedBuffer(message, CharsetUtil.UTF_8); // When Packet packet = PacketDecoder.decodePacket(byteMessage); // Then assertEquals(PacketType.CONNECT, packet.getType()); // Assert.assertEquals("/tobi", packet.getEndpoint()); } @Test public void testDecodeConnectPacketWithQuery() throws IOException { // Given String message = "1::/test:?test=1"; ByteBuf byteMessage = Unpooled.copiedBuffer(message, CharsetUtil.UTF_8); // When Packet packet = PacketDecoder.decodePacket(byteMessage); // Then assertEquals(PacketType.CONNECT, packet.getType()); // Assert.assertEquals("/test", packet.getEndpoint()); // Assert.assertEquals("?test=1", packet.getData().toString(CharsetUtil.UTF_8)); } @Test public void testDecodeHeartbeatPacket() throws IOException { // Given String message = "2:::"; ByteBuf byteMessage = Unpooled.copiedBuffer(message, CharsetUtil.UTF_8); // When Packet packet = PacketDecoder.decodePacket(byteMessage); // Then assertEquals(PacketType.HEARTBEAT, packet.getType()); } @Test public void testDecodeMessagePacket() throws IOException { // Given String message = "3:::woot"; ByteBuf byteMessage = Unpooled.copiedBuffer(message, CharsetUtil.UTF_8); // When Packet packet = PacketDecoder.decodePacket(byteMessage); // Then assertEquals(PacketType.MESSAGE, packet.getType()); assertEquals("woot", packet.getData().toString(CharsetUtil.UTF_8)); } @Test public void testDecodeMessagePacketWithIdAndEndpoint() throws IOException { // Given String message = "3:5:/tobi"; ByteBuf byteMessage = Unpooled.copiedBuffer(message, CharsetUtil.UTF_8); // When Packet packet = PacketDecoder.decodePacket(byteMessage); // Then assertEquals(PacketType.MESSAGE, packet.getType()); // Assert.assertEquals("5", packet.getId()); // Assert.assertEquals("/tobi", packet.getEndpoint()); } @Test public void testDecodeJsonPacket() throws IOException { // Given String message = "4:::\"2\""; ByteBuf byteMessage = Unpooled.copiedBuffer(message, CharsetUtil.UTF_8); // When Packet packet = PacketDecoder.decodePacket(byteMessage); // Then assertEquals(PacketType.JSON, packet.getType()); assertEquals("\"2\"", packet.getData().toString(CharsetUtil.UTF_8)); } @Test public void testDecodeJsonPacketWithMessageIdAndAckData() throws IOException { // Given String message = "4:1+::{\"a\":\"b\"}"; ByteBuf byteMessage = Unpooled.copiedBuffer(message, CharsetUtil.UTF_8); // When Packet packet = PacketDecoder.decodePacket(byteMessage); // Then assertEquals(PacketType.JSON, packet.getType()); // Assert.assertEquals("1+", packet.getId()); assertEquals("{\"a\":\"b\"}", packet.getData().toString(CharsetUtil.UTF_8)); } @Test public void testDecodeJsonPacketWithUTF8Symbols() throws IOException { // Given String message = "4:::\"Привет\""; ByteBuf byteMessage = Unpooled.copiedBuffer(message, CharsetUtil.UTF_8); // When Packet packet = PacketDecoder.decodePacket(byteMessage); // Then assertEquals(PacketType.JSON, packet.getType()); assertEquals("\"Привет\"", packet.getData().toString(CharsetUtil.UTF_8)); } @Test public void testDecodeEventPacket() throws IOException { // Given String message = "5:::{\"name\":\"woot\"}"; ByteBuf byteMessage = Unpooled.copiedBuffer(message, CharsetUtil.UTF_8); // When Packet packet = PacketDecoder.decodePacket(byteMessage); // Then assertEquals(PacketType.EVENT, packet.getType()); // Assert.assertEquals("{\"name\":\"woot\"}", packet.getData().toString(CharsetUtil.UTF_8)); } @Test public void testDecodeEventPacketWithMessageIdAndAck() throws IOException { // Given String message = "5:1+::{\"name\":\"tobi\"}"; ByteBuf byteMessage = Unpooled.copiedBuffer(message, CharsetUtil.UTF_8); // When Packet packet = PacketDecoder.decodePacket(byteMessage); // Then assertEquals(PacketType.EVENT, packet.getType()); // Assert.assertEquals("1+", packet.getId()); // Assert.assertEquals("{\"name\":\"tobi\"}", packet.getData().toString(CharsetUtil.UTF_8)); } @Test public void testDecodeEventPacketWithData() throws IOException { // Given String message = "5:::{\"name\":\"edwald\",\"args\":[{\"a\": \"b\"},2,\"3\"]}"; ByteBuf byteMessage = Unpooled.copiedBuffer(message, CharsetUtil.UTF_8); // When Packet packet = PacketDecoder.decodePacket(byteMessage); // Then assertEquals(PacketType.EVENT, packet.getType()); // Assert.assertEquals("{\"name\":\"edwald\",\"args\":[{\"a\": \"b\"},2,\"3\"]}", // packet.getData().toString(CharsetUtil.UTF_8)); } @Test public void testDecodeAckPacket() throws IOException { // Given String message = "6:::140"; ByteBuf byteMessage = Unpooled.copiedBuffer(message, CharsetUtil.UTF_8); // When Packet packet = PacketDecoder.decodePacket(byteMessage); // Then assertEquals(PacketType.ACK, packet.getType()); // Assert.assertEquals("140", packet.getData().toString(CharsetUtil.UTF_8)); } @Test public void testDecodeAckPacketWithArgs() throws IOException { // Given String message = "6:::12+[\"woot\",\"wa\"]"; ByteBuf byteMessage = Unpooled.copiedBuffer(message, CharsetUtil.UTF_8); // When Packet packet = PacketDecoder.decodePacket(byteMessage); // Then assertEquals(PacketType.ACK, packet.getType()); // Assert.assertEquals("12+[\"woot\",\"wa\"]", packet.getData().toString(CharsetUtil.UTF_8)); } @Test public void testDecodeErrorPacket() throws IOException { // Given String message = "7:::"; ByteBuf byteMessage = Unpooled.copiedBuffer(message, CharsetUtil.UTF_8); // When Packet packet = PacketDecoder.decodePacket(byteMessage); // Then assertEquals(PacketType.ERROR, packet.getType()); } @Test public void testDecodeErrorPacketWithReason() throws IOException { // Given String message = "7:::0"; ByteBuf byteMessage = Unpooled.copiedBuffer(message, CharsetUtil.UTF_8); // When Packet packet = PacketDecoder.decodePacket(byteMessage); // Then assertEquals(PacketType.ERROR, packet.getType()); // Assert.assertEquals("0", packet.getData().toString(CharsetUtil.UTF_8)); } @Test public void testDecodeErrorPacketWithReasonAndAdvice() throws IOException { // Given String message = "7:::2+0"; ByteBuf byteMessage = Unpooled.copiedBuffer(message, CharsetUtil.UTF_8); // When Packet packet = PacketDecoder.decodePacket(byteMessage); // Then assertEquals(PacketType.ERROR, packet.getType()); // Assert.assertEquals("2+0", packet.getData().toString(CharsetUtil.UTF_8)); } @Test public void testDecodeErrorPacketWithEndpoint() throws IOException { // Given String message = "7::/woot"; ByteBuf byteMessage = Unpooled.copiedBuffer(message, CharsetUtil.UTF_8); // When Packet packet = PacketDecoder.decodePacket(byteMessage); // Then assertEquals(PacketType.ERROR, packet.getType()); // Assert.assertEquals("/woot", packet.getEndpoint()); } @Test public void testDecodeNoopPacket() throws IOException { // Given String message = "8::"; ByteBuf byteMessage = Unpooled.copiedBuffer(message, CharsetUtil.UTF_8); // When Packet packet = PacketDecoder.decodePacket(byteMessage); // Then assertEquals(PacketType.NOOP, packet.getType()); } @Test public void testDecodeNewline() throws IOException { String message = "3:::\n"; ByteBuf byteMessage = Unpooled.copiedBuffer(message, CharsetUtil.UTF_8); Packet packet = PacketDecoder.decodePacket(byteMessage); assertEquals(PacketType.MESSAGE, packet.getType()); assertEquals("\n", packet.getData().toString(CharsetUtil.UTF_8)); } }