/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kie.server.integrationtests.common.jms; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runners.Parameterized; import org.kie.server.api.marshalling.Marshaller; import org.kie.server.api.marshalling.MarshallerFactory; import org.kie.server.api.marshalling.MarshallingFormat; import org.kie.server.api.model.KieContainerResource; import org.kie.server.api.model.KieContainerResourceList; import org.kie.server.api.model.KieScannerResource; import org.kie.server.api.model.KieScannerStatus; import org.kie.server.api.model.KieServerStateInfo; import org.kie.server.api.model.ReleaseId; import org.kie.server.api.model.ServiceResponse; import org.kie.server.client.KieServicesClient; import org.kie.server.client.KieServicesConfiguration; import org.kie.server.client.jms.AsyncResponseHandler; import org.kie.server.client.jms.BlockingResponseCallback; import org.kie.server.client.jms.FireAndForgetResponseHandler; import org.kie.server.client.jms.ResponseCallback; import org.kie.server.integrationtests.category.JMSOnly; import org.kie.server.integrationtests.shared.KieServerDeployer; import org.kie.server.integrationtests.shared.KieServerSynchronization; import org.kie.server.integrationtests.shared.basetests.RestJmsSharedBaseIntegrationTest; import static org.assertj.core.api.Assertions.*; @Category({JMSOnly.class}) public class ContainerJmsResponseHandlerIntegrationTest extends RestJmsSharedBaseIntegrationTest { private static final ReleaseId RELEASE_ID_1 = new ReleaseId("org.kie.server.testing", "container-crud-tests1", "2.1.0.GA"); private static final ReleaseId RELEASE_ID_2 = new ReleaseId("org.kie.server.testing", "container-crud-tests1", "2.1.1.GA"); @Parameterized.Parameters(name = "{index}: {0}") public static Collection<Object[]> data() { KieServicesConfiguration jmsConfiguration = createKieServicesJmsConfiguration(); return new ArrayList<Object[]>(Arrays.asList(new Object[][]{ {MarshallingFormat.JAXB, jmsConfiguration}, {MarshallingFormat.JSON, jmsConfiguration}, {MarshallingFormat.XSTREAM, jmsConfiguration} })); } private KieServicesClient asyncClient; private ResponseCallback responseCallback; private KieServicesClient fireAndForgetClient; @BeforeClass public static void initialize() throws Exception { KieServerDeployer.createAndDeployKJar(RELEASE_ID_1); KieServerDeployer.createAndDeployKJar(RELEASE_ID_2); } @Before public void setupClients() throws Exception { asyncClient = createDefaultClient(); Marshaller marshaller = MarshallerFactory.getMarshaller(new HashSet<Class<?>>(extraClasses.values()), configuration.getMarshallingFormat(), asyncClient.getClassLoader()); responseCallback = new BlockingResponseCallback(marshaller); asyncClient.setResponseHandler(new AsyncResponseHandler(responseCallback)); fireAndForgetClient = createDefaultClient(); fireAndForgetClient.setResponseHandler(new FireAndForgetResponseHandler()); } @Before public void setupKieServer() throws Exception { disposeAllContainers(); } @Test public void testContainerWithAsyncResponseHandler() { String containerId = "asyncContainer"; ServiceResponse<?> response = asyncClient.createContainer(containerId, new KieContainerResource(containerId, RELEASE_ID_1)); assertThat(response).isNull(); KieContainerResource container = responseCallback.get(KieContainerResource.class); assertThat(container).isNotNull(); assertThat(container.getContainerId()).isEqualTo(containerId); assertThat(container.getReleaseId()).isEqualTo(RELEASE_ID_1); response = asyncClient.getServerState(); assertThat(response).isNull(); KieServerStateInfo serverState = responseCallback.get(KieServerStateInfo.class); assertThat(serverState).isNotNull(); assertThat(serverState.getContainers()).hasSize(1); container = serverState.getContainers().iterator().next(); assertThat(container.getReleaseId()).isEqualTo(RELEASE_ID_1); response = asyncClient.updateReleaseId(containerId, RELEASE_ID_2); assertThat(response).isNull(); ReleaseId releaseId = responseCallback.get(ReleaseId.class); assertThat(releaseId).isEqualTo(RELEASE_ID_2); response = asyncClient.getContainerInfo(containerId); assertThat(response).isNull(); container = responseCallback.get(KieContainerResource.class); assertThat(container.getReleaseId()).isEqualTo(RELEASE_ID_2); response = asyncClient.disposeContainer(containerId); assertThat(response).isNull(); responseCallback.get(Void.class); response = asyncClient.listContainers(); assertThat(response).isNull(); KieContainerResourceList containerList = responseCallback.get(KieContainerResourceList.class); assertThat(containerList.getContainers()).isNullOrEmpty(); } @Test public void testContainerWithFireAndForgetResponseHandler() throws Exception { String containerId = "fireAndForgetContainer"; ServiceResponse<?> response = fireAndForgetClient.createContainer(containerId, new KieContainerResource(containerId, RELEASE_ID_1)); assertThat(response).isNull(); KieServerSynchronization.waitForKieServerSynchronization(client, 1); response = fireAndForgetClient.updateReleaseId(containerId, RELEASE_ID_2); assertThat(response).isNull(); KieServerSynchronization.waitForContainerWithReleaseId(client, RELEASE_ID_2); response = fireAndForgetClient.disposeContainer(containerId); assertThat(response).isNull(); KieServerSynchronization.waitForKieServerSynchronization(client, 0); } @Test public void testScannerWithAsyncResponseHandler() { String containerId = "asyncScannerContainer"; createContainer(containerId, RELEASE_ID_1); ServiceResponse<?> response = asyncClient.updateScanner(containerId, new KieScannerResource(KieScannerStatus.STARTED, 10000L)); assertThat(response).isNull(); KieScannerResource scanner = responseCallback.get(KieScannerResource.class); assertThat(scanner.getStatus()).isEqualTo(KieScannerStatus.STARTED); response = asyncClient.updateScanner(containerId, new KieScannerResource(KieScannerStatus.STOPPED, 10000L)); assertThat(response).isNull(); scanner = responseCallback.get(KieScannerResource.class); assertThat(scanner.getStatus()).isEqualTo(KieScannerStatus.STOPPED); response = asyncClient.updateScanner(containerId, new KieScannerResource(KieScannerStatus.DISPOSED, 10000L)); assertThat(response).isNull(); scanner = responseCallback.get(KieScannerResource.class); assertThat(scanner.getStatus()).isEqualTo(KieScannerStatus.DISPOSED); } @Test public void testScannerWithFireAndForgetResponseHandler() throws Exception { String containerId = "fireAndForgetScannerContainer"; createContainer(containerId, RELEASE_ID_1); ServiceResponse<?> response = fireAndForgetClient.updateScanner(containerId, new KieScannerResource(KieScannerStatus.STARTED, 10000L)); assertThat(response).isNull(); KieServerSynchronization.waitForContainerWithScannerStatus(client, KieScannerStatus.STARTED); response = asyncClient.updateScanner(containerId, new KieScannerResource(KieScannerStatus.STOPPED, 10000L)); assertThat(response).isNull(); KieServerSynchronization.waitForContainerWithScannerStatus(client, KieScannerStatus.STOPPED); response = asyncClient.updateScanner(containerId, new KieScannerResource(KieScannerStatus.DISPOSED, 10000L)); assertThat(response).isNull(); KieServerSynchronization.waitForContainerWithScannerStatus(client, KieScannerStatus.DISPOSED); } }