/* * Copyright 2016 JBoss by Red Hat. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * 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 java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.stream.Stream; import org.junit.Assert; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.kie.server.api.model.KieContainerResource; import org.kie.server.api.model.KieContainerResourceFilter; import org.kie.server.api.model.KieContainerResourceList; import org.kie.server.api.model.KieContainerStatus; import org.kie.server.api.model.KieContainerStatusFilter; import org.kie.server.api.model.ReleaseId; import org.kie.server.api.model.ReleaseIdFilter; import org.kie.server.api.model.ServiceResponse; import org.kie.server.integrationtests.shared.KieServerAssert; import org.kie.server.integrationtests.shared.KieServerDeployer; import org.kie.server.integrationtests.shared.basetests.RestJmsSharedBaseIntegrationTest; @RunWith(Parameterized.class) public class KieServerContainerListFilteringIntegrationTest 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"); private static ReleaseId releaseId3 = new ReleaseId("org.kie.server.testing", "container-crud-tests2", "2.1.2.GA"); private static final String CONTAINER_ID_1 = "list-containers-releaseId-c1"; private static final String CONTAINER_ID_2 = "list-containers-releaseId-c2"; private static final String CONTAINER_ID_3 = "list-containers-releaseId-c3"; private static final ReleaseIdFilter VERSION_FILTER_1 = new ReleaseIdFilter.Builder().version("2.1.0.GA").build(); private static final ReleaseIdFilter VERSION_FILTER_2 = new ReleaseIdFilter.Builder().version("3.0.0.GA").build(); private static final ReleaseIdFilter ARTIFACT_ID_FILTER = new ReleaseIdFilter.Builder().artifactId("container-crud-tests2").build(); private static final ReleaseIdFilter GROUP_ID_FILTER = new ReleaseIdFilter.Builder().groupId("org.kie.server.testing").build(); private static final ReleaseIdFilter ARTIFACT_ID_VERSION_FILTER = new ReleaseIdFilter.Builder().artifactId("container-crud-tests1").version("2.1.1.GA").build(); private static final ReleaseIdFilter GROUPD_ID_ARTIFACT_ID_FILTER = new ReleaseIdFilter.Builder().groupId("org.kie.server.testing").artifactId("container-crud-tests1").build(); private static final ReleaseIdFilter RELEASE_ID_FILTER_1 = new ReleaseIdFilter("org.kie.server.testing", "container-crud-tests1", "2.1.0.GA"); private static final ReleaseIdFilter RELEASE_ID_FILTER_2 = new ReleaseIdFilter("org.kie.server.testing", "container-crud-tests2", "2.1.2.GA"); private static final KieContainerStatusFilter CREATING_DISPOSING_FILTER = new KieContainerStatusFilter(KieContainerStatus.CREATING, KieContainerStatus.DISPOSING); private static final KieContainerStatusFilter STARTED_FILTER = new KieContainerStatusFilter(KieContainerStatus.STARTED); @BeforeClass public static void initialize() throws Exception { KieServerDeployer.createAndDeployKJar(releaseId1); KieServerDeployer.createAndDeployKJar(releaseId2); } @Before public void setupKieServer() throws Exception { disposeAllContainers(); client.createContainer(CONTAINER_ID_1, new KieContainerResource(CONTAINER_ID_1, releaseId1)); client.createContainer(CONTAINER_ID_2, new KieContainerResource(CONTAINER_ID_2, releaseId2)); //container 3 have status FAILED because is not created kjar client.createContainer(CONTAINER_ID_3, new KieContainerResource(CONTAINER_ID_3, releaseId3)); } @Parameterized.Parameters(name = "{index}: {0} {1} {2} {3} {4}") public static Collection<Object[]> data() { Collection<Object[]> testData = new ArrayList<Object[]>(Arrays.asList(new Object[][] { {VERSION_FILTER_1, KieContainerStatusFilter.ACCEPT_ALL, Arrays.asList(new String[]{CONTAINER_ID_1})}, {VERSION_FILTER_2, CREATING_DISPOSING_FILTER, Arrays.asList(new String[]{})}, {ARTIFACT_ID_FILTER, KieContainerStatusFilter.ACCEPT_ALL, Arrays.asList(new String[]{CONTAINER_ID_3})}, {GROUP_ID_FILTER, KieContainerStatusFilter.ACCEPT_ALL, Arrays.asList(new String[]{CONTAINER_ID_1, CONTAINER_ID_2, CONTAINER_ID_3})}, {ARTIFACT_ID_VERSION_FILTER, STARTED_FILTER, Arrays.asList(new String[]{CONTAINER_ID_2})}, {GROUPD_ID_ARTIFACT_ID_FILTER, KieContainerStatusFilter.ACCEPT_ALL, Arrays.asList(new String[]{CONTAINER_ID_1, CONTAINER_ID_2})}, {RELEASE_ID_FILTER_1, KieContainerStatusFilter.ACCEPT_ALL, Arrays.asList(new String[]{CONTAINER_ID_1})}, {RELEASE_ID_FILTER_2, STARTED_FILTER, Arrays.asList(new String[]{})}, {ReleaseIdFilter.ACCEPT_ALL, STARTED_FILTER, Arrays.asList(new String[]{CONTAINER_ID_1, CONTAINER_ID_2})}, {ReleaseIdFilter.ACCEPT_ALL, KieContainerStatusFilter.ACCEPT_ALL, Arrays.asList(new String[]{CONTAINER_ID_1, CONTAINER_ID_2, CONTAINER_ID_3})} } )); //concat with parent parameters (marshalling, configuration) return createParametersCollection(testData); } private static Collection<Object[]> createParametersCollection(Collection<Object[]> data) { Collection<Object[]> toReturn = new ArrayList<Object[]>(); for (Object[] row : data) { for (Object[] settings : RestJmsSharedBaseIntegrationTest.data()) { toReturn.add(Stream.of(settings, row).flatMap(Stream::of).toArray(Object[]::new)); } } return toReturn; } //parametrs with ids 0 and 1 are used in parent class @Parameterized.Parameter(2) public ReleaseIdFilter releaseIdFilter; @Parameterized.Parameter(3) public KieContainerStatusFilter statusFilter; @Parameterized.Parameter(4) public List<String> expectedContainersIds; @Test public void testListContainersWithFiltering() { ServiceResponse<KieContainerResourceList> reply = client.listContainers(new KieContainerResourceFilter(releaseIdFilter, statusFilter)); KieServerAssert.assertSuccess(reply); List<KieContainerResource> contianers = reply.getResult().getContainers(); if (expectedContainersIds.isEmpty()) { KieServerAssert.assertNullOrEmpty("Should be return empty list", contianers); } else { assertNotNull(contianers); assertEquals(expectedContainersIds.size(), contianers.size()); checkContainersList(contianers); } } private void checkContainersList(List<KieContainerResource> containers) { for (KieContainerResource container : containers) { assertTrue(isContainerExpected(container)); checkReleaseIdByFilter(container.getReleaseId()); checkContainerStatusByFilter(container.getStatus()); } } private boolean isContainerExpected(KieContainerResource container) { return expectedContainersIds.contains(container.getContainerId()); } private void checkReleaseIdByFilter(ReleaseId releaseId) { String version = releaseIdFilter.getVersion(); String artifactId = releaseIdFilter.getArtifactId(); String groupId = releaseIdFilter.getGroupId(); if (version != null) { assertEquals(version, releaseId.getVersion()); } if (artifactId != null) { assertEquals(artifactId, releaseId.getArtifactId()); } if (groupId != null) { assertEquals(groupId, releaseId.getGroupId()); } } private void checkContainerStatusByFilter(KieContainerStatus status) { if (statusFilter.getAcceptedStatuses().isEmpty()) { return; } for (KieContainerStatus expectedStatus : statusFilter.getAcceptedStatuses()) { if (expectedStatus.equals(status)) { return; } } Assert.fail("Status " + status + " is not in expected list " + expectedContainersIds); } }