From 48cad37a5c9906b24ae75532d45fb7fa21a32a52 Mon Sep 17 00:00:00 2001 From: Arthur Martella Date: Mon, 19 Mar 2018 12:52:13 -0400 Subject: Add some initial unit test to cloudify client See also: MSO-2317 R1806 Change-Id: Ia5539fe2adc1e8c3159bc767c2b7eaa0114094f1 Issue-ID: SO-489 Signed-off-by: Arthur Martella --- .../openecomp/mso/cloudify/v3/model/Blueprint.java | 7 +- .../mso/cloudify/v3/model/Deployment.java | 22 ++- .../mso/cloudify/v3/model/DeploymentOutputs.java | 9 +- .../openecomp/mso/cloudify/v3/model/Metadata.java | 27 ---- .../mso/cloudify/v3/model/Pagination.java | 51 +++++++ .../org/openecomp/mso/cloudify/BeanMultiTest.java | 70 ++++++++++ .../connector/http/HttpClientConnectorTest.java | 150 +++++++++++++++++++++ 7 files changed, 295 insertions(+), 41 deletions(-) create mode 100644 cloudify-client/src/main/java/org/openecomp/mso/cloudify/v3/model/Pagination.java create mode 100644 cloudify-client/src/test/java/org/openecomp/mso/cloudify/BeanMultiTest.java create mode 100644 cloudify-client/src/test/java/org/openecomp/mso/cloudify/connector/http/HttpClientConnectorTest.java (limited to 'cloudify-client/src') diff --git a/cloudify-client/src/main/java/org/openecomp/mso/cloudify/v3/model/Blueprint.java b/cloudify-client/src/main/java/org/openecomp/mso/cloudify/v3/model/Blueprint.java index a33c5206f2..468195909f 100644 --- a/cloudify-client/src/main/java/org/openecomp/mso/cloudify/v3/model/Blueprint.java +++ b/cloudify-client/src/main/java/org/openecomp/mso/cloudify/v3/model/Blueprint.java @@ -57,10 +57,6 @@ public class Blueprint implements Serializable { @JsonProperty("updated_at") private Date updatedAt; - // ObjectMapper instance to parse Json stack outputs - @JsonIgnore - private static ObjectMapper mapper = new ObjectMapper(); - public Date getCreatedAt() { return createdAt; } @@ -124,6 +120,9 @@ public class Blueprint implements Serializable { */ public T getMapValue (Map map, String key, Class type) { + + ObjectMapper mapper = new ObjectMapper(); + if (map.containsKey(key)) { try { String s = mapper.writeValueAsString(map.get(key)); diff --git a/cloudify-client/src/main/java/org/openecomp/mso/cloudify/v3/model/Deployment.java b/cloudify-client/src/main/java/org/openecomp/mso/cloudify/v3/model/Deployment.java index 453dd3f692..515e8a0be1 100644 --- a/cloudify-client/src/main/java/org/openecomp/mso/cloudify/v3/model/Deployment.java +++ b/cloudify-client/src/main/java/org/openecomp/mso/cloudify/v3/model/Deployment.java @@ -78,10 +78,22 @@ public class Deployment implements Serializable { @JsonProperty("workflows") private List workflows; - // ObjectMapper instance to parse Json object outputs - @JsonIgnore - private static ObjectMapper mapper = new ObjectMapper(); - + public List getPolicyTriggers() { + return policyTriggers; + } + + public void setPolicyTriggers(List policyTriggers) { + this.policyTriggers = policyTriggers; + } + + public List getPolicyTypes() { + return policyTypes; + } + + public void setPolicyTypes(List policyTypes) { + this.policyTypes = policyTypes; + } + public String getBlueprintId() { return blueprintId; } @@ -320,6 +332,8 @@ public class Deployment implements Serializable { */ public T getMapValue (Map map, String key, Class type) { + + ObjectMapper mapper = new ObjectMapper(); if (map.containsKey(key)) { try { String s = mapper.writeValueAsString(map.get(key)); diff --git a/cloudify-client/src/main/java/org/openecomp/mso/cloudify/v3/model/DeploymentOutputs.java b/cloudify-client/src/main/java/org/openecomp/mso/cloudify/v3/model/DeploymentOutputs.java index 11fe7faae0..26d2ae20bc 100644 --- a/cloudify-client/src/main/java/org/openecomp/mso/cloudify/v3/model/DeploymentOutputs.java +++ b/cloudify-client/src/main/java/org/openecomp/mso/cloudify/v3/model/DeploymentOutputs.java @@ -41,12 +41,6 @@ public class DeploymentOutputs implements Serializable { @JsonProperty("outputs") private Map outputs = null; - - // ObjectMapper instance to parse Json object outputs - @JsonIgnore - private static ObjectMapper mapper = new ObjectMapper(); - - public Map getOutputs() { return this.outputs; } @@ -67,6 +61,9 @@ public class DeploymentOutputs implements Serializable { */ public T getMapValue (Map map, String key, Class type) { + + ObjectMapper mapper = new ObjectMapper(); + if (map.containsKey(key)) { try { String s = mapper.writeValueAsString(map.get(key)); diff --git a/cloudify-client/src/main/java/org/openecomp/mso/cloudify/v3/model/Metadata.java b/cloudify-client/src/main/java/org/openecomp/mso/cloudify/v3/model/Metadata.java index d44e92b1bc..31e3b0dbe3 100644 --- a/cloudify-client/src/main/java/org/openecomp/mso/cloudify/v3/model/Metadata.java +++ b/cloudify-client/src/main/java/org/openecomp/mso/cloudify/v3/model/Metadata.java @@ -54,31 +54,4 @@ public class Metadata implements Serializable { this.pagination = pagination; } - public class Pagination { - @JsonProperty("total") - private int total; - @JsonProperty("offset") - private int offset; - @JsonProperty("size") - private int size; - - public int getTotal() { - return total; - } - public void setTotal(int total) { - this.total = total; - } - public int getOffset() { - return offset; - } - public void setOffset(int offset) { - this.offset = offset; - } - public int getSize() { - return size; - } - public void setSize(int size) { - this.size = size; - } - } } diff --git a/cloudify-client/src/main/java/org/openecomp/mso/cloudify/v3/model/Pagination.java b/cloudify-client/src/main/java/org/openecomp/mso/cloudify/v3/model/Pagination.java new file mode 100644 index 0000000000..a79f053ca2 --- /dev/null +++ b/cloudify-client/src/main/java/org/openecomp/mso/cloudify/v3/model/Pagination.java @@ -0,0 +1,51 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.mso.cloudify.v3.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class Pagination { + @JsonProperty("total") + private int total; + @JsonProperty("offset") + private int offset; + @JsonProperty("size") + private int size; + + public int getTotal() { + return total; + } + public void setTotal(int total) { + this.total = total; + } + public int getOffset() { + return offset; + } + public void setOffset(int offset) { + this.offset = offset; + } + public int getSize() { + return size; + } + public void setSize(int size) { + this.size = size; + } +} \ No newline at end of file diff --git a/cloudify-client/src/test/java/org/openecomp/mso/cloudify/BeanMultiTest.java b/cloudify-client/src/test/java/org/openecomp/mso/cloudify/BeanMultiTest.java new file mode 100644 index 0000000000..11a74e8c7d --- /dev/null +++ b/cloudify-client/src/test/java/org/openecomp/mso/cloudify/BeanMultiTest.java @@ -0,0 +1,70 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.mso.cloudify; + +import org.junit.Before; +import org.junit.Test; + +import com.openpojo.reflection.PojoClass; +import com.openpojo.reflection.PojoClassFilter; +import com.openpojo.reflection.filters.FilterEnum; +import com.openpojo.reflection.impl.PojoClassFactory; +import com.openpojo.validation.Validator; +import com.openpojo.validation.ValidatorBuilder; +import com.openpojo.validation.rule.impl.GetterMustExistRule; +import com.openpojo.validation.rule.impl.SetterMustExistRule; +import com.openpojo.validation.test.impl.GetterTester; +import com.openpojo.validation.test.impl.SetterTester; + +public class BeanMultiTest { + + Validator validator; + PojoClassFilter enumFilter; + private PojoClassFilter filterTestClasses = new FilterTestClasses(); + + @Before + public void setup(){ + enumFilter = new FilterEnum(); + validator = ValidatorBuilder.create() + .with(new SetterMustExistRule(), + new GetterMustExistRule()) + .with(new SetterTester(), + new GetterTester()) + .build(); + } + @Test + public void validateBeansMsoApihandlerBeans() { + try{ + validator.validate("org.openecomp.mso.cloudify.v3.model",enumFilter); + } catch (AssertionError e) { + System.err.println("!!!!!!!!!"); + e.printStackTrace(); + System.err.println("!!!!!!!!!"); + throw e; + } + } + + private static class FilterTestClasses implements PojoClassFilter { + public boolean include(PojoClass pojoClass) { + return !pojoClass.getSourcePath().contains("/src/test/java"); + } + } +} \ No newline at end of file diff --git a/cloudify-client/src/test/java/org/openecomp/mso/cloudify/connector/http/HttpClientConnectorTest.java b/cloudify-client/src/test/java/org/openecomp/mso/cloudify/connector/http/HttpClientConnectorTest.java new file mode 100644 index 0000000000..b768c93168 --- /dev/null +++ b/cloudify-client/src/test/java/org/openecomp/mso/cloudify/connector/http/HttpClientConnectorTest.java @@ -0,0 +1,150 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.mso.cloudify.connector.http; + +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.post; +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; +import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig; + +import com.github.tomakehurst.wiremock.junit.WireMockRule; +import static com.github.tomakehurst.wiremock.client.WireMock.get; +import static com.github.tomakehurst.wiremock.client.WireMock.delete; +import static com.github.tomakehurst.wiremock.client.WireMock.put; +import static com.github.tomakehurst.wiremock.client.WireMock.equalTo; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; +import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.verify; +import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.putRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.deleteRequestedFor; +import org.apache.http.HttpStatus; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import static org.hamcrest.CoreMatchers.*; +import org.openecomp.mso.cloudify.base.client.CloudifyRequest; +import org.openecomp.mso.cloudify.base.client.CloudifyResponseException; +import org.openecomp.mso.cloudify.base.client.HttpMethod; +import org.openecomp.mso.cloudify.v3.model.Deployment; + +public class HttpClientConnectorTest { + + @Rule + public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().dynamicPort()); + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Test + public void sunnyDay_POST(){ + wireMockRule.stubFor(post(urlPathEqualTo("/testUrl")).willReturn(aResponse() + .withHeader("Content-Type", "application/json").withBody("TEST").withStatus(HttpStatus.SC_OK))); + int port = wireMockRule.port(); + HttpClientConnector conector = new HttpClientConnector(); + CloudifyRequest request = new CloudifyRequest(); + Deployment deployment = new Deployment(); + deployment.setId("id"); + request.entity(deployment, "application/json"); + request.endpoint("http://localhost:"+port+"/testUrl"); + request.setBasicAuthentication("USER","PASSWORD"); + request.header("Content-Type","application/json"); + request.method(HttpMethod.POST); + conector.request(request); + verify(postRequestedFor(urlEqualTo("/testUrl"))); + } + + + @Test + public void sunnyDay_GET(){ + wireMockRule.stubFor(get(urlPathEqualTo("/testUrl")).willReturn(aResponse() + .withHeader("Content-Type", "application/json").withBody("TEST").withStatus(HttpStatus.SC_OK))); + int port = wireMockRule.port(); + HttpClientConnector conector = new HttpClientConnector(); + CloudifyRequest request = new CloudifyRequest(); + request.endpoint("http://localhost:"+port+"/testUrl"); + request.setBasicAuthentication("USER","PASSWORD"); + request.method(HttpMethod.GET); + conector.request(request); + verify(getRequestedFor(urlEqualTo("/testUrl"))); + } + + @Test + public void sunnyDay_PUT(){ + wireMockRule.stubFor(put(urlPathEqualTo("/testUrl")).willReturn(aResponse() + .withHeader("Content-Type", "application/json").withBody("TEST").withStatus(HttpStatus.SC_OK))); + int port = wireMockRule.port(); + HttpClientConnector conector = new HttpClientConnector(); + CloudifyRequest request = new CloudifyRequest(); + request.endpoint("http://localhost:"+port+"/testUrl"); + request.setBasicAuthentication("USER","PASSWORD"); + request.method(HttpMethod.PUT); + conector.request(request); + verify(putRequestedFor(urlEqualTo("/testUrl"))); + } + + + @Test + public void sunnyDay_DELETE(){ + wireMockRule.stubFor(delete(urlPathEqualTo("/testUrl")).willReturn(aResponse() + .withHeader("Content-Type", "application/json").withBody("TEST").withStatus(HttpStatus.SC_OK))); + int port = wireMockRule.port(); + HttpClientConnector conector = new HttpClientConnector(); + CloudifyRequest request = new CloudifyRequest(); + request.endpoint("http://localhost:"+port+"/testUrl"); + request.setBasicAuthentication("USER","PASSWORD"); + request.method(HttpMethod.DELETE); + conector.request(request); + verify(deleteRequestedFor(urlEqualTo("/testUrl"))); + } + + + @Test + public void rainydDay_PATCH(){ + thrown.expect(HttpClientException.class); + thrown.expectMessage("Unrecognized HTTP Method: PATCH"); + HttpClientConnector conector = new HttpClientConnector(); + CloudifyRequest request = new CloudifyRequest(); + request.endpoint("http://localhost:123123/testUrl"); + request.setBasicAuthentication("USER","PASSWORD"); + request.method(HttpMethod.PATCH); + conector.request(request); + + } + + + @Test + public void rainydDay_RunTimeException(){ + wireMockRule.stubFor(post(urlEqualTo("/503")).willReturn( + aResponse().withStatus(503).withHeader("Content-Type", "text/plain").withBody("failure"))); + thrown.expect(RuntimeException.class); + thrown.expectMessage("Unexpected client exception"); + HttpClientConnector conector = new HttpClientConnector(); + CloudifyRequest request = new CloudifyRequest(); + request.endpoint("http://localhost:123123/503"); + request.setBasicAuthentication("USER","PASSWORD"); + request.method(HttpMethod.POST); + conector.request(request); + + } + + +} \ No newline at end of file -- cgit 1.2.3-korg