1 package org.onap.sdnc.apps.ms.sanitytest.controllers;
3 import java.text.DateFormat;
4 import java.text.SimpleDateFormat;
6 import java.util.LinkedList;
8 import java.util.Optional;
9 import java.util.Properties;
10 import java.util.TimeZone;
12 import javax.servlet.http.HttpServletRequest;
13 import javax.validation.Valid;
15 import com.fasterxml.jackson.core.JsonProcessingException;
16 import com.fasterxml.jackson.databind.ObjectMapper;
18 import org.onap.ccsdk.apps.services.RestException;
19 import org.onap.ccsdk.apps.services.SvcLogicFactory;
20 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
21 import org.onap.ccsdk.sli.core.sli.SvcLogicException;
22 import org.onap.ccsdk.sli.core.sli.SvcLogicLoader;
23 import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicServiceBase;
24 import org.onap.sdnc.apps.ms.sanitytest.swagger.OperationsApi;
25 import org.onap.sdnc.apps.ms.sanitytest.swagger.model.SanitytestApiInputBodyparam;
26 import org.onap.sdnc.apps.ms.sanitytest.swagger.model.SanitytestApiRequestInformation;
27 import org.onap.sdnc.apps.ms.sanitytest.swagger.model.SanitytestApiResponseField;
28 import org.onap.sdnc.apps.ms.sanitytest.swagger.model.SanitytestApiResponseFields;
29 import org.onap.sdnc.apps.ms.sanitytest.swagger.model.SanitytestApiResultEnumeration;
30 import org.onap.sdnc.apps.ms.sanitytest.swagger.model.SanitytestApiServiceConfigurationOperation;
31 import org.onap.sdnc.apps.ms.sanitytest.swagger.model.SanitytestApiTestListItem;
32 import org.onap.sdnc.apps.ms.sanitytest.swagger.model.SanitytestApiTestNameEnumeration;
33 import org.springframework.beans.factory.annotation.Autowired;
34 import org.springframework.context.annotation.ComponentScan;
35 import org.springframework.context.annotation.Import;
36 import org.springframework.http.HttpStatus;
37 import org.springframework.http.ResponseEntity;
38 import org.springframework.stereotype.Controller;
41 @ComponentScan(basePackages = { "org.onap.sdnc.apps.ms.sanitytest.*", "org.onap.ccsdk.apps.services" })
42 @Import(value = SvcLogicFactory.class)
43 public class SanityTestOperationsApi implements OperationsApi
46 private static final String MODULE_NAME = "SANITYTEST-API";
48 private final ObjectMapper objectMapper;
50 private final HttpServletRequest request;
53 protected SvcLogicServiceBase svc;
56 protected SvcLogicLoader svcLogicLoader;
58 private static class Iso8601Util {
60 private static TimeZone timeZone = TimeZone.getTimeZone("UTC");
61 private static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
63 private Iso8601Util() {
67 dateFormat.setTimeZone(timeZone);
70 private static String now() {
71 return dateFormat.format(new Date());
75 @org.springframework.beans.factory.annotation.Autowired
76 public SanityTestOperationsApi(ObjectMapper objectMapper, HttpServletRequest request) {
77 this.objectMapper = objectMapper;
78 this.request = request;
83 public Optional<ObjectMapper> getObjectMapper() {
84 return Optional.ofNullable(objectMapper);
88 public Optional<HttpServletRequest> getRequest() {
89 return Optional.ofNullable(request);
93 public ResponseEntity<SanitytestApiServiceConfigurationOperation> operationsSANITYTESTAPIserviceConfigurationOperationPost(
94 @Valid SanitytestApiInputBodyparam input) throws RestException {
95 final String svcOperation = "service-configuration-operation";
96 SanitytestApiRequestInformation reqInfo = input.getInput().getRequestInformation();
97 List<SanitytestApiTestListItem> testList = reqInfo.getTestList();
98 SanitytestApiServiceConfigurationOperation retval = new SanitytestApiServiceConfigurationOperation();
99 SanitytestApiResponseFields resp = new SanitytestApiResponseFields();
102 SvcLogicContext ctxIn = new SvcLogicContext();
105 // Add input to SvcLogicContext
107 ctxIn.mergeJson(svcOperation + "-input", objectMapper.writeValueAsString(input.getInput()));
108 } catch (JsonProcessingException e) {
109 log.error("Caught exception trying to save input to SvcLogicContext", e);
110 return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
115 // Any of these can throw a nullpointer exception
116 // execute should only throw a SvcLogicException
117 SvcLogicContext ctxOut = svc.execute(MODULE_NAME, svcOperation, null, "sync", ctxIn);
118 Properties respProps = ctxOut.toProperties();
120 String errCode = respProps.getProperty("error-code", "200");
122 if ("200".equals(errCode)) {
123 // DG returns success - return test results.
126 int testcount = Integer.parseInt(respProps.getProperty("service-configuration-operation-output.response-information.response-test-list_length"));
127 for (int i = 0; i < testcount; i++) {
128 SanitytestApiResponseField respItem = new SanitytestApiResponseField();
129 SanitytestApiTestListItem testItem = testList.get(i);
130 respItem.setResponseTestNumber(testItem.getTestNumber());
131 String testName = respProps.getProperty("service-configuration-operation-output.response-information.response-test-list["
132 + i + "].response-test-name");
133 respItem.setResponseTestName(SanitytestApiTestNameEnumeration.fromValue(testName));
134 respItem.setStartTime(respProps.getProperty("service-configuration-operation-output.response-information.response-test-list["
135 + i + "].start-time"));
136 respItem.setEndTime(respProps.getProperty("service-configuration-operation-output.response-information.response-test-list["
137 + i + "].end-time"));
138 respItem.setElapsedTime(respProps.getProperty("service-configuration-operation-output.response-information.response-test-list["
139 + i + "].elapsed-time"));
140 respItem.setErrorMessage(respProps.getProperty("service-configuration-operation-output.response-information.response-test-list["
141 + i + "].error-message"));
142 respItem.setResult(SanitytestApiResultEnumeration.fromValue(respProps.getProperty("service-configuration-operation-output.response-information.response-test-list["
144 resp.addResponseInformationItem(respItem);
146 log.info("Returned SUCCESS for " + svcOperation);
147 retval.setOutput(resp);
148 return new ResponseEntity<> (retval, HttpStatus.OK);
150 return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
153 } catch (NullPointerException npe) {
154 log.error("Caught NPE", npe);
155 return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
156 } catch (SvcLogicException e) {
157 log.error("Caught SvcLogicException", e);
158 return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);