1 package org.onap.vid.services;
3 import com.fasterxml.jackson.core.JsonParseException;
4 import org.apache.xmlbeans.SystemProperties;
5 import org.hamcrest.Matcher;
6 import org.mockito.InjectMocks;
7 import org.mockito.Mock;
8 import org.mockito.Mockito;
9 import org.mockito.MockitoAnnotations;
10 import org.onap.vid.aai.ExceptionWithRequestInfo;
11 import org.onap.vid.exceptions.GenericUncheckedException;
12 import org.onap.vid.exceptions.NotFoundException;
13 import org.onap.vid.model.probes.ErrorMetadata;
14 import org.onap.vid.model.probes.ExternalComponentStatus;
15 import org.onap.vid.model.probes.HttpRequestMetadata;
16 import org.onap.vid.mso.RestObject;
17 import org.onap.vid.mso.RestObjectWithRequestInfo;
18 import org.onap.vid.scheduler.SchedulerServiceImpl;
19 import org.springframework.http.HttpMethod;
20 import org.springframework.test.context.ContextConfiguration;
21 import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
22 import org.springframework.test.context.web.WebAppConfiguration;
23 import org.testng.annotations.AfterMethod;
24 import org.testng.annotations.BeforeTest;
25 import org.testng.annotations.Test;
27 import static org.hamcrest.MatcherAssert.assertThat;
28 import static org.hamcrest.Matchers.*;
29 import static org.mockito.Mockito.mock;
30 import static org.mockito.Mockito.when;
31 import static org.onap.vid.model.probes.ExternalComponentStatus.Component.SCHEDULER;
33 @ContextConfiguration(classes = {SystemProperties.class})
35 public class SchedulerServiceImplTest extends AbstractTestNGSpringContextTests {
38 private SchedulerServiceImpl schedulerService;
41 private ChangeManagementService changeManagementService;
45 public void initMocks() {
46 MockitoAnnotations.initMocks(this);
51 Mockito.reset(changeManagementService);
55 public void probeGetSchedulerChangeManegements_verifyGoodRequest(){
56 String responseString = "[" +
58 " \"vnfName\": \"dbox0001v\"," +
59 " \"status\": \"Triggered\"," +
60 " \"aotsChangeId\": \"CHG000000000001\"," +
61 " \"aotsApprovalStatus\": \"Approved\"," +
62 " \"groupId\": \"groupId\"," +
63 " \"dispatchTime\": \"2018-05-09T14:05:43Z\"," +
64 " \"msoRequestId\": \"2fb4edd1-01c4-4fee-bd4a-4ae6282aa213\"," +
65 " \"scheduleRequest\": {" +
67 " \"createDateTime\": \"2018-05-09T14:05:34Z\"," +
68 " \"optimizerAttemptsToSchedule\": 0," +
69 " \"optimizerTransactionId\": \"70f05563-6705-4be0-802a-8b6b78a69d63\"," +
70 " \"scheduleId\": \"70f05563-6705-4be0-802a-8b6b78a69d63\"," +
71 " \"scheduleName\": \"70f05563-6705-4be0-802a-8b6b78a69d63\"," +
72 " \"status\": \"Notifications Initiated\"," +
73 " \"userId\": \"wl849v\"," +
74 " \"domain\": \"ChangeManagement\"," +
75 " \"domainData\": [" +
78 " \"name\": \"WorkflowName\"," +
79 " \"value\": \"VNF In Place Software Update\"" +
83 " \"name\": \"CallbackUrl\"," +
84 " \"value\": \"https://vid-web-ete-new.ecomp.cci.att.com:8000/vid/change-management/workflow/\"" +
88 " \"name\": \"CallbackData\"," +
89 " \"value\": \"{\\\"requestType\\\":\\\"VNF In Place Software Update\\\",\\\"requestDetails\\\":[{\\\"vnfName\\\":\\\"dbox0001v\\\",\\\"vnfInstanceId\\\":\\\"815d38c0-b686-491c-9a74-0b49add524ca\\\",\\\"modelInfo\\\":{\\\"modelType\\\":\\\"vnf\\\",\\\"modelInvariantId\\\":\\\"59f4e0b2-e1b0-4e3b-bae3-e7b8c5d32985\\\",\\\"modelVersionId\\\":\\\"345643c1-3a51-423f-aac1-502e027d8dab\\\",\\\"modelName\\\":\\\"dbox0001v\\\",\\\"modelCustomizationId\\\":\\\"01ce23cb-d276-4d71-a5f1-f9d42d0df543\\\"},\\\"cloudConfiguration\\\":{\\\"lcpCloudRegionId\\\":\\\"dpa2b\\\",\\\"tenantId\\\":\\\"b60da4f71c1d4b35b8113d4eca6deaa1\\\"},\\\"requestInfo\\\":{\\\"source\\\":\\\"VID\\\",\\\"suppressRollback\\\":false,\\\"requestorId\\\":\\\"wl849v\\\"},\\\"relatedInstanceList\\\":[{\\\"relatedInstance\\\":{\\\"instanceId\\\":\\\"eb774932-e9fa-4c7f-bbc1-229b6b2b11e2\\\",\\\"modelInfo\\\":{\\\"modelType\\\":\\\"service\\\",\\\"modelInvariantId\\\":\\\"57dd617b-d64e-4441-a287-4d158b24ba65\\\",\\\"modelVersionId\\\":\\\"345643c1-3a51-423f-aac1-502e027d8dab\\\",\\\"modelName\\\":\\\"control_loop_dbe_svc\\\",\\\"modelVersion\\\":\\\"2.0\\\"}}}],\\\"requestParameters\\\":{\\\"payload\\\":\\\"{\\\\\\\"existing_software_version\\\\\\\":\\\\\\\"2\\\\\\\",\\\\\\\"new_software_version\\\\\\\":\\\\\\\"1\\\\\\\",\\\\\\\"operations_timeout\\\\\\\":\\\\\\\"3\\\\\\\"}\\\",\\\"testApi\\\":\\\"GR_API\\\"}}]}\"" +
92 " \"scheduleApprovals\": []" +
94 " \"schedulesId\": 0" +
98 final RestObject mockedRestObject = mock(RestObject.class);
100 final RestObjectWithRequestInfo restObjectWithRequestInfo = new RestObjectWithRequestInfo(HttpMethod.GET, "my pretty url", mockedRestObject, 200, responseString);
102 when(changeManagementService.getSchedulerChangeManagementsWithRequestInfo()).thenReturn(
103 restObjectWithRequestInfo
106 final ExternalComponentStatus schedulerStatus = schedulerService.probeGetSchedulerChangeManagements();
108 assertSchedulerStatus(schedulerStatus, true);
109 assertMetadata(schedulerStatus, 200, startsWith(responseString.substring(0, 400)), "my pretty url", equalTo("OK"));
113 public void probeGetSchedulerChangeManegements_response200OkButEmptyPayload_shouldDescribeCorrectly() {
114 String responseString = "" +
117 final RestObject mockedRestObject = mock(RestObject.class);
119 final RestObjectWithRequestInfo restObjectWithRequestInfo = new RestObjectWithRequestInfo(HttpMethod.GET, "my pretty url", mockedRestObject, 200, responseString);
121 when(changeManagementService.getSchedulerChangeManagementsWithRequestInfo()).thenReturn(
122 restObjectWithRequestInfo
125 final ExternalComponentStatus schedulerStatus = schedulerService.probeGetSchedulerChangeManagements();
127 assertSchedulerStatus(schedulerStatus, true);
129 assertMetadata(schedulerStatus, 200, equalTo(responseString), "my pretty url", containsString("OK"));
133 public void probeGetSchedulerChangeManegements_response200OkButInvalidPayload_shouldDescribeCorrectly() {
134 String responseString = "this payload is an invalid json";
136 final RestObject mockedRestObject = mock(RestObject.class);
138 final RestObjectWithRequestInfo restObjectWithRequestInfo = new RestObjectWithRequestInfo(HttpMethod.GET, "my pretty url", mockedRestObject, 200, responseString);
140 when(changeManagementService.getSchedulerChangeManagementsWithRequestInfo()).thenThrow(new ExceptionWithRequestInfo(HttpMethod.GET,
141 "my pretty url", responseString, 200, new JsonParseException(null, "Unrecognized token")));
143 final ExternalComponentStatus schedulerStatus = schedulerService.probeGetSchedulerChangeManagements();
145 assertSchedulerStatus(schedulerStatus, false);
147 assertMetadata(schedulerStatus, 200, equalTo(responseString), "my pretty url", containsString("JsonParseException: Unrecognized token"));
151 public void probeGetSchedulerChangeManegements_throwNotFoundException_resultIsWithErrorMetadata() {
152 when(changeManagementService.getSchedulerChangeManagementsWithRequestInfo()).thenThrow(
153 new GenericUncheckedException(new NotFoundException("Get with status = 400")));
155 final ExternalComponentStatus schedulerStatus = schedulerService.probeGetSchedulerChangeManagements();
157 assertThat(schedulerStatus.isAvailable(), is(false));
158 assertThat(schedulerStatus.getComponent(), is(SCHEDULER));
159 assertThat(schedulerStatus.getMetadata(), instanceOf(ErrorMetadata.class));
161 final ErrorMetadata metadata = ((ErrorMetadata) schedulerStatus.getMetadata());
162 org.junit.Assert.assertThat(metadata.getDescription(), containsString("NotFoundException: Get with status = 400"));
165 private void assertSchedulerStatus(ExternalComponentStatus schedulerStatus, boolean isAvailable) {
166 assertThat(schedulerStatus.isAvailable(), is(isAvailable));
167 assertThat(schedulerStatus.getComponent(), is(SCHEDULER));
168 assertThat(schedulerStatus.getMetadata(), instanceOf(HttpRequestMetadata.class));
171 private void assertMetadata(ExternalComponentStatus schedulerStatus, int httpCode, Matcher<String> rawData, String url, Matcher<String> descriptionMatcher) {
172 final HttpRequestMetadata metadata = ((HttpRequestMetadata) schedulerStatus.getMetadata());
173 org.junit.Assert.assertThat(metadata.getHttpMethod(), equalTo(HttpMethod.GET));
174 org.junit.Assert.assertThat(metadata.getHttpCode(), equalTo(httpCode));
175 org.junit.Assert.assertThat(metadata.getUrl(), equalTo(url));
176 org.junit.Assert.assertThat(metadata.getRawData(), rawData);
177 org.junit.Assert.assertThat(metadata.getDescription(), descriptionMatcher);