/** * 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.scalecube.socketio.packets.PacketsFrame; import io.netty.buffer.Unpooled; import io.netty.util.CharsetUtil; import org.junit.Test; import java.io.IOException; import java.util.List; /** * * @author Anton Kharenko * */ public class PacketFramerTest { @Test public void testDecodingMessagesFrame() throws IOException { // Given String messagesFrame = "\ufffd3\ufffd0::" + "\ufffd3\ufffd0::" + "\ufffd7\ufffd3:::53d" + "\ufffd3\ufffd2::"; // When List<Packet> packets = PacketFramer.decodePacketsFrame(Unpooled.copiedBuffer(messagesFrame.getBytes(CharsetUtil.UTF_8))); // Then assertEquals(4, packets.size()); assertEquals(PacketType.DISCONNECT, packets.get(0).getType()); assertEquals(PacketType.DISCONNECT, packets.get(1).getType()); assertEquals(PacketType.MESSAGE, packets.get(2).getType()); assertEquals("53d", packets.get(2).getData().toString(CharsetUtil.UTF_8)); assertEquals(PacketType.HEARTBEAT, packets.get(3).getType()); } @Test public void testDecodingMessagesFrameWithUtf8Symbols() throws IOException { // Given String messagesFrame = "\ufffd3\ufffd0::" + "\ufffd36\ufffd3:::{\"ID\":100, \"greetings\":\"Привет\"}" + "\ufffd7\ufffd3:::53d"; // When List<Packet> packets = PacketFramer.decodePacketsFrame(Unpooled.copiedBuffer(messagesFrame.getBytes(CharsetUtil.UTF_8))); // Then assertEquals(3, packets.size()); assertEquals(PacketType.DISCONNECT, packets.get(0).getType()); assertEquals(PacketType.MESSAGE, packets.get(1).getType()); assertEquals("{\"ID\":100, \"greetings\":\"Привет\"}", packets.get(1).getData().toString(CharsetUtil.UTF_8)); assertEquals(PacketType.MESSAGE, packets.get(2).getType()); assertEquals("53d", packets.get(2).getData().toString(CharsetUtil.UTF_8)); } @Test public void testEncodePacketsFrame() throws IOException { // Given Packet packet1 = new Packet(PacketType.MESSAGE); packet1.setData(Unpooled.copiedBuffer("5", CharsetUtil.UTF_8)); Packet packet2 = new Packet(PacketType.MESSAGE); packet2.setData(Unpooled.copiedBuffer("53d", CharsetUtil.UTF_8)); PacketsFrame packetsFrame = new PacketsFrame(); packetsFrame.getPackets().add(packet1); packetsFrame.getPackets().add(packet2); // When String result = PacketFramer.encodePacketsFrame(packetsFrame).toString(CharsetUtil.UTF_8); // Then assertEquals("\ufffd5\ufffd3:::5\ufffd7\ufffd3:::53d", result); } @Test public void testEncodePacketsFrameWithOnePacket() throws IOException { // Given Packet packet1 = new Packet(PacketType.MESSAGE); packet1.setData(Unpooled.copiedBuffer("5", CharsetUtil.UTF_8)); PacketsFrame packetsFrame = new PacketsFrame(); packetsFrame.getPackets().add(packet1); // When String result = PacketFramer.encodePacketsFrame(packetsFrame).toString(CharsetUtil.UTF_8); // Then assertEquals("3:::5", result); } @Test public void testEncodePacketsFrameWithUtf8Symbols() throws IOException { // Given Packet packet1 = new Packet(PacketType.MESSAGE); packet1.setData(Unpooled.copiedBuffer("5", CharsetUtil.UTF_8)); Packet packet2 = new Packet(PacketType.MESSAGE); packet2.setData(Unpooled.copiedBuffer("{\"ID\":100, \"greetings\":\"Привет\"}", CharsetUtil.UTF_8)); Packet packet3 = new Packet(PacketType.MESSAGE); packet3.setData(Unpooled.copiedBuffer("53d", CharsetUtil.UTF_8)); PacketsFrame packetsFrame = new PacketsFrame(); packetsFrame.getPackets().add(packet1); packetsFrame.getPackets().add(packet2); packetsFrame.getPackets().add(packet3); // When String result = PacketFramer.encodePacketsFrame(packetsFrame).toString(CharsetUtil.UTF_8); // Then assertEquals("\ufffd5\ufffd3:::5\ufffd36\ufffd3:::{\"ID\":100, \"greetings\":\"Привет\"}\ufffd7\ufffd3:::53d", result); } }