@Test public void testShort1() throws Exception { AbstractByteArraySerializer serializer = new ByteArrayLengthHeaderSerializer( ByteArrayLengthHeaderSerializer.HEADER_SIZE_UNSIGNED_SHORT); ByteArrayOutputStream bos = new ByteArrayOutputStream(); serializer.serialize(test255.getBytes(), bos); byte[] bytes = bos.toByteArray(); assertEquals(0, bytes[0]); assertEquals(test255.length(), bytes[1] & 0xff); ByteArrayInputStream bis = new ByteArrayInputStream(bytes); bytes = serializer.deserialize(bis); assertEquals(test255, new String(bytes)); }
@Test public void testByte() throws Exception { AbstractByteArraySerializer serializer = new ByteArrayLengthHeaderSerializer( ByteArrayLengthHeaderSerializer.HEADER_SIZE_UNSIGNED_BYTE); ByteArrayOutputStream bos = new ByteArrayOutputStream(); serializer.serialize(test255.getBytes(), bos); byte[] bytes = bos.toByteArray(); assertEquals(test255.length(), bytes[0] & 0xff); ByteArrayInputStream bis = new ByteArrayInputStream(bytes); bytes = serializer.deserialize(bis); assertEquals(test255, new String(bytes)); test255 += "x"; try { serializer.serialize(test255.getBytes(), bos); fail("Expected overflow"); } catch (IllegalArgumentException e) { } }
@Test public void testInt() throws Exception { AbstractByteArraySerializer serializer = new ByteArrayLengthHeaderSerializer(); ByteArrayOutputStream bos = new ByteArrayOutputStream(); serializer.serialize(TEST.getBytes(), bos); byte[] bytes = bos.toByteArray(); assertEquals(0, bytes[0]); assertEquals(0, bytes[1]); assertEquals(0, bytes[2]); assertEquals(TEST.length(), bytes[3]); ByteArrayInputStream bis = new ByteArrayInputStream(bytes); bytes = serializer.deserialize(bis); assertEquals(TEST, new String(bytes)); bytes[0] = -1; bis = new ByteArrayInputStream(bytes); try { bytes = serializer.deserialize(bis); fail("Expected negative length"); } catch (IllegalArgumentException e) { } }
private TcpDeserializationExceptionEvent doDeserialize(AbstractByteArraySerializer deser, String expectedMessage, byte[] data, int mms) { final AtomicReference<TcpDeserializationExceptionEvent> event = new AtomicReference<TcpDeserializationExceptionEvent>(); class Publisher implements ApplicationEventPublisher { @Override public void publishEvent(ApplicationEvent anEvent) { event.set((TcpDeserializationExceptionEvent) anEvent); } @Override public void publishEvent(Object event) { } } Publisher publisher = new Publisher(); ByteArrayInputStream bais = new ByteArrayInputStream(data); deser.setApplicationEventPublisher(publisher); deser.setMaxMessageSize(mms); try { deser.deserialize(bais); fail("expected exception"); } catch (Exception e) { assertNotNull(event.get()); assertSame(e, event.get().getCause()); assertThat(e.getMessage(), containsString(expectedMessage)); } return event.get(); }
@Test public void testShort2() throws Exception { AbstractByteArraySerializer serializer = new ByteArrayLengthHeaderSerializer( ByteArrayLengthHeaderSerializer.HEADER_SIZE_UNSIGNED_SHORT); serializer.setMaxMessageSize(0x10000); ByteArrayOutputStream bos = new ByteArrayOutputStream(); serializer.serialize(testFFFF.getBytes(), bos); byte[] bytes = bos.toByteArray(); assertEquals(0xff, bytes[0] & 0xff); assertEquals(0xff, bytes[1] & 0xff); ByteArrayInputStream bis = new ByteArrayInputStream(bytes); bytes = serializer.deserialize(bis); assertEquals(testFFFF, new String(bytes)); testFFFF += "x"; try { serializer.serialize(testFFFF.getBytes(), bos); fail("Expected overflow"); } catch (IllegalArgumentException e) { } }