/* * Copyright 2015 - 2017 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; import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.experimental.categories.Category; import org.kie.server.api.model.KieContainerResource; import org.kie.server.api.model.KieContainerResourceList; import org.kie.server.api.model.KieContainerStatus; 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.integrationtests.category.Smoke; import org.kie.server.integrationtests.shared.KieServerAssert; import org.kie.server.integrationtests.shared.KieServerDeployer; import org.kie.server.integrationtests.shared.basetests.RestJmsSharedBaseIntegrationTest; import java.util.List; import java.util.Set; public class KieServerContainerCRUDIntegrationTest extends RestJmsSharedBaseIntegrationTest { private static ReleaseId releaseId1 = new ReleaseId("org.kie.server.testing", "container-crud-tests1", "2.1.0.GA"); private static ReleaseId releaseId2 = new ReleaseId("org.kie.server.testing", "container-crud-tests1", "2.1.1.GA"); @BeforeClass public static void initialize() throws Exception { KieServerDeployer.createAndDeployKJar(releaseId1); KieServerDeployer.createAndDeployKJar(releaseId2); } @Before public void setupKieServer() throws Exception { disposeAllContainers(); } @Test @Category(Smoke.class) public void testCreateContainer() throws Exception { ServiceResponse<KieContainerResource> reply = client.createContainer("kie1", new KieContainerResource("kie1", releaseId1)); KieServerAssert.assertSuccess(reply); } @Test public void testCreateContainerNonExistingGAV() throws Exception { ServiceResponse<KieContainerResource> reply = client.createContainer("bad-gav", new KieContainerResource("bad-gav", new ReleaseId( "foo", "bar", "0.0.0"))); KieServerAssert.assertFailure(reply); } @Test public void testCreateContainerAfterFailure() throws Exception { // non-existing ID to simulate failure KieContainerResource resource = new KieContainerResource("kie1", new ReleaseId("non-existing", "non-existing", "0.0.0")); ServiceResponse<KieContainerResource> reply = client.createContainer(resource.getContainerId(), resource); KieServerAssert.assertFailure(reply); // now try to re-create the container with a valid release ID resource.setReleaseId(releaseId1); reply = client.createContainer(resource.getContainerId(), resource); KieServerAssert.assertSuccess(reply); } @Test @Category(Smoke.class) public void testGetContainerInfo() throws Exception { client.createContainer("container-info", new KieContainerResource("container-info", releaseId1)); ServiceResponse<KieContainerResource> reply = client.getContainerInfo("container-info"); KieServerAssert.assertSuccess(reply); KieContainerResource info = reply.getResult(); Assert.assertEquals(KieContainerStatus.STARTED, info.getStatus()); } @Test public void testGetContainerInfoNonExisting() throws Exception { ServiceResponse<KieContainerResource> reply = client.getContainerInfo("non-existing-container"); logger.info(reply.getMsg()); KieServerAssert.assertFailure(reply); } @Test public void testListContainers() throws Exception { client.createContainer("list-containers-c1", new KieContainerResource("list-containers-c1", releaseId1)); client.createContainer("list-containers-c2", new KieContainerResource("list-containers-c2", releaseId1)); ServiceResponse<KieContainerResourceList> reply = client.listContainers(); KieServerAssert.assertSuccess(reply); List<KieContainerResource> containers = reply.getResult().getContainers(); Assert.assertEquals("Number of listed containers!", 2, containers.size()); assertContainsContainer(containers, "list-containers-c1"); assertContainsContainer(containers, "list-containers-c2"); } @Test public void testGetReleaseId() throws Exception { String containerId = "get-releaseId"; client.createContainer(containerId, new KieContainerResource(containerId, releaseId1)); ServiceResponse<ReleaseId> reply = client.getReleaseId(containerId); KieServerAssert.assertSuccess(reply); Assert.assertEquals(releaseId1, reply.getResult()); ServiceResponse<Void> disposeReply = client.disposeContainer(containerId); KieServerAssert.assertSuccess(disposeReply); } @Test public void testUpdateReleaseIdForExistingContainer() throws Exception { client.createContainer("update-releaseId", new KieContainerResource("update-releaseId", releaseId1)); ServiceResponse<ReleaseId> reply = client.updateReleaseId("update-releaseId", releaseId2); KieServerAssert.assertSuccess(reply); Assert.assertEquals(releaseId2, reply.getResult()); ServiceResponse<Void> disposeReply = client.disposeContainer("update-releaseId"); KieServerAssert.assertSuccess(disposeReply); } @Test public void testDisposeContainer() throws Exception { client.createContainer("dispose-container", new KieContainerResource("dispose-container", releaseId1)); ServiceResponse<Void> reply = client.disposeContainer("dispose-container"); KieServerAssert.assertSuccess(reply); // verify the container is no longer returned when calling listContainers() ServiceResponse<KieContainerResourceList> listReply = client.listContainers(); KieServerAssert.assertSuccess(listReply); List<KieContainerResource> containers = listReply.getResult().getContainers(); KieServerAssert.assertNullOrEmpty("No containers returned!", containers); } @Test public void testDisposeNonExistingContainer() throws Exception { ServiceResponse<Void> reply = client.disposeContainer("non-existing-container"); KieServerAssert.assertSuccess(reply); } @Test public void testUpdateReleaseIdForNotExistingContainer() throws Exception { ServiceResponse<ReleaseId> reply = client.updateReleaseId("update-releaseId", releaseId2); KieServerAssert.assertSuccess(reply); Assert.assertEquals(releaseId2, reply.getResult()); ServiceResponse<KieContainerResourceList> replyList = client.listContainers(); KieServerAssert.assertSuccess(replyList); List<KieContainerResource> containers = replyList.getResult().getContainers(); Assert.assertEquals("Number of listed containers!", 1, containers.size()); assertContainsContainer(containers, "update-releaseId"); ServiceResponse<Void> disposeReply = client.disposeContainer("update-releaseId"); KieServerAssert.assertSuccess(disposeReply); } @Test public void testUpdateReleaseIdForExistingContainerAndCheckServerState() throws Exception { client.createContainer("update-releaseId", new KieContainerResource("update-releaseId", releaseId1)); ServiceResponse<ReleaseId> reply = client.updateReleaseId("update-releaseId", releaseId2); KieServerAssert.assertSuccess(reply); Assert.assertEquals(releaseId2, reply.getResult()); ServiceResponse<KieServerStateInfo> currentServerStateReply = client.getServerState(); KieServerAssert.assertSuccess(currentServerStateReply); KieServerStateInfo currentServerState = currentServerStateReply.getResult(); Assert.assertNotNull(currentServerState); Set<KieContainerResource> containers = currentServerState.getContainers(); Assert.assertEquals(1, containers.size()); KieContainerResource container = containers.iterator().next(); Assert.assertNotNull(container); Assert.assertEquals(releaseId2, container.getReleaseId()); Assert.assertEquals(releaseId2, container.getResolvedReleaseId()); ServiceResponse<Void> disposeReply = client.disposeContainer("update-releaseId"); KieServerAssert.assertSuccess(disposeReply); } private void assertContainsContainer(List<KieContainerResource> containers, String expectedContainerId) { for (KieContainerResource container : containers) { if (container.getContainerId().equals(expectedContainerId)) { return; } } Assert.fail( "Container list " + containers + " does not contain expected container with id " + expectedContainerId); } }