content: package integration.sockjs;
  
  import integration.VertxNubesTestBase;
  import io.vertx.core.buffer.Buffer;
  import io.vertx.ext.unit.Async;
  import io.vertx.ext.unit.TestContext;
  import mock.controllers.sockjs.TestSockJSController;
  import org.junit.Test;
  
  import java.util.concurrent.atomic.AtomicBoolean;
  
  import static io.vertx.core.http.HttpHeaders.CONTENT_TYPE;
  
  public class TestSockJS extends VertxNubesTestBase {
  
    @Test
    public void sockJSRunning(TestContext context) {
      Async async = context.async();
      client().getNow("/sockjs", response -> {
        context.assertEquals(200, response.statusCode());
        context.assertEquals("text/plain; charset=UTF-8", response.getHeader(CONTENT_TYPE.toString()));
        response.bodyHandler(buff -> {
          context.assertEquals("Welcome to SockJS!\n", buff.toString());
          async.complete();
        });
      });
    }
  
    @Test
    public void testSocketWorkflow(TestContext context) {
      Async async = context.async();
      AtomicBoolean openedCalled = new AtomicBoolean();
      vertx.eventBus().consumer(TestSockJSController.EB_ADDRESS, msg -> {
        String body = (String) msg.body();
        if ("opened".equals(body)) {
          openedCalled.set(true);
        } else if ("closed".equals(body)) {
          context.assertTrue(openedCalled.get());
          async.complete();
        }
      });
      client().websocket("/sockjs/websocket", ws -> {
        Buffer msg = Buffer.buffer("hello!");
        ws.handler(received -> {
          context.assertEquals(msg, received);
          ws.close();
        });
        ws.write(msg);
      });
    }
  }
  