use of com.kixeye.chassis.transport.dto.Envelope in project chassis by Kixeye.
the class WebSocketTransportTest method testWebSocketServiceWithProtobuf.
@Test
public void testWebSocketServiceWithProtobuf() throws Exception {
Map<String, Object> properties = new HashMap<String, Object>();
properties.put("websocket.enabled", "true");
properties.put("websocket.port", "" + SocketUtils.findAvailableTcpPort());
properties.put("websocket.hostname", "localhost");
properties.put("http.enabled", "false");
properties.put("http.port", "" + SocketUtils.findAvailableTcpPort());
properties.put("http.hostname", "localhost");
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
StandardEnvironment environment = new StandardEnvironment();
environment.getPropertySources().addFirst(new MapPropertySource("default", properties));
context.setEnvironment(environment);
context.register(PropertySourcesPlaceholderConfigurer.class);
context.register(TransportConfiguration.class);
context.register(TestWebSocketService.class);
WebSocketClient wsClient = new WebSocketClient();
try {
context.refresh();
final MessageSerDe serDe = context.getBean(ProtobufMessageSerDe.class);
final WebSocketMessageRegistry messageRegistry = context.getBean(WebSocketMessageRegistry.class);
messageRegistry.registerType("stuff", TestObject.class);
wsClient.start();
QueuingWebSocketListener webSocket = new QueuingWebSocketListener(serDe, messageRegistry, null);
Session session = wsClient.connect(webSocket, new URI("ws://localhost:" + properties.get("websocket.port") + "/" + serDe.getMessageFormatName())).get(5000, TimeUnit.MILLISECONDS);
Envelope envelope = new Envelope("getStuff", null, null, Lists.newArrayList(new Header("testheadername", Lists.newArrayList("testheaderval"))), null);
session.getRemote().sendBytes(ByteBuffer.wrap(serDe.serialize(envelope)));
TestObject response = webSocket.getResponse(5, TimeUnit.SECONDS);
Assert.assertNotNull(response);
Assert.assertEquals("stuff", response.value);
byte[] rawStuff = serDe.serialize(new TestObject("more stuff"));
envelope = new Envelope("setStuff", "stuff", null, ByteBuffer.wrap(rawStuff));
session.getRemote().sendBytes(ByteBuffer.wrap(serDe.serialize(envelope)));
response = webSocket.getResponse(5, TimeUnit.SECONDS);
Assert.assertNotNull(response);
Assert.assertEquals("stuff", response.value);
envelope = new Envelope("getStuff", null, null, null);
session.getRemote().sendBytes(ByteBuffer.wrap(serDe.serialize(envelope)));
response = webSocket.getResponse(5, TimeUnit.SECONDS);
Assert.assertNotNull(response);
Assert.assertEquals("more stuff", response.value);
rawStuff = serDe.serialize(new TestObject(RandomStringUtils.randomAlphanumeric(100)));
envelope = new Envelope("setStuff", "stuff", null, ByteBuffer.wrap(rawStuff));
session.getRemote().sendBytes(ByteBuffer.wrap(serDe.serialize(envelope)));
ServiceError error = webSocket.getResponse(5, TimeUnit.SECONDS);
Assert.assertNotNull(error);
Assert.assertEquals(ExceptionServiceErrorMapper.VALIDATION_ERROR_CODE, error.code);
envelope = new Envelope("expectedError", null, null, null);
session.getRemote().sendBytes(ByteBuffer.wrap(serDe.serialize(envelope)));
error = webSocket.getResponse(5, TimeUnit.SECONDS);
Assert.assertNotNull(error);
Assert.assertEquals(TestWebSocketService.EXPECTED_EXCEPTION.code, error.code);
Assert.assertEquals(TestWebSocketService.EXPECTED_EXCEPTION.description, error.description);
envelope = new Envelope("unexpectedError", null, null, null);
session.getRemote().sendBytes(ByteBuffer.wrap(serDe.serialize(envelope)));
error = webSocket.getResponse(5, TimeUnit.SECONDS);
Assert.assertNotNull(error);
Assert.assertEquals(ExceptionServiceErrorMapper.UNKNOWN_ERROR_CODE, error.code);
} finally {
try {
wsClient.stop();
} finally {
context.close();
while (context.isActive()) {
Thread.sleep(100);
}
}
}
}
use of com.kixeye.chassis.transport.dto.Envelope in project chassis by Kixeye.
the class WebSocketEnvelopeTest method testWithPayloadSingleHeaderValue.
@Test
public void testWithPayloadSingleHeaderValue() {
final String test1Value = RandomStringUtils.randomAlphaNumericString(20, RAND);
final Envelope baseEnvelope = new Envelope(RandomStringUtils.randomAlphaNumericString(20, RAND), RandomStringUtils.randomAlphaNumericString(20, RAND), RandomStringUtils.randomAlphaNumericString(20, RAND), Lists.newArrayList(new Header("testName", Lists.newArrayList(test1Value))), ByteBuffer.wrap(RandomStringUtils.randomString(20, RAND).getBytes()));
final WebSocketEnvelope envelope = new WebSocketEnvelope(baseEnvelope);
Assert.assertEquals(baseEnvelope.action, envelope.getAction());
Assert.assertEquals(baseEnvelope.typeId, envelope.getTypeId());
Assert.assertEquals(baseEnvelope.transactionId, envelope.getTransactionId());
Assert.assertTrue(envelope.hasPayload());
Assert.assertEquals(baseEnvelope.payload, envelope.getPayload());
Assert.assertEquals(1, envelope.getHeaders().size());
Assert.assertEquals(test1Value, envelope.getHeaders().get("testName").iterator().next());
}
use of com.kixeye.chassis.transport.dto.Envelope in project chassis by Kixeye.
the class WebSocketEnvelopeTest method testWithPayloadMultiHeaderValue.
@Test
public void testWithPayloadMultiHeaderValue() {
final String test1Value = RandomStringUtils.randomAlphaNumericString(20, RAND);
final String test2Value = RandomStringUtils.randomAlphaNumericString(20, RAND);
final String test3Value = RandomStringUtils.randomAlphaNumericString(20, RAND);
final Envelope baseEnvelope = new Envelope(RandomStringUtils.randomAlphaNumericString(20, RAND), RandomStringUtils.randomAlphaNumericString(20, RAND), RandomStringUtils.randomAlphaNumericString(20, RAND), Lists.newArrayList(new Header("testName", Lists.newArrayList(test1Value, test2Value, test3Value))), ByteBuffer.wrap(RandomStringUtils.randomString(20, RAND).getBytes()));
final WebSocketEnvelope envelope = new WebSocketEnvelope(baseEnvelope);
Assert.assertEquals(baseEnvelope.action, envelope.getAction());
Assert.assertEquals(baseEnvelope.typeId, envelope.getTypeId());
Assert.assertEquals(baseEnvelope.transactionId, envelope.getTransactionId());
Assert.assertTrue(envelope.hasPayload());
Assert.assertEquals(baseEnvelope.payload, envelope.getPayload());
Assert.assertEquals(3, envelope.getHeaders().size());
Assert.assertTrue(envelope.getHeaders().containsEntry("testName", test1Value));
Assert.assertTrue(envelope.getHeaders().containsEntry("testName", test2Value));
Assert.assertTrue(envelope.getHeaders().containsEntry("testName", test3Value));
}
use of com.kixeye.chassis.transport.dto.Envelope in project chassis by Kixeye.
the class WebSocketEnvelopeTest method testWithPayloadSameHeaderMultiValue.
@Test
public void testWithPayloadSameHeaderMultiValue() {
final String test1Value = RandomStringUtils.randomAlphaNumericString(20, RAND);
final String test2Value = RandomStringUtils.randomAlphaNumericString(20, RAND);
final String test3Value = RandomStringUtils.randomAlphaNumericString(20, RAND);
final Envelope baseEnvelope = new Envelope(RandomStringUtils.randomAlphaNumericString(20, RAND), RandomStringUtils.randomAlphaNumericString(20, RAND), RandomStringUtils.randomAlphaNumericString(20, RAND), Lists.newArrayList(new Header("testName", Lists.newArrayList(test1Value, test2Value)), new Header("testName", Lists.newArrayList(test3Value))), ByteBuffer.wrap(RandomStringUtils.randomString(20, RAND).getBytes()));
final WebSocketEnvelope envelope = new WebSocketEnvelope(baseEnvelope);
Assert.assertEquals(baseEnvelope.action, envelope.getAction());
Assert.assertEquals(baseEnvelope.typeId, envelope.getTypeId());
Assert.assertEquals(baseEnvelope.transactionId, envelope.getTransactionId());
Assert.assertTrue(envelope.hasPayload());
Assert.assertEquals(baseEnvelope.payload, envelope.getPayload());
Assert.assertEquals(3, envelope.getHeaders().size());
Assert.assertTrue(envelope.getHeaders().containsEntry("testName", test1Value));
Assert.assertTrue(envelope.getHeaders().containsEntry("testName", test2Value));
Assert.assertTrue(envelope.getHeaders().containsEntry("testName", test3Value));
}
use of com.kixeye.chassis.transport.dto.Envelope in project chassis by Kixeye.
the class WebSocketEnvelopeTest method testWithPayloadNoHeaders.
@Test
public void testWithPayloadNoHeaders() {
final Envelope baseEnvelope = new Envelope(RandomStringUtils.randomAlphaNumericString(20, RAND), RandomStringUtils.randomAlphaNumericString(20, RAND), RandomStringUtils.randomAlphaNumericString(20, RAND), null, ByteBuffer.wrap(RandomStringUtils.randomString(20, RAND).getBytes()));
final WebSocketEnvelope envelope = new WebSocketEnvelope(baseEnvelope);
Assert.assertEquals(baseEnvelope.action, envelope.getAction());
Assert.assertEquals(baseEnvelope.typeId, envelope.getTypeId());
Assert.assertEquals(baseEnvelope.transactionId, envelope.getTransactionId());
Assert.assertTrue(envelope.hasPayload());
Assert.assertEquals(baseEnvelope.payload, envelope.getPayload());
Assert.assertEquals(0, envelope.getHeaders().size());
}
Aggregations