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 <amartell@research.att.com>
diff --git a/cloudify-client/pom.xml b/cloudify-client/pom.xml
index 61798c3..9b2ca39 100644
--- a/cloudify-client/pom.xml
+++ b/cloudify-client/pom.xml
@@ -35,12 +35,36 @@
 		<dependency>
 			<groupId>org.apache.httpcomponents</groupId>
 			<artifactId>httpcore</artifactId>
-			<version>4.3.1</version>
+<!--			<version>4.3.1</version> -->
 		</dependency>
 		<dependency>
 			<groupId>org.apache.httpcomponents</groupId>
 			<artifactId>httpclient</artifactId>
-			<version>4.5.5</version>
+<!--			<version>4.5.5</version> -->
+		</dependency>
+		<dependency>
+			<groupId>org.hamcrest</groupId>
+			<artifactId>hamcrest-core</artifactId>
+			<version>1.3</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.hamcrest</groupId>
+			<artifactId>hamcrest-library</artifactId>
+			<version>1.3</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.mockito</groupId>
+			<artifactId>mockito-all</artifactId>
+			<version>1.9.5</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.11</version>
+			<scope>test</scope>
 		</dependency>
         <dependency>
             <groupId>commons-lang</groupId>
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 a33c520..4681959 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 @@
     @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 <T> T getMapValue (Map<String,Object> map, String key, Class<T> 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 453dd3f..515e8a0 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 @@
     @JsonProperty("workflows")
     private List<Workflow> workflows;
 
-    // ObjectMapper instance to parse Json object outputs
-    @JsonIgnore
-	private static ObjectMapper mapper = new ObjectMapper();
-
+    public List<Object> getPolicyTriggers() {
+	return policyTriggers;
+    }
+    
+    public void setPolicyTriggers(List<Object> policyTriggers) {
+	this.policyTriggers = policyTriggers;
+    }
+    
+    public List<Object> getPolicyTypes() {
+	return policyTypes;
+    }
+    
+    public void setPolicyTypes(List<Object> policyTypes) {
+	this.policyTypes = policyTypes;
+    }
+    
     public String getBlueprintId() {
         return blueprintId;
     }
@@ -320,6 +332,8 @@
 	 */
 	public <T> T getMapValue (Map<String,Object> map, String key, Class<T> 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 11fe7fa..26d2ae2 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 @@
     @JsonProperty("outputs")
     private Map<String, Object> outputs = null;
     
-
-    // ObjectMapper instance to parse Json object outputs
-    @JsonIgnore
-	private static ObjectMapper mapper = new ObjectMapper();
-
-
     public Map<String, Object> getOutputs() {
     	return this.outputs;
     }
@@ -67,6 +61,9 @@
 	 */
 	public <T> T getMapValue (Map<String,Object> map, String key, Class<T> 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 d44e92b..31e3b0d 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 @@
 		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 0000000..a79f053
--- /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 0000000..11a74e8
--- /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 0000000..b768c93
--- /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<Deployment> request = new CloudifyRequest<Deployment>();
+		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<Deployment> request = new CloudifyRequest<Deployment>();
+		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<Deployment> request = new CloudifyRequest<Deployment>();
+		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<Deployment> request = new CloudifyRequest<Deployment>();
+		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<Deployment> request = new CloudifyRequest<Deployment>();
+		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<Deployment> request = new CloudifyRequest<Deployment>();
+		request.endpoint("http://localhost:123123/503");
+		request.setBasicAuthentication("USER","PASSWORD");
+		request.method(HttpMethod.POST);
+		conector.request(request);
+	
+	}
+
+
+}
\ No newline at end of file