package jReto.unit; import static org.junit.Assert.*; import java.io.ByteArrayOutputStream; import java.io.PrintStream; import java.nio.ByteBuffer; import jReto.util.TestData; import org.junit.Test; import de.tum.in.www1.jReto.packet.DataChecker; import de.tum.in.www1.jReto.packet.DataReader; import de.tum.in.www1.jReto.packet.DataWriter; import de.tum.in.www1.jReto.packet.Packet; import de.tum.in.www1.jReto.packet.PacketType; public class PacketTest { static class TestPacket implements Packet { public final PacketType type; public final int length; public TestPacket(PacketType type, int length) { this.type = type; this.length = length; } public static TestPacket deserialize(ByteBuffer data, PacketType expectedType, int expectedLength) { DataReader reader = new DataReader(data); if (!DataChecker.check(reader, expectedType, expectedLength)) return null; ByteBuffer testData = reader.getRemainingData(); System.out.println(testData); TestData.verify(testData, testData.remaining()); return new TestPacket(expectedType, expectedLength); } @Override public ByteBuffer serialize() { DataWriter data = new DataWriter(this.length); data.add(this.type); data.add(TestData.generate(length-4)); return data.getData(); } } @Test public void testPacketSubclass() { final PacketType type = PacketType.DATA_PACKET; final int length = 16; TestPacket packet = new TestPacket(type, length); TestPacket packet2 = TestPacket.deserialize(packet.serialize(), PacketType.DATA_PACKET, length); assertTrue(packet.type == packet2.type); } @Test public void testPacketInvalidLength1() { ByteArrayOutputStream outContent = new ByteArrayOutputStream(); System.setErr(new PrintStream(outContent)); final PacketType type = PacketType.DATA_PACKET; TestPacket packet = TestPacket.deserialize(new TestPacket(type, 10).serialize(), type, 20); assertNull(packet); assertEquals("Basic data check failed: Not enough data remaining. Needed: 20, available: 10\n", outContent.toString()); } @Test public void testPacketInvalidType() { ByteArrayOutputStream outContent = new ByteArrayOutputStream(); System.setErr(new PrintStream(outContent)); final int length = 16; TestPacket packet = TestPacket.deserialize(new TestPacket(PacketType.DATA_PACKET, length).serialize(), PacketType.CLOSE_REQUEST, length); assertNull(packet); assertEquals("Basic data check failed: Unexpected type. Expected: CLOSE_REQUEST. Received: DATA_PACKET\n", outContent.toString()); } }