d1b723302271846f1b7810adbb4999816aa8c2cd
[sdnc/apps.git] /
1 package org.onap.sdnc.apps.ms.sanitytest.controllers;
2
3 import java.text.DateFormat;
4 import java.text.SimpleDateFormat;
5 import java.util.Date;
6 import java.util.LinkedList;
7 import java.util.List;
8 import java.util.Optional;
9 import java.util.Properties;
10 import java.util.TimeZone;
11
12 import javax.servlet.http.HttpServletRequest;
13 import javax.validation.Valid;
14
15 import com.fasterxml.jackson.core.JsonProcessingException;
16 import com.fasterxml.jackson.databind.ObjectMapper;
17
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;
39
40 @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 
44 {
45
46     private static final String MODULE_NAME = "SANITYTEST-API";
47
48     private final ObjectMapper objectMapper;
49
50     private final HttpServletRequest request;
51
52     @Autowired
53     protected SvcLogicServiceBase svc;
54
55     @Autowired
56     protected SvcLogicLoader svcLogicLoader;
57
58     private static class Iso8601Util {
59
60         private static TimeZone timeZone = TimeZone.getTimeZone("UTC");
61         private static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
62
63         private Iso8601Util() {
64         }
65
66         static {
67             dateFormat.setTimeZone(timeZone);
68         }
69
70         private static String now() {
71             return dateFormat.format(new Date());
72         }
73     }
74
75     @org.springframework.beans.factory.annotation.Autowired
76     public SanityTestOperationsApi(ObjectMapper objectMapper, HttpServletRequest request) {
77         this.objectMapper = objectMapper;
78         this.request = request;
79     }
80
81
82     @Override
83     public Optional<ObjectMapper> getObjectMapper() {
84         return Optional.ofNullable(objectMapper);
85     }
86
87     @Override
88     public Optional<HttpServletRequest> getRequest() {
89         return Optional.ofNullable(request);
90     }
91
92     @Override
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();
100
101
102         SvcLogicContext ctxIn = new SvcLogicContext();
103
104
105         // Add input to SvcLogicContext
106         try {
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);
111         }
112
113         // Call DG
114         try {
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();
119
120             String errCode = respProps.getProperty("error-code", "200");
121
122             if ("200".equals(errCode)) {
123                 // DG returns success - return test results.
124
125
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["
143                             + i + "].result")));
144                     resp.addResponseInformationItem(respItem);
145                 }
146                 log.info("Returned SUCCESS for " + svcOperation);
147                 retval.setOutput(resp);
148                 return new ResponseEntity<> (retval, HttpStatus.OK);
149             } else {
150                 return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
151             }
152
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);
159         }
160     }
161
162
163     
164 }