/* * 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.client; import java.util.Collections; import java.util.HashMap; import java.util.Map; import org.junit.Test; 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.KieContainerStatus; import org.kie.server.api.model.KieServerInfo; import org.kie.server.api.model.ReleaseId; import org.kie.server.api.model.ServiceResponse; import org.kie.server.client.credentials.EnteredTokenCredentialsProvider; import static com.github.tomakehurst.wiremock.client.WireMock.*; import static org.junit.Assert.*; public class KieServicesClientTest extends BaseKieServicesClientTest { private static final String CONTAINER_ID = "mycontainer"; private static final String ARTIFACT_ID = "myproject"; private static final String GROUP_ID = "org.kie"; private static final String VERSION = "1.2.3"; @Test public void testGetServerInfo() { stubFor(get(urlEqualTo("/")) .withHeader("Accept", equalTo("application/xml")) .willReturn(aResponse() .withStatus(200) .withHeader("Content-Type", "application/xml") .withBody("<response type=\"SUCCESS\" msg=\"Kie Server info\">\n" + " <kie-server-info>\n" + " <version>1.2.3</version>\n" + " </kie-server-info>\n" + "</response>"))); KieServicesClient client = KieServicesFactory.newKieServicesClient(config); ServiceResponse<KieServerInfo> response = client.getServerInfo(); assertSuccess(response); assertEquals("Server version", "1.2.3", response.getResult().getVersion()); } @Test public void testListContainers() { stubFor(get(urlEqualTo("/")) .withHeader("Accept", equalTo("application/xml")) .willReturn(aResponse() .withStatus(200) .withHeader("Content-Type", "application/xml") .withBody("<response type=\"SUCCESS\" msg=\"Kie Server info\">\n" + " <kie-server-info>\n" + " <version>1.2.3</version>\n" + " </kie-server-info>\n" + "</response>"))); stubFor(get(urlEqualTo("/containers")) .withHeader("Accept", equalTo("application/xml")) .willReturn(aResponse() .withStatus(200) .withHeader("Content-Type", "application/xml") .withBody("<response type=\"SUCCESS\" msg=\"List of created containers\">\n" + " <kie-containers>\n" + " <kie-container container-id=\"kjar1\" status=\"FAILED\"/>\n" + " <kie-container container-id=\"kjar2\" status=\"FAILED\"/>" + " </kie-containers>" + "</response>"))); KieServicesClient client = KieServicesFactory.newKieServicesClient(config); ServiceResponse<KieContainerResourceList> response = client.listContainers(); assertSuccess(response); assertEquals("Number of listed containers", 2, response.getResult().getContainers().size()); } @Test public void testCreateContainer() { stubFor(get(urlEqualTo("/")) .withHeader("Accept", equalTo("application/xml")) .willReturn(aResponse() .withStatus(200) .withHeader("Content-Type", "application/xml") .withBody("<response type=\"SUCCESS\" msg=\"Kie Server info\">\n" + " <kie-server-info>\n" + " <version>1.2.3</version>\n" + " </kie-server-info>\n" + "</response>"))); stubFor(put(urlEqualTo("/containers/kie1")) .withHeader("Accept", equalTo("application/xml")) .willReturn(aResponse() .withStatus(201) .withHeader("Content-Type", "application/xml") .withBody("<response type=\"SUCCESS\" msg=\"Container successfully deployed\">\n" + " <kie-container container-id=\"kie1\" status=\"STARTED\">\n" + " <release-id>\n" + " <group-id>org.kie.server.testing</group-id>\n" + " <artifact-id>kjar2</artifact-id>\n" + " <version>1.0-SNAPSHOT</version>\n" + " </release-id>\n" + " <resolved-release-id>\n" + " <group-id>org.kie.server.testing</group-id>\n" + " <artifact-id>kjar2</artifact-id>\n" + " <version>1.0-SNAPSHOT</version>\n" + " </resolved-release-id>\n" + " </kie-container>\n" + "</response>"))); KieServicesClient client = KieServicesFactory.newKieServicesClient(config); ReleaseId releaseId = new ReleaseId("org.kie.server.testing", "kjar2", "1.0-SNAPSHOT"); KieContainerResource resource = new KieContainerResource("kie1", releaseId); ServiceResponse<KieContainerResource> response = client.createContainer("kie1", resource); assertSuccess(response); KieContainerResource container = response.getResult(); assertEquals("Container id", "kie1", container.getContainerId()); assertEquals("Release id", releaseId, container.getReleaseId()); assertEquals("Resolved release Id", releaseId, container.getResolvedReleaseId()); } @Test public void testGetServerInfoWithSingletonExtraClass() { stubFor(get(urlEqualTo("/")) .withHeader("Accept", equalTo("application/json")) .willReturn(aResponse() .withStatus(200) .withHeader("Content-Type", "application/json") .withBody("{\n" + " \"type\" : \"SUCCESS\",\n" + " \"msg\" : \"Kie Server info\",\n" + " \"result\" : {\n" + " \"kie-server-info\" : {\n" + " \"version\" : \"1.2.3\"\n" + " }\n" + " }\n" + "}"))); config.setMarshallingFormat(MarshallingFormat.JSON); config.setExtraClasses(Collections.singleton(KieContainerStatus.class)); KieServicesClient client = KieServicesFactory.newKieServicesClient(config); ServiceResponse<KieServerInfo> response = client.getServerInfo(); assertSuccess(response); assertEquals("Server version", "1.2.3", response.getResult().getVersion()); } @Test public void testGetServerInfoBasicAuth() { stubFor(get(urlEqualTo("/")) .withHeader("Accept", equalTo("application/xml")) .willReturn(aResponse() .withStatus(200) .withHeader("Content-Type", "application/xml") .withBody("<response type=\"SUCCESS\" msg=\"Kie Server info\">\n" + " <kie-server-info>\n" + " <version>1.2.3</version>\n" + " </kie-server-info>\n" + "</response>"))); KieServicesClient client = KieServicesFactory.newKieServicesClient(config); ServiceResponse<KieServerInfo> response = client.getServerInfo(); assertSuccess(response); assertEquals("Server version", "1.2.3", response.getResult().getVersion()); verify(1, getRequestedFor(urlEqualTo("/")).withHeader("Authorization", equalTo("Basic bnVsbDpudWxs"))); verify(0, getRequestedFor(urlEqualTo("/")).withHeader("Authorization", equalTo("Bearer abcdefghijk"))); } @Test public void testGetServerInfoTokenAuth() { stubFor(get(urlEqualTo("/")) .withHeader("Accept", equalTo("application/xml")) .willReturn(aResponse() .withStatus(200) .withHeader("Content-Type", "application/xml") .withBody("<response type=\"SUCCESS\" msg=\"Kie Server info\">\n" + " <kie-server-info>\n" + " <version>1.2.3</version>\n" + " </kie-server-info>\n" + "</response>"))); config.setCredentialsProvider(new EnteredTokenCredentialsProvider("abcdefghijk")); KieServicesClient client = KieServicesFactory.newKieServicesClient(config); ServiceResponse<KieServerInfo> response = client.getServerInfo(); assertSuccess(response); assertEquals("Server version", "1.2.3", response.getResult().getVersion()); verify(1, getRequestedFor(urlEqualTo("/")).withHeader("Authorization", equalTo("Bearer abcdefghijk"))); verify(0, getRequestedFor(urlEqualTo("/")).withHeader("Authorization", equalTo("Basic bnVsbDpudWxs"))); } @Test public void testAdditionalHeaderViaClient() { stubFor(get(urlEqualTo("/")) .withHeader("Accept", equalTo("application/xml")) .willReturn(aResponse() .withStatus(200) .withHeader("Content-Type", "application/xml") .withBody("<response type=\"SUCCESS\" msg=\"Kie Server info\">\n" + " <kie-server-info>\n" + " <version>1.2.3</version>\n" + " </kie-server-info>\n" + "</response>"))); Map<String, String> headers = new HashMap<String, String>(); headers.put("X-KIE-First-Header", "first-value"); headers.put("X-KIE-Second-Header", "second value"); config.setHeaders(headers); KieServicesClient client = KieServicesFactory.newKieServicesClient(config); ServiceResponse<KieServerInfo> response = client.getServerInfo(); assertSuccess(response); assertEquals("Server version", "1.2.3", response.getResult().getVersion()); verify(1, getRequestedFor(urlEqualTo("/")).withHeader("X-KIE-First-Header", equalTo("first-value"))); verify(1, getRequestedFor(urlEqualTo("/")).withHeader("X-KIE-Second-Header", equalTo("second value"))); } @Test public void testGetReleaseId() { stubFor(get(urlEqualTo("/containers/" + CONTAINER_ID + "/release-id")) .withHeader("Accept", equalTo("application/xml")) .willReturn(aResponse() .withStatus(200) .withHeader("Content-Type", "application/xml") .withBody("<response type=\"SUCCESS\" msg=\"Release ID for " + CONTAINER_ID + "\">\n" + " <release-id>\n" + " <artifact-id>" + ARTIFACT_ID + "</artifact-id>\n" + " <group-id>" + GROUP_ID + "</group-id>\n" + " <version>" + VERSION + "</version>\n" + " </release-id>\n" + "</response>"))); KieServicesClient client = KieServicesFactory.newKieServicesClient(config); ServiceResponse<ReleaseId> response = client.getReleaseId(CONTAINER_ID); assertSuccess(response); ReleaseId releaseId = response.getResult(); assertNotNull(releaseId); assertEquals("Artifact ID", ARTIFACT_ID, releaseId.getArtifactId()); assertEquals("Group ID", GROUP_ID, releaseId.getGroupId()); assertEquals("Version", VERSION, releaseId.getVersion()); } // TODO create more tests for other operations private void assertSuccess(ServiceResponse<?> response) { assertEquals("Response type", ServiceResponse.ResponseType.SUCCESS, response.getType()); } }