Browse Source

DecoderConnectionPacketTest, DecoderMessagePacketTest, PayloadTest added

master
Nikita 13 years ago
parent
commit
81bc291d35
  1. 10
      src/main/java/com/corundumstudio/socketio/parser/Decoder.java
  2. 6
      src/main/java/com/corundumstudio/socketio/parser/Packet.java
  3. 35
      src/test/java/com/corundumstudio/socketio/parser/DecoderConnectionPacketTest.java
  4. 31
      src/test/java/com/corundumstudio/socketio/parser/DecoderMessagePacketTest.java
  5. 41
      src/test/java/com/corundumstudio/socketio/parser/PayloadTest.java

10
src/main/java/com/corundumstudio/socketio/parser/Decoder.java

@ -12,6 +12,7 @@ package com.corundumstudio.socketio.parser;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -30,10 +31,13 @@ public class Decoder {
}
public List<Packet> decodePayload(String data) throws IOException {
if (data.isEmpty()) {
return Collections.emptyList();
}
List<Packet> result = new ArrayList<Packet>();
if (data.charAt(0) == Packet.DELIMITER) {
// TODO optimize
StringBuilder length = new StringBuilder();
// TODO use ForkJoin
StringBuilder length = new StringBuilder(4);
for (int i = 1; i < data.length(); i++) {
if (data.charAt(i) == Packet.DELIMITER) {
Integer len = Integer.valueOf(length.toString());
@ -72,7 +76,7 @@ public class Decoder {
if (ackData != null) {
packet.setAck("data");
} else {
packet.setAck(""); // TODO ack = true ?
packet.setAck(true);
}
}

6
src/main/java/com/corundumstudio/socketio/parser/Packet.java

@ -21,7 +21,7 @@ public class Packet {
private final PacketType type;
private List<Object> args = Collections.emptyList();
private String qs;
private String ack;
private Object ack;
private String ackId;
private String name;
private String id = "";
@ -61,10 +61,10 @@ public class Packet {
this.id = id;
}
public void setAck(String ack) {
public void setAck(Object ack) {
this.ack = ack;
}
public String getAck() {
public Object getAck() {
return ack;
}

35
src/test/java/com/corundumstudio/socketio/parser/DecoderConnectionPacketTest.java

@ -0,0 +1,35 @@
package com.corundumstudio.socketio.parser;
import java.io.IOException;
import org.codehaus.jackson.map.ObjectMapper;
import org.junit.Assert;
import org.junit.Test;
public class DecoderConnectionPacketTest {
private final Decoder decoder = new Decoder(new ObjectMapper());
@Test
public void testDecodeHeartbeat() throws IOException {
Packet packet = decoder.decodePacket("2:::");
Assert.assertEquals(PacketType.HEARTBEAT, packet.getType());
}
@Test
public void testDecode() throws IOException {
Packet packet = decoder.decodePacket("1::/tobi");
Assert.assertEquals(PacketType.CONNECT, packet.getType());
Assert.assertEquals("/tobi", packet.getEndpoint());
}
@Test
public void testDecodeWithQueryString() throws IOException {
Packet packet = decoder.decodePacket("1::/test:?test=1");
Assert.assertEquals(PacketType.CONNECT, packet.getType());
Assert.assertEquals("/test", packet.getEndpoint());
Assert.assertEquals("?test=1", packet.getQs());
}
}

31
src/test/java/com/corundumstudio/socketio/parser/DecoderMessagePacketTest.java

@ -0,0 +1,31 @@
package com.corundumstudio.socketio.parser;
import java.io.IOException;
import org.codehaus.jackson.map.ObjectMapper;
import org.junit.Assert;
import org.junit.Test;
public class DecoderMessagePacketTest {
private final Decoder decoder = new Decoder(new ObjectMapper());
@Test
public void testDecode() throws IOException {
Packet packet = decoder.decodePacket("3:::woot");
Assert.assertEquals(PacketType.MESSAGE, packet.getType());
Assert.assertEquals("woot", packet.getData());
}
@Test
public void testDecodeWithIdAndEndpoint() throws IOException {
Packet packet = decoder.decodePacket("3:5:/tobi");
Assert.assertEquals(PacketType.MESSAGE, packet.getType());
Assert.assertEquals("5", packet.getId());
Assert.assertEquals(true, packet.getAck());
Assert.assertEquals("/tobi", packet.getEndpoint());
}
}

41
src/test/java/com/corundumstudio/socketio/parser/PayloadTest.java

@ -0,0 +1,41 @@
package com.corundumstudio.socketio.parser;
import java.io.IOException;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.codehaus.jackson.map.ObjectMapper;
import org.junit.Assert;
import org.junit.Test;
public class PayloadTest {
private final Decoder decoder = new Decoder(new ObjectMapper());
//@Test
public void testPayloadDecodePerf() throws IOException {
long start = System.currentTimeMillis();
for (int i = 0; i < 50000; i++) {
decoder.decodePayload("\ufffd5\ufffd3:::5\ufffd7\ufffd3:::53d\ufffd3\ufffd0::\ufffd5\ufffd3:::5\ufffd7\ufffd3:::53d\ufffd3\ufffd0::\ufffd5\ufffd3:::5\ufffd7\ufffd3:::53d\ufffd3\ufffd0::\ufffd5\ufffd3:::5\ufffd7\ufffd3:::53d\ufffd3\ufffd0::\ufffd5\ufffd3:::5\ufffd7\ufffd3:::53d\ufffd3\ufffd0::");
}
long end = System.currentTimeMillis() - start;
System.out.println(end + "ms");
// 1143ms
}
@Test
public void testPayloadDecode() throws IOException {
List<Packet> payload = decoder.decodePayload("\ufffd5\ufffd3:::5\ufffd7\ufffd3:::53d\ufffd3\ufffd0::");
Assert.assertEquals(3, payload.size());
Packet msg1 = payload.get(0);
Assert.assertEquals(PacketType.MESSAGE, msg1.getType());
Assert.assertEquals("5", msg1.getData());
Packet msg2 = payload.get(1);
Assert.assertEquals(PacketType.MESSAGE, msg2.getType());
Assert.assertEquals("53d", msg2.getData());
Packet msg3 = payload.get(2);
Assert.assertEquals(PacketType.DISCONNECT, msg3.getType());
}
}
Loading…
Cancel
Save