package integration.sockjs; import integration.VertxNubesTestBase; import io.vertx.core.buffer.Buffer; import io.vertx.core.http.WebSocket; import io.vertx.core.json.JsonObject; import io.vertx.ext.unit.Async; import io.vertx.ext.unit.TestContext; public abstract class EventBusBridgeTestBase extends VertxNubesTestBase { protected static void registerThroughBridge(WebSocket ws, String address, String msg) { sendTypeToBridge(ws, "register", address, msg); } protected static void publishThroughBridge(WebSocket ws, String address, String msg) { sendTypeToBridge(ws, "publish", address, msg); } protected static void sendThroughBridge(WebSocket ws, String address, String msg) { sendTypeToBridge(ws, "send", address, msg); } protected static void sendTypeToBridge(WebSocket ws, String type, String address, String msg) { JsonObject json = new JsonObject(); json.put("type", type); json.put("address", address); json.put("body", msg); ws.write(Buffer.buffer(json.toString())); } protected void testInboundPermitted(TestContext context, String wsAddress, String address) { Async async = context.async(); String msg = "It was a dark stormy night"; vertx.eventBus().consumer(address, buff -> { context.assertEquals(msg, buff.body()); async.complete(); }); client().websocket(wsAddress, socket -> { publishThroughBridge(socket, address, msg); }); } protected void testOutboundPermitted(TestContext context, String wsAddress, String address) { Async async = context.async(); async.await(10000); String msg = "It was a dark stormy night"; client().websocket(wsAddress, socket -> { socket.handler(buffer -> { System.out.println("message received through socket"); JsonObject json = new JsonObject(buffer.toString("UTF-8")); context.assertEquals(msg, json.getString("body")); async.complete(); }); registerThroughBridge(socket, address, msg); try { Thread.sleep(1000); } catch (Exception e) { } vertx.eventBus().publish(address, msg); }); } protected void testInboundRefused(TestContext context, String wsAddress, String address) { Async async = context.async(); String msg = "It was a dark stormy night"; vertx.eventBus().consumer(address, buff -> { context.fail("The message should not be forwarded to the event bus"); }); client().websocket(wsAddress, socket -> { socket.handler(buffer -> { assertAccessRefused(context, buffer); async.complete(); }); publishThroughBridge(socket, address, msg); }); } protected void testOutboundRefused(TestContext context, String wsAddress, String address) { Async async = context.async(); String msg = "It was a dark stormy night"; client().websocket(wsAddress, socket -> { socket.handler(buffer -> { assertAccessRefused(context, buffer); async.complete(); }); registerThroughBridge(socket, address, msg); }); } protected void assertAccessRefused(TestContext context, Buffer buffer) { JsonObject resp = new JsonObject(buffer.toString("UTF-8")); context.assertEquals("err", resp.getString("type")); context.assertEquals("access_denied", resp.getString("body")); } }