ChefAdapterImpl Junits 21/36221/5
authorMichal Kabaj <michal.kabaj@nokia.com>
Fri, 16 Mar 2018 13:53:36 +0000 (14:53 +0100)
committerTakamune Cho <tc012c@att.com>
Tue, 20 Mar 2018 12:49:47 +0000 (12:49 +0000)
- Added new Unit tests for ChefAdapterImpl checkPushJob method
to class ChefAdapterImplJobPusherTest
- Added param check in implementation method
- Small refactor of nested conditions for improved readability

Change-Id: Id65b897535874eea6aafda66b7ac227832446cf4
Issue-ID: APPC-437
Signed-off-by: Michal Kabaj <michal.kabaj@nokia.com>
appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/impl/ChefAdapterImpl.java
appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/test/java/org/onap/appc/adapter/chef/impl/ChefAdapterImplJobPusherTest.java

index 9853bcf..f689668 100644 (file)
@@ -565,7 +565,7 @@ public class ChefAdapterImpl implements ChefAdapter {
             String jobID = params.get("jobid");
             String retry = params.get("retryTimes");
             String intrva = params.get("retryInterval");
-            if (StringUtils.isNotBlank(retry) && StringUtils.isNotBlank(intrva)) {
+            if (StringUtils.isNotBlank(jobID) && StringUtils.isNotBlank(retry) && StringUtils.isNotBlank(intrva)) {
 
                 int retryTimes = Integer.parseInt(params.get("retryTimes"));
                 int retryInterval = Integer.parseInt(params.get("retryInterval"));
@@ -604,14 +604,12 @@ public class ChefAdapterImpl implements ChefAdapter {
         if ("complete".equals(status)) {
             svcLogic.setAttribute(CHEF_SERVER_RESULT_CODE_STR, "200");
             svcLogic.setAttribute(CHEF_SERVER_RESULT_MSG_STR, message);
+        } else if ("running".equals(status)) {
+            svcLogic.setAttribute(CHEF_SERVER_RESULT_CODE_STR, "202");
+            svcLogic.setAttribute(CHEF_SERVER_RESULT_MSG_STR, "chef client runtime out");
         } else {
-            if ("running".equals(status)) {
-                svcLogic.setAttribute(CHEF_SERVER_RESULT_CODE_STR, "202");
-                svcLogic.setAttribute(CHEF_SERVER_RESULT_MSG_STR, "chef client runtime out");
-            } else {
-                svcLogic.setAttribute(CHEF_SERVER_RESULT_CODE_STR, "500");
-                svcLogic.setAttribute(CHEF_SERVER_RESULT_MSG_STR, message);
-            }
+            svcLogic.setAttribute(CHEF_SERVER_RESULT_CODE_STR, "500");
+            svcLogic.setAttribute(CHEF_SERVER_RESULT_MSG_STR, message);
         }
     }
 
index 633fe01..f4d19e2 100644 (file)
  */
 package org.onap.appc.adapter.chef.impl;
 
+import static com.google.common.collect.Maps.immutableEntry;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
 import static org.mockito.BDDMockito.given;
 
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
 import java.util.Map;
+import java.util.Map.Entry;
 import org.apache.http.HttpStatus;
 import org.junit.Before;
 import org.junit.Test;
@@ -51,12 +54,6 @@ public class ChefAdapterImplJobPusherTest {
     private static final String ORGANIZATIONS = "onap";
     private static final String ACTION_PARAM = "/pushy/jobs";
     private static final String REQUEST_BODY_DATA = "requestBodyData";
-    private static final Map<String, String> PARAMS = ImmutableMap
-        .of("username", USERNAME,
-            "serverAddress", SERVER_ADDRESS,
-            "organizations", ORGANIZATIONS,
-            "chefAction", ACTION_PARAM,
-            "pushRequest", REQUEST_BODY_DATA);
     private static final String JOB_ID = "jobID";
 
     @Mock
@@ -91,13 +88,16 @@ public class ChefAdapterImplJobPusherTest {
 
     public void assertSuccessfulPostCallForStatus(int expectedHttpStatus) throws SvcLogicException {
         // GIVEN
+        Map<String, String> params = givenInputParams(
+            immutableEntry("chefAction", ACTION_PARAM),
+            immutableEntry("pushRequest", REQUEST_BODY_DATA));
         given(chefApiClientFactory.create("https://localhost/organizations/onap", ORGANIZATIONS, USERNAME,
             CLIENT_PRIVATE_KEY_PATH)).willReturn(chefApiClient);
         given(chefApiClient.post(ACTION_PARAM, REQUEST_BODY_DATA))
             .willReturn(ChefResponse.create(expectedHttpStatus, EXPECTED_RESPONSE_MSG));
 
         // WHEN
-        chefAdapterFactory.create().pushJob(PARAMS, svcLogicContext);
+        chefAdapterFactory.create().pushJob(params, svcLogicContext);
 
         // THEN
         assertThat(svcLogicContext.getStatus()).isEqualTo("success");
@@ -109,19 +109,139 @@ public class ChefAdapterImplJobPusherTest {
     @Test
     public void pushJob_shouldHandleAllOccurringExceptions_duringMethodExecution() {
         // GIVEN
-        String EXPECTED_ERROR_MSG = "Something went wrong";
+        Map<String, String> params = givenInputParams();
+        String expectedErrorMessage = "Something went wrong";
         given(chefApiClientFactory.create("https://localhost/organizations/onap", ORGANIZATIONS, USERNAME,
-            CLIENT_PRIVATE_KEY_PATH)).willThrow(new NullPointerException(EXPECTED_ERROR_MSG));
+            CLIENT_PRIVATE_KEY_PATH)).willThrow(new NullPointerException(expectedErrorMessage));
 
         // WHEN // THEN
         assertThatExceptionOfType(SvcLogicException.class)
-            .isThrownBy(() -> chefAdapterFactory.create().pushJob(PARAMS, svcLogicContext))
-            .withMessage("Chef Adapter error:" + EXPECTED_ERROR_MSG);
+            .isThrownBy(() -> chefAdapterFactory.create().pushJob(params, svcLogicContext))
+            .withMessage("Chef Adapter error:" + expectedErrorMessage);
 
         assertThat(svcLogicContext.getStatus()).isEqualTo("failure");
         assertThat(svcLogicContext.getAttribute(RESULT_CODE_ATTR_KEY))
             .isEqualTo(Integer.toString(HttpStatus.SC_UNAUTHORIZED));
-        assertThat(svcLogicContext.getAttribute(RESULT_MESSAGE_ATTR_KEY)).isEqualTo(EXPECTED_ERROR_MSG);
+        assertThat(svcLogicContext.getAttribute(RESULT_MESSAGE_ATTR_KEY)).isEqualTo(expectedErrorMessage);
         assertThat(svcLogicContext.getAttribute(JOB_ID)).isBlank();
     }
+
+    @Test
+    public void checkPushJob_shouldSetFailStatusAndMsgInContext_andThrowException_whenRetryTimesParamIsMissing() {
+        // GIVEN
+        Map<String, String> params = givenInputParams(
+            immutableEntry("retryInterval", "1"),
+            immutableEntry("jobid", "666"));
+
+        // WHEN // THEN
+        assertIfInputParamsAreValidated(params);
+    }
+
+    @Test
+    public void checkPushJob_shouldSetFailStatusAndMsgInContext_andThrowException_whenRetryIntervalParamIsMissing() {
+        // GIVEN
+        Map<String, String> params = givenInputParams(
+            immutableEntry("retryTimes", "4"),
+            immutableEntry("jobid", "666"));
+
+        // WHEN // THEN
+        assertIfInputParamsAreValidated(params);
+    }
+
+    @Test
+    public void checkPushJob_shouldSetFailStatusAndMsgInContext_andThrowException_whenJobIdParamIsMissing() {
+        // GIVEN
+        Map<String, String> params = givenInputParams(
+            immutableEntry("retryTimes", "4"),
+            immutableEntry("retryInterval", "1"));
+        assertIfInputParamsAreValidated(params);
+    }
+
+    public void assertIfInputParamsAreValidated(Map<String, String> params) {
+        // WHEN // THEN
+        assertThatExceptionOfType(SvcLogicException.class)
+            .isThrownBy(() -> chefAdapterFactory.create().checkPushJob(params, svcLogicContext))
+            .withMessage("Chef Adapter error:" + "Missing Mandatory param(s) retryTimes , retryInterval ");
+
+        assertThat(svcLogicContext.getStatus()).isEqualTo("failure");
+        assertThat(svcLogicContext.getAttribute(RESULT_CODE_ATTR_KEY))
+            .isEqualTo(Integer.toString(HttpStatus.SC_UNAUTHORIZED));
+        assertThat(svcLogicContext.getAttribute(RESULT_MESSAGE_ATTR_KEY))
+            .isEqualTo("Missing Mandatory param(s) retryTimes , retryInterval ");
+    }
+
+    @Test
+    public void checkPushJob_shouldCheckJobStatusOnlyOnce_withoutAdditionalRetries_whenFirstReturnedJobStatusIs_Complete()
+        throws SvcLogicException {
+        String expectedHttpStatus = Integer.toString(HttpStatus.SC_OK);
+        String expectedMessage = "{status:complete}";
+
+        assertCheckJobStatusFor(
+            expectedHttpStatus,
+            expectedMessage,
+            ChefResponse.create(HttpStatus.SC_OK, "{status:complete}"),
+            ChefResponse.create(HttpStatus.SC_OK, "{status:running}"));
+    }
+
+    @Test
+    public void checkPushJob_shouldCheckJobStatusExpectedNumberOf_ThreeRetryTimes_whenEachReturnedStatusIs_Running()
+        throws SvcLogicException {
+        String expectedHttpStatus = Integer.toString(HttpStatus.SC_ACCEPTED);
+        String expectedMessage = "chef client runtime out";
+
+        assertCheckJobStatusFor(
+            expectedHttpStatus,
+            expectedMessage,
+            ChefResponse.create(HttpStatus.SC_OK, "{status:running}"),
+            ChefResponse.create(HttpStatus.SC_OK, "{status:running}"),
+            ChefResponse.create(HttpStatus.SC_OK, "{status:running}"));
+    }
+
+    @Test
+    public void checkPushJob_shouldCheckJobStatusOnlyOnce_withoutAdditionalRetries_whenFirstReturnedJobStatusIsNot_Running()
+        throws SvcLogicException {
+
+        String expectedHttpStatus = Integer.toString(HttpStatus.SC_INTERNAL_SERVER_ERROR);
+        String expectedMessage = "{status:unexpectedStatus}";
+
+        assertCheckJobStatusFor(
+            expectedHttpStatus,
+            expectedMessage,
+            ChefResponse.create(HttpStatus.SC_OK, "{status:unexpectedStatus}"),
+            ChefResponse.create(HttpStatus.SC_OK, "{status:running}"));
+    }
+
+    public void assertCheckJobStatusFor(String expectedHttpStatus, String expectedMessage, ChefResponse firstResponse,
+        ChefResponse... nextResponses) throws SvcLogicException {
+
+        // GIVEN
+        Map<String, String> params = givenInputParams(
+            immutableEntry("jobid", "666"),
+            immutableEntry("retryTimes", "3"),
+            immutableEntry("retryInterval", "1"));
+        given(chefApiClientFactory.create("https://localhost/organizations/onap", ORGANIZATIONS, USERNAME,
+            CLIENT_PRIVATE_KEY_PATH)).willReturn(chefApiClient);
+        given(chefApiClient.get(ACTION_PARAM + "/" + params.get("jobid")))
+            .willReturn(firstResponse, nextResponses);
+
+        // WHEN
+        chefAdapterFactory.create().checkPushJob(params, svcLogicContext);
+
+        // THEN
+        assertThat(svcLogicContext.getAttribute(RESULT_CODE_ATTR_KEY))
+            .isEqualTo(expectedHttpStatus);
+        assertThat(svcLogicContext.getAttribute(RESULT_MESSAGE_ATTR_KEY)).isEqualTo(expectedMessage);
+    }
+
+    private Map<String, String> givenInputParams(Entry<String, String>... entries) {
+        Builder<String, String> paramsBuilder = ImmutableMap.builder();
+        paramsBuilder.put("username", USERNAME)
+            .put("serverAddress", SERVER_ADDRESS)
+            .put("organizations", ORGANIZATIONS);
+
+        for (Entry<String, String> entry : entries) {
+            paramsBuilder.put(entry);
+        }
+        return paramsBuilder.build();
+    }
 }