From 5b935a9086ec1080f896b9a71c52283122aa0163 Mon Sep 17 00:00:00 2001 From: "Timoney, Dan (dt5972)" Date: Fri, 29 Oct 2021 14:47:40 -0400 Subject: Sync local changes to support GRA microservice Sync changes made downstream to support GRA microservice Change-Id: If3bf5d879f7d61ab91209c63b0344d78128246a8 Issue-ID: CCSDK-3504 Signed-off-by: Dan Timoney --- ms/sanity-test/pom.xml | 41 +++ .../sanity-test-app/.swagger-codegen-ignore | 4 + ms/sanity-test/sanity-test-app/pom.xml | 311 +++++++++++++++++++++ .../controllers/SanityTestOperationsApi.java | 164 +++++++++++ .../src/main/templates/api.mustache | 136 +++++++++ .../src/main/yaml/sanitytest-api.yaml | 107 +++++++ 6 files changed, 763 insertions(+) create mode 100644 ms/sanity-test/pom.xml create mode 100644 ms/sanity-test/sanity-test-app/.swagger-codegen-ignore create mode 100644 ms/sanity-test/sanity-test-app/pom.xml create mode 100644 ms/sanity-test/sanity-test-app/src/main/java/org/onap/sdnc/apps/ms/sanitytest/controllers/SanityTestOperationsApi.java create mode 100644 ms/sanity-test/sanity-test-app/src/main/templates/api.mustache create mode 100644 ms/sanity-test/sanity-test-app/src/main/yaml/sanitytest-api.yaml (limited to 'ms/sanity-test') diff --git a/ms/sanity-test/pom.xml b/ms/sanity-test/pom.xml new file mode 100644 index 0000000..d588798 --- /dev/null +++ b/ms/sanity-test/pom.xml @@ -0,0 +1,41 @@ + + + + + 4.0.0 + + + org.onap.sdnc.apps + sdnc-apps-ms + 2.3.0-SNAPSHOT + + + sanity-test + 2.3.0-SNAPSHOT + pom + + sdnc-apps :: ms :: ${project.artifactId} + Sanity test microservice + + + sanity-test-app + + diff --git a/ms/sanity-test/sanity-test-app/.swagger-codegen-ignore b/ms/sanity-test/sanity-test-app/.swagger-codegen-ignore new file mode 100644 index 0000000..1ed686e --- /dev/null +++ b/ms/sanity-test/sanity-test-app/.swagger-codegen-ignore @@ -0,0 +1,4 @@ +**/OperationsApiController.java +**/OperationalApiController.java +**/ConfigApiController.java +**/Swagger2SpringBoot.java \ No newline at end of file diff --git a/ms/sanity-test/sanity-test-app/pom.xml b/ms/sanity-test/sanity-test-app/pom.xml new file mode 100644 index 0000000..9c273af --- /dev/null +++ b/ms/sanity-test/sanity-test-app/pom.xml @@ -0,0 +1,311 @@ + + + 4.0.0 + + + org.onap.sdnc.apps + sanity-test + 2.3.0-SNAPSHOT + + + org.onap.sdnc.apps + sanity-test-app + 2.3.0-SNAPSHOT + jar + + sdnc-apps :: ms :: sanity-test :: ${project.artifactId} + Sanity Test API application + http://wiki.onap.org + + + org.onap.sdnc.apps.ms.sanitytest.SanityTestMs + ${project.basedir}/src/main/resources/liquibase.properties + 1.11 + 1.11 + + + + + io.swagger + swagger-annotations + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-logging + + + + + org.springframework.boot + spring-boot-starter-log4j2 + + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + + + org.onap.aaf.authz + aaf-auth-client + ${aaf.cadi.version} + + + org.onap.aaf.authz + aaf-cadi-aaf + ${aaf.cadi.version} + + + org.onap.aaf.authz + aaf-misc-env + ${aaf.cadi.version} + + + org.onap.aaf.authz + aaf-misc-rosetta + ${aaf.cadi.version} + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-actuator + + + io.springfox + springfox-swagger2 + 3.0.0 + + + io.springfox + springfox-swagger-ui + 3.0.0 + + + org.onap.ccsdk.apps + services + ${ccsdk.apps.version} + + + org.onap.ccsdk.sli.core + sli-common + ${ccsdk.sli.core.version} + + + org.onap.ccsdk.sli.core + sli-provider-base + ${ccsdk.sli.core.version} + + + org.onap.logging-analytics + logging-filter-spring + 1.6.6 + + + javax.ws.rs + javax.ws.rs-api + + + org.onap.ccsdk.sli.core + sliPluginUtils-provider + ${ccsdk.sli.core.version} + + + org.onap.ccsdk.sli.adaptors + mdsal-resource-provider + ${ccsdk.sli.adaptors.version} + + + org.onap.ccsdk.sli.adaptors.messagerouter + publisher.provider + ${ccsdk.sli.adaptors.version} + + + org.onap.ccsdk.sli.adaptors + netbox-client-provider + ${ccsdk.sli.adaptors.version} + + + org.onap.ccsdk.sli.adaptors + sql-resource-provider + ${ccsdk.sli.adaptors.version} + + + org.onap.ccsdk.sli.plugins + restapi-call-node-provider + ${ccsdk.sli.plugins.version} + + + org.onap.ccsdk.sli.plugins + properties-node-provider + ${ccsdk.sli.plugins.version} + + + + org.liquibase + liquibase-core + 4.3.0 + + + + + org.glassfish.jersey.inject + jersey-hk2 + + + com.google.code.gson + gson + + + org.apache.derby + derby + test + + + + org.junit.platform + junit-platform-launcher + 1.6.2 + test + + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.0.2 + + + + + + unpack dgs + generate-sources + + unpack + + + ${basedir}/target + + + org.onap.sdnc.oam + platform-logic-installer + ${sdnc.oam.version} + zip + + + + + + + + io.swagger + swagger-codegen-maven-plugin + 2.3.1 + + + generate-sources + + generate + + + target/generated-sources + ${project.basedir}/src/main/yaml/sanitytest-api.yaml + spring + org.onap.sdnc.apps.ms.sanitytest.swagger + org.onap.sdnc.apps.ms.sanitytest.swagger.model + org.onap.sdnc.apps.ms.sanitytest.swagger + true + true + ${project.basedir}/.swagger-codegen-ignore + true + ${project.basedir}/src/main/templates + + true + 2.2.4-RELEASE + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + exec + + + + + repackage + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.0.0 + + + addSource + generate-sources + + add-source + + + + ${project.basedir}/target/generated-sources/src/main/java + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.19.1 + + + ${basedir}/src/test/resources + ${basedir}/src/test/resources/svclogic.properties + ${gratest.mysql.database} + ${gratest.mysql.user} + ${gratest.mysql.password} + + + + + org.apache.maven.plugins + maven-failsafe-plugin + + + + integration-test + verify + + + + + true + + + + + diff --git a/ms/sanity-test/sanity-test-app/src/main/java/org/onap/sdnc/apps/ms/sanitytest/controllers/SanityTestOperationsApi.java b/ms/sanity-test/sanity-test-app/src/main/java/org/onap/sdnc/apps/ms/sanitytest/controllers/SanityTestOperationsApi.java new file mode 100644 index 0000000..d1b7233 --- /dev/null +++ b/ms/sanity-test/sanity-test-app/src/main/java/org/onap/sdnc/apps/ms/sanitytest/controllers/SanityTestOperationsApi.java @@ -0,0 +1,164 @@ +package org.onap.sdnc.apps.ms.sanitytest.controllers; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.LinkedList; +import java.util.List; +import java.util.Optional; +import java.util.Properties; +import java.util.TimeZone; + +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import org.onap.ccsdk.apps.services.RestException; +import org.onap.ccsdk.apps.services.SvcLogicFactory; +import org.onap.ccsdk.sli.core.sli.SvcLogicContext; +import org.onap.ccsdk.sli.core.sli.SvcLogicException; +import org.onap.ccsdk.sli.core.sli.SvcLogicLoader; +import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicServiceBase; +import org.onap.sdnc.apps.ms.sanitytest.swagger.OperationsApi; +import org.onap.sdnc.apps.ms.sanitytest.swagger.model.SanitytestApiInputBodyparam; +import org.onap.sdnc.apps.ms.sanitytest.swagger.model.SanitytestApiRequestInformation; +import org.onap.sdnc.apps.ms.sanitytest.swagger.model.SanitytestApiResponseField; +import org.onap.sdnc.apps.ms.sanitytest.swagger.model.SanitytestApiResponseFields; +import org.onap.sdnc.apps.ms.sanitytest.swagger.model.SanitytestApiResultEnumeration; +import org.onap.sdnc.apps.ms.sanitytest.swagger.model.SanitytestApiServiceConfigurationOperation; +import org.onap.sdnc.apps.ms.sanitytest.swagger.model.SanitytestApiTestListItem; +import org.onap.sdnc.apps.ms.sanitytest.swagger.model.SanitytestApiTestNameEnumeration; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; + +@Controller +@ComponentScan(basePackages = { "org.onap.sdnc.apps.ms.sanitytest.*", "org.onap.ccsdk.apps.services" }) +@Import(value = SvcLogicFactory.class) +public class SanityTestOperationsApi implements OperationsApi +{ + + private static final String MODULE_NAME = "SANITYTEST-API"; + + private final ObjectMapper objectMapper; + + private final HttpServletRequest request; + + @Autowired + protected SvcLogicServiceBase svc; + + @Autowired + protected SvcLogicLoader svcLogicLoader; + + private static class Iso8601Util { + + private static TimeZone timeZone = TimeZone.getTimeZone("UTC"); + private static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + + private Iso8601Util() { + } + + static { + dateFormat.setTimeZone(timeZone); + } + + private static String now() { + return dateFormat.format(new Date()); + } + } + + @org.springframework.beans.factory.annotation.Autowired + public SanityTestOperationsApi(ObjectMapper objectMapper, HttpServletRequest request) { + this.objectMapper = objectMapper; + this.request = request; + } + + + @Override + public Optional getObjectMapper() { + return Optional.ofNullable(objectMapper); + } + + @Override + public Optional getRequest() { + return Optional.ofNullable(request); + } + + @Override + public ResponseEntity operationsSANITYTESTAPIserviceConfigurationOperationPost( + @Valid SanitytestApiInputBodyparam input) throws RestException { + final String svcOperation = "service-configuration-operation"; + SanitytestApiRequestInformation reqInfo = input.getInput().getRequestInformation(); + List testList = reqInfo.getTestList(); + SanitytestApiServiceConfigurationOperation retval = new SanitytestApiServiceConfigurationOperation(); + SanitytestApiResponseFields resp = new SanitytestApiResponseFields(); + + + SvcLogicContext ctxIn = new SvcLogicContext(); + + + // Add input to SvcLogicContext + try { + ctxIn.mergeJson(svcOperation + "-input", objectMapper.writeValueAsString(input.getInput())); + } catch (JsonProcessingException e) { + log.error("Caught exception trying to save input to SvcLogicContext", e); + return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); + } + + // Call DG + try { + // Any of these can throw a nullpointer exception + // execute should only throw a SvcLogicException + SvcLogicContext ctxOut = svc.execute(MODULE_NAME, svcOperation, null, "sync", ctxIn); + Properties respProps = ctxOut.toProperties(); + + String errCode = respProps.getProperty("error-code", "200"); + + if ("200".equals(errCode)) { + // DG returns success - return test results. + + + int testcount = Integer.parseInt(respProps.getProperty("service-configuration-operation-output.response-information.response-test-list_length")); + for (int i = 0; i < testcount; i++) { + SanitytestApiResponseField respItem = new SanitytestApiResponseField(); + SanitytestApiTestListItem testItem = testList.get(i); + respItem.setResponseTestNumber(testItem.getTestNumber()); + String testName = respProps.getProperty("service-configuration-operation-output.response-information.response-test-list[" + + i + "].response-test-name"); + respItem.setResponseTestName(SanitytestApiTestNameEnumeration.fromValue(testName)); + respItem.setStartTime(respProps.getProperty("service-configuration-operation-output.response-information.response-test-list[" + + i + "].start-time")); + respItem.setEndTime(respProps.getProperty("service-configuration-operation-output.response-information.response-test-list[" + + i + "].end-time")); + respItem.setElapsedTime(respProps.getProperty("service-configuration-operation-output.response-information.response-test-list[" + + i + "].elapsed-time")); + respItem.setErrorMessage(respProps.getProperty("service-configuration-operation-output.response-information.response-test-list[" + + i + "].error-message")); + respItem.setResult(SanitytestApiResultEnumeration.fromValue(respProps.getProperty("service-configuration-operation-output.response-information.response-test-list[" + + i + "].result"))); + resp.addResponseInformationItem(respItem); + } + log.info("Returned SUCCESS for " + svcOperation); + retval.setOutput(resp); + return new ResponseEntity<> (retval, HttpStatus.OK); + } else { + return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); + } + + } catch (NullPointerException npe) { + log.error("Caught NPE", npe); + return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); + } catch (SvcLogicException e) { + log.error("Caught SvcLogicException", e); + return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + + +} diff --git a/ms/sanity-test/sanity-test-app/src/main/templates/api.mustache b/ms/sanity-test/sanity-test-app/src/main/templates/api.mustache new file mode 100644 index 0000000..c28642c --- /dev/null +++ b/ms/sanity-test/sanity-test-app/src/main/templates/api.mustache @@ -0,0 +1,136 @@ +/** +* NOTE: This class is auto generated by the swagger code generator program ({{{generatorVersion}}}). +* https://github.com/swagger-api/swagger-codegen +* Do not edit the class manually. +*/ +package {{package}}; + +{{#imports}}import {{import}}; +{{/imports}} +{{#jdk8-no-delegate}} + import com.fasterxml.jackson.databind.ObjectMapper; +{{/jdk8-no-delegate}} +import io.swagger.annotations.*; +{{#jdk8-no-delegate}} + import org.slf4j.Logger; + import org.slf4j.LoggerFactory; + import org.springframework.http.HttpStatus; +{{/jdk8-no-delegate}} +import org.springframework.http.ResponseEntity; +{{#useBeanValidation}} + import org.springframework.validation.annotation.Validated; +{{/useBeanValidation}} +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.multipart.MultipartFile; +import org.onap.ccsdk.apps.services.RestException; + +{{#jdk8-no-delegate}} + import javax.servlet.http.HttpServletRequest; +{{/jdk8-no-delegate}} +{{#useBeanValidation}} + import javax.validation.Valid; + import javax.validation.constraints.*; +{{/useBeanValidation}} +{{#jdk8-no-delegate}} + import java.io.IOException; +{{/jdk8-no-delegate}} +import java.util.List; +{{#jdk8-no-delegate}} + import java.util.Optional; +{{/jdk8-no-delegate}} +{{^jdk8-no-delegate}} + {{#useOptional}} + import java.util.Optional; + {{/useOptional}} +{{/jdk8-no-delegate}} +{{#async}} + import java.util.concurrent.{{^jdk8}}Callable{{/jdk8}}{{#jdk8}}CompletableFuture{{/jdk8}}; +{{/async}} +{{>generatedAnnotation}} +@Api(value = "{{{baseName}}}", description = "the {{{baseName}}} API") +{{#operations}} + public interface {{classname}} { + {{#jdk8}} + + {{^isDelegate}} + Logger log = LoggerFactory.getLogger({{classname}}.class); + + default Optional getObjectMapper() { + return Optional.empty(); + } + + default Optional getRequest() { + return Optional.empty(); + } + + default Optional getAcceptHeader() { + return getRequest().map(r -> r.getHeader("Accept")); + } + {{/isDelegate}} + {{#isDelegate}} + {{classname}}Delegate getDelegate(); + {{/isDelegate}} + {{/jdk8}} + {{#operation}} + + @ApiOperation(value = "{{{summary}}}", nickname = "{{{operationId}}}", notes = "{{{notes}}}"{{#returnBaseType}}, response = {{{returnBaseType}}}.class{{/returnBaseType}}{{#returnContainer}}, responseContainer = "{{{returnContainer}}}"{{/returnContainer}}{{#hasAuthMethods}}, authorizations = { + {{#authMethods}}@Authorization(value = "{{name}}"{{#isOAuth}}, scopes = { + {{#scopes}}@AuthorizationScope(scope = "{{scope}}", description = "{{description}}"){{#hasMore}}, + {{/hasMore}}{{/scopes}} + }{{/isOAuth}}){{#hasMore}}, + {{/hasMore}}{{/authMethods}} + }{{/hasAuthMethods}}, tags={ {{#vendorExtensions.x-tags}}"{{tag}}",{{/vendorExtensions.x-tags}} }) + @ApiResponses(value = { {{#responses}} + @ApiResponse(code = {{{code}}}, message = "{{{message}}}"{{#baseType}}, response = {{{baseType}}}.class{{/baseType}}{{#containerType}}, responseContainer = "{{{containerType}}}"{{/containerType}}){{#hasMore}},{{/hasMore}}{{/responses}} }) + {{#implicitHeaders}} + @ApiImplicitParams({ + {{#headerParams}} + {{>implicitHeader}} + {{/headerParams}} + }) + {{/implicitHeaders}} + @RequestMapping(value = "{{{path}}}",{{#singleContentTypes}} + produces = "{{{vendorExtensions.x-accepts}}}", + consumes = "{{{vendorExtensions.x-contentType}}}",{{/singleContentTypes}}{{^singleContentTypes}}{{#hasProduces}} + produces = { {{#produces}}"{{{mediaType}}}"{{#hasMore}}, {{/hasMore}}{{/produces}} }, {{/hasProduces}}{{#hasConsumes}} + consumes = { {{#consumes}}"{{{mediaType}}}"{{#hasMore}}, {{/hasMore}}{{/consumes}} },{{/hasConsumes}}{{/singleContentTypes}} + method = RequestMethod.{{httpMethod}}) + {{#jdk8}}default {{/jdk8}}{{#responseWrapper}}{{.}}<{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {{#delegate-method}}_{{/delegate-method}}{{operationId}}({{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{#hasMore}},{{/hasMore}}{{/allParams}}){{^jdk8}};{{/jdk8}}{{#jdk8}} throws RestException { + {{#delegate-method}} + return {{operationId}}({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}); + } + + // Override this method + default {{#responseWrapper}}{{.}}<{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {{operationId}}({{#allParams}}{{^isFile}}{{{dataType}}}{{/isFile}}{{#isFile}}MultipartFile{{/isFile}} {{paramName}}{{#hasMore}},{{/hasMore}}{{/allParams}}) throws RestException { + {{/delegate-method}} + {{^isDelegate}} + if(getObjectMapper().isPresent() && getAcceptHeader().isPresent()) { + {{#examples}} + if (getAcceptHeader().get().contains("{{{contentType}}}")) { + try { + return {{#async}}CompletableFuture.completedFuture({{/async}}new ResponseEntity<>(getObjectMapper().get().readValue("{{#lambdaRemoveLineBreak}}{{#lambdaEscapeDoubleQuote}}{{{example}}}{{/lambdaEscapeDoubleQuote}}{{/lambdaRemoveLineBreak}}", {{>exampleReturnTypes}}.class), HttpStatus.NOT_IMPLEMENTED){{#async}}){{/async}}; + } catch (IOException e) { + log.error("Couldn't serialize response for content type {{{contentType}}}", e); + return {{#async}}CompletableFuture.completedFuture({{/async}}new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR){{#async}}){{/async}}; + } + } + {{/examples}} + } else { + log.warn("ObjectMapper or HttpServletRequest not configured in default {{classname}} interface so no example is generated"); + } + return {{#async}}CompletableFuture.completedFuture({{/async}}new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED){{#async}}){{/async}}; + {{/isDelegate}} + {{#isDelegate}} + return getDelegate().{{operationId}}({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}); + {{/isDelegate}} + }{{/jdk8}} + + {{/operation}} + } +{{/operations}} \ No newline at end of file diff --git a/ms/sanity-test/sanity-test-app/src/main/yaml/sanitytest-api.yaml b/ms/sanity-test/sanity-test-app/src/main/yaml/sanitytest-api.yaml new file mode 100644 index 0000000..f08d195 --- /dev/null +++ b/ms/sanity-test/sanity-test-app/src/main/yaml/sanitytest-api.yaml @@ -0,0 +1,107 @@ +--- +swagger: "2.0" +info: + description: "Defines API interface for SDNC sanity tests. " + version: "2108.0.1" + title: "SANITYTEST-API" +consumes: +- "application/json" +- "application/xml" +produces: +- "application/json" +- "application/xml" +paths: + /operations/SANITYTEST-API:service-configuration-operation/: + post: + tags: + - "SANITYTEST-API" + parameters: + - in: "body" + name: "sanitytest.api.Input.body-param" + required: false + schema: + properties: + input: + $ref: "#/definitions/sanitytest.api.serviceconfigurationoperation.Input" + responses: + 400: + description: "Internal error" + 200: + description: "Correct response" + schema: + $ref: "#/definitions/sanitytest.api.ServiceConfigurationOperation" + 201: + description: "No response" +definitions: + sanitytest.api.TestNameEnumeration: + type: "string" + enum: + - "EIPAMAdaptor" + - "AAI" + - "POLICY" + sanitytest.api.ResultEnumeration: + type: "string" + enum: + - "Success" + - "Failure" + sanitytest.api.serviceconfigurationoperation.Input: + type: "object" + properties: + request-information: + $ref: "#/definitions/sanitytest.api.RequestInformation" + sanitytest.api.RequestInformation: + type: "object" + properties: + test-list: + type: "array" + items: + $ref: "#/definitions/sanitytest.api.TestListItem" + sanitytest.api.TestListItem: + type: "object" + properties: + test-number: + type: "integer" + format: "int16" + test-name: + $ref: "#/definitions/sanitytest.api.TestNameEnumeration" + test-data: + type: "array" + items: + $ref: "#/definitions/sanitytest.api.TestDataItem" + sanitytest.api.TestDataItem: + type: "object" + properties: + data-name: + type: "string" + data-value: + type: "string" + sanitytest.api.ServiceConfigurationOperation: + type: "object" + properties: + output: + $ref: "#/definitions/sanitytest.api.ResponseFields" + sanitytest.api.ResponseFields: + type: "object" + properties: + response-information: + type: "array" + items: + $ref: "#/definitions/sanitytest.api.ResponseField" + sanitytest.api.ResponseField: + type: "object" + properties: + response-test-number: + type: "integer" + format: "int16" + response-test-name: + $ref: "#/definitions/sanitytest.api.TestNameEnumeration" + start-time: + type: "string" + end-time: + type: "string" + elapsed-time: + type: "string" + result: + $ref: "#/definitions/sanitytest.api.ResultEnumeration" + error-message: + type: "string" \ No newline at end of file -- cgit 1.2.3-korg