package ch.ethz.syslab.telesto.test;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.nio.ByteBuffer;
import java.sql.Timestamp;
import org.junit.Test;
import ch.ethz.syslab.telesto.common.model.Message;
import ch.ethz.syslab.telesto.common.model.Queue;
import ch.ethz.syslab.telesto.common.protocol.ComplexTestPacket;
import ch.ethz.syslab.telesto.common.protocol.MessageTestPacket;
import ch.ethz.syslab.telesto.common.protocol.Packet;
import ch.ethz.syslab.telesto.common.protocol.PingPacket;
import ch.ethz.syslab.telesto.common.protocol.QueueTestPacket;
import ch.ethz.syslab.telesto.common.protocol.Packet.UnknownMethodException;
public class ProtocolTest {
@Test
public void emitPingPacket() {
ByteBuffer buffer = ByteBuffer.allocate(1024);
new PingPacket(0).emit(buffer);
buffer.flip();
assertEquals(5, buffer.getShort());
assertEquals(1, buffer.get());
assertEquals(0, buffer.getInt());
}
@Test
public void parsePingPacket() throws UnknownMethodException {
ByteBuffer buffer = ByteBuffer.allocate(1024);
buffer.put((byte) 1);
buffer.putInt(0);
buffer.flip();
Packet packet = Packet.create(buffer);
assertTrue(packet instanceof PingPacket);
assertEquals(0, packet.packetId);
}
@Test
public void emitComplexPacket() {
ByteBuffer buffer = ByteBuffer.allocate(1024);
new ComplexTestPacket(1, (byte) 2, true, (short) 3, 4, 5, 6, 7, "string").emit(buffer);
buffer.flip();
assertEquals(41, buffer.getShort());
assertEquals(0x71, buffer.get());
assertEquals(1, buffer.getInt());
assertEquals(2, buffer.get());
assertEquals(1, buffer.get());
assertEquals(3, buffer.getShort());
assertEquals(4, buffer.getInt());
assertEquals(5, buffer.getLong());
assertEquals(6, buffer.getFloat(), 0);
assertEquals(7, buffer.getDouble(), 0);
assertEquals(6, buffer.getShort());
byte[] stringBytes = new byte[6];
buffer.get(stringBytes);
assertArrayEquals("string".getBytes(Packet.CHARSET), stringBytes);
}
@Test
public void messagePacket() throws UnknownMethodException {
ByteBuffer buffer = ByteBuffer.allocate(1024);
Message message = new Message(1, 2, 3, 4, 5, (byte) 6, new Timestamp(7), "8");
new MessageTestPacket(0, message).emit(buffer);
buffer.flip();
buffer.getShort();
MessageTestPacket packet = (MessageTestPacket) Packet.create(buffer);
assertEquals(0, packet.packetId);
assertEquals(message, packet.message);
assertEquals(message.queueId, packet.message.queueId);
assertEquals(message.senderId, packet.message.senderId);
assertEquals(message.receiverId, packet.message.receiverId);
assertEquals(message.priority, packet.message.priority);
assertEquals(message.timeOfArrival, packet.message.timeOfArrival);
assertEquals(message.message, packet.message.message);
}
@Test
public void queuePacket() throws UnknownMethodException {
ByteBuffer buffer = ByteBuffer.allocate(1024);
Queue queue = new Queue(1, "Hello Queue");
new QueueTestPacket(0, queue).emit(buffer);
buffer.flip();
buffer.getShort();
QueueTestPacket packet = (QueueTestPacket) Packet.create(buffer);
assertEquals(0, packet.packetId);
assertEquals(queue, packet.queue);
assertEquals(queue.name, packet.queue.name);
}
@Test
public void messageIds() {
for (int i = 0; i < Packet.packets.length; i++) {
if (Packet.packets[i] != null) {
assertEquals(i, Packet.packets[i].methodId());
}
}
}
}