Search in sources :

Example 1 with ServerInstanceConnected

use of org.kie.server.controller.api.model.events.ServerInstanceConnected in project kie-wb-common by kiegroup.

the class StandaloneControllerMultinodeIT method testAvailableRestEndpoint.

/**
 * This creates a multiinstance node where
 * instance 1 deploys the workbench
 * instance 2 deploys kie-server
 * after checking that the instance 2 manual is instantiated and working
 * it kills the server (only working in linux for now) -> on windows it will stop the app server gracefully
 * instance 2 is killed and the health check detects the problem
 * notifies back to the test that the kie server is disconnected (CountDownLatch in the EventHandler)
 */
@Test
@RunAsClient
@OperateOnDeployment("workbench")
public void testAvailableRestEndpoint() throws Exception {
    String url = new URL("http://localhost:8080/workbench/websocket/controller").toExternalForm();
    URL serverUrl = new URL("http://localhost:8230/kie-server/services/rest/server");
    CountDownLatch serverDown = new CountDownLatch(1);
    CountDownLatch kieServerTemplateUp = new CountDownLatch(1);
    CountDownLatch kieServerInstanceUp = new CountDownLatch(1);
    EventHandler customWSEventHandler = new EventHandler() {

        @Override
        public void onServerInstanceConnected(ServerInstanceConnected serverInstanceConnected) {
            LOGGER.info("onServerInstanceConnected :" + serverInstanceConnected);
        }

        @Override
        public void onServerInstanceDeleted(ServerInstanceDeleted serverInstanceDeleted) {
            LOGGER.info("onServerInstanceDeleted :" + serverInstanceDeleted);
        }

        @Override
        public void onServerInstanceDisconnected(ServerInstanceDisconnected serverInstanceDisconnected) {
            LOGGER.info("onServerInstanceDisconnected :" + serverInstanceDisconnected);
            serverDown.countDown();
        }

        @Override
        public void onServerTemplateDeleted(ServerTemplateDeleted serverTemplateDeleted) {
            LOGGER.info("onServerTemplateDeleted :" + serverTemplateDeleted);
        }

        @Override
        public void onServerTemplateUpdated(ServerTemplateUpdated serverTemplateUpdated) {
            LOGGER.info("onServerTemplateUpdated :" + serverTemplateUpdated);
            kieServerTemplateUp.countDown();
        }

        @Override
        public void onServerInstanceUpdated(ServerInstanceUpdated serverInstanceUpdated) {
            LOGGER.info("onServerInstanceUpdated :" + serverInstanceUpdated);
            kieServerInstanceUp.countDown();
        }

        @Override
        public void onContainerSpecUpdated(ContainerSpecUpdated containerSpecUpdated) {
            LOGGER.info("onContainerSpecUpdated :" + containerSpecUpdated);
        }
    };
    deployer.deploy("kie-server");
    assertTrue(ping(serverUrl));
    // the use of manually deployment is the only way to guarantee that the web context is completely deployed
    // and not causing a race condition when the controller ping the server and severing the connection
    deployer.deploy("workbench");
    try (WebSocketKieServerControllerClient client = (WebSocketKieServerControllerClient) KieServerControllerClientFactory.newWebSocketClient(url, USER, PASSWORD, customWSEventHandler)) {
        kieServerTemplateUp.await(100, TimeUnit.SECONDS);
        kieServerInstanceUp.await(100, TimeUnit.SECONDS);
        ServerInstanceKeyList list = client.getServerInstances(KIE_SERVER_ID);
        assertEquals(1, list.getServerInstanceKeys().length);
        // kill the secondary node
        controller.kill(SECONDARY_NODE);
        serverDown.await(100, TimeUnit.SECONDS);
        assertFalse(ping(serverUrl));
        list = client.getServerInstances(KIE_SERVER_ID);
        assertEquals(0, list.getServerInstanceKeys().length);
    }
}
Also used : ContainerSpecUpdated(org.kie.server.controller.api.model.events.ContainerSpecUpdated) ServerInstanceDeleted(org.kie.server.controller.api.model.events.ServerInstanceDeleted) ServerInstanceUpdated(org.kie.server.controller.api.model.events.ServerInstanceUpdated) ServerTemplateDeleted(org.kie.server.controller.api.model.events.ServerTemplateDeleted) EventHandler(org.kie.server.controller.client.event.EventHandler) ServerInstanceConnected(org.kie.server.controller.api.model.events.ServerInstanceConnected) CountDownLatch(java.util.concurrent.CountDownLatch) URL(java.net.URL) ServerTemplateUpdated(org.kie.server.controller.api.model.events.ServerTemplateUpdated) WebSocketKieServerControllerClient(org.kie.server.controller.client.websocket.WebSocketKieServerControllerClient) ServerInstanceKeyList(org.kie.server.controller.api.model.runtime.ServerInstanceKeyList) ServerInstanceDisconnected(org.kie.server.controller.api.model.events.ServerInstanceDisconnected) OperateOnDeployment(org.jboss.arquillian.container.test.api.OperateOnDeployment) RunAsClient(org.jboss.arquillian.container.test.api.RunAsClient) Test(org.junit.Test)

Aggregations

URL (java.net.URL)1 CountDownLatch (java.util.concurrent.CountDownLatch)1 OperateOnDeployment (org.jboss.arquillian.container.test.api.OperateOnDeployment)1 RunAsClient (org.jboss.arquillian.container.test.api.RunAsClient)1 Test (org.junit.Test)1 ContainerSpecUpdated (org.kie.server.controller.api.model.events.ContainerSpecUpdated)1 ServerInstanceConnected (org.kie.server.controller.api.model.events.ServerInstanceConnected)1 ServerInstanceDeleted (org.kie.server.controller.api.model.events.ServerInstanceDeleted)1 ServerInstanceDisconnected (org.kie.server.controller.api.model.events.ServerInstanceDisconnected)1 ServerInstanceUpdated (org.kie.server.controller.api.model.events.ServerInstanceUpdated)1 ServerTemplateDeleted (org.kie.server.controller.api.model.events.ServerTemplateDeleted)1 ServerTemplateUpdated (org.kie.server.controller.api.model.events.ServerTemplateUpdated)1 ServerInstanceKeyList (org.kie.server.controller.api.model.runtime.ServerInstanceKeyList)1 EventHandler (org.kie.server.controller.client.event.EventHandler)1 WebSocketKieServerControllerClient (org.kie.server.controller.client.websocket.WebSocketKieServerControllerClient)1