diff options
2 files changed, 138 insertions, 20 deletions
diff --git a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/impl/ChefAdapterImpl.java b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/impl/ChefAdapterImpl.java index 9853bcff9..f689668bb 100644 --- a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/impl/ChefAdapterImpl.java +++ b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/impl/ChefAdapterImpl.java @@ -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); } } diff --git a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/test/java/org/onap/appc/adapter/chef/impl/ChefAdapterImplJobPusherTest.java b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/test/java/org/onap/appc/adapter/chef/impl/ChefAdapterImplJobPusherTest.java index 633fe01e1..f4d19e22b 100644 --- a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/test/java/org/onap/appc/adapter/chef/impl/ChefAdapterImplJobPusherTest.java +++ b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/test/java/org/onap/appc/adapter/chef/impl/ChefAdapterImplJobPusherTest.java @@ -19,12 +19,15 @@ */ 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(); + } } |