From 37d3785c538da8ac2bf46e78b494c45c73e8197b Mon Sep 17 00:00:00 2001 From: BjornMagnussonXA Date: Tue, 15 Oct 2019 08:42:08 +0200 Subject: [PATCH] Simulator updates Change-Id: I9b7ac08c190ed10decce7b5ed700905729b565ac Issue-ID: NONRTRIC-46 Signed-off-by: BjornMagnussonXA Change-Id: Ia79ff05419307d2dfc526d384a232449af3400e5 --- .../nearric-simulator/nearric-service/Dockerfile | 10 + .../nearric-simulator/nearric-service/pom.xml | 30 +- .../nearric-service/src/main/docker/Dockerfile | 7 - .../simulator/controller/A1PApiController.java | 12 +- .../onap/nearric/simulator/model/PolicyType.java | 4 +- .../simulator/service/A1PApiServiceImpl.java | 343 +++++++++++---------- .../nearric-service/test/.gitignore | 1 + .../nearric-service/test/pi-template.json | 4 + .../nearric-service/test/populate.sh | 39 +++ .../nearric-service/test/pt-template.json | 49 +++ .../nearric-service/test/test-api.sh | 126 ++++++++ 11 files changed, 451 insertions(+), 174 deletions(-) create mode 100644 near-rt-ric-simulator/nearric-simulator/nearric-service/Dockerfile delete mode 100644 near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/docker/Dockerfile create mode 100644 near-rt-ric-simulator/nearric-simulator/nearric-service/test/.gitignore create mode 100644 near-rt-ric-simulator/nearric-simulator/nearric-service/test/pi-template.json create mode 100755 near-rt-ric-simulator/nearric-simulator/nearric-service/test/populate.sh create mode 100644 near-rt-ric-simulator/nearric-simulator/nearric-service/test/pt-template.json create mode 100755 near-rt-ric-simulator/nearric-simulator/nearric-service/test/test-api.sh diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/Dockerfile b/near-rt-ric-simulator/nearric-simulator/nearric-service/Dockerfile new file mode 100644 index 00000000..4a85d000 --- /dev/null +++ b/near-rt-ric-simulator/nearric-simulator/nearric-service/Dockerfile @@ -0,0 +1,10 @@ + +FROM openjdk:8-jre-alpine + +ARG JAR_FILE + +WORKDIR /opt/app/nearricsimulator + +COPY ${JAR_FILE} nearric-simulator.jar + +ENTRYPOINT ["/usr/bin/java", "-jar", "/opt/app/nearricsimulator/nearric-simulator.jar"] \ No newline at end of file diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/pom.xml b/near-rt-ric-simulator/nearric-simulator/nearric-service/pom.xml index 383e8460..e35337c2 100644 --- a/near-rt-ric-simulator/nearric-simulator/nearric-service/pom.xml +++ b/near-rt-ric-simulator/nearric-simulator/nearric-service/pom.xml @@ -15,16 +15,23 @@ 1.8 2.7.5 2.8.1 + 1.4.2 org.oran.nearric a1-med-api - 0.10.3-SNAPSHOT + 1.0.0-SNAPSHOT org.springframework.boot spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-logging + + org.springframework.boot @@ -138,6 +145,27 @@ + + com.spotify + dockerfile-maven-plugin + ${dockerfile-maven-version} + + + default + + build + push + + + + + nearric-simulator + ${project.version} + + target/${project.build.finalName}.jar + + + diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/docker/Dockerfile b/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/docker/Dockerfile deleted file mode 100644 index 8a862e86..00000000 --- a/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/docker/Dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -#Not completed docker file -FROM openjdk:8-jre-alpine - -WORKDIR /opt/app/nearricsimulator - - -ENTRYPOINT ["/usr/bin/java", "-jar", "/opt/app/datafile/datafile-app-server.jar"] \ No newline at end of file diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/controller/A1PApiController.java b/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/controller/A1PApiController.java index d2a0b3fd..d33e6c67 100644 --- a/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/controller/A1PApiController.java +++ b/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/controller/A1PApiController.java @@ -40,6 +40,8 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; import io.swagger.annotations.ApiParam; @@ -69,6 +71,13 @@ public class A1PApiController implements A1PApi { a1pApiService = new A1PApiServiceImpl(); a1pApiService.set(objectMapper, request); } + + //Reset policy db + @RequestMapping(value = "reset", + method = RequestMethod.GET) + public void reset() { + a1pApiService.reset(); + } public ResponseEntity a1ControllerCreateOrReplacePolicyInstance(@ApiParam(value = "",required=true) @PathVariable("policy_type_id") Integer policyTypeId,@ApiParam(value = "",required=true) @PathVariable("policy_instance_id") String policyInstanceId,@ApiParam(value = "" ) @Valid @RequestBody Object body) { return a1pApiService.createReplaceInstance(policyTypeId, policyInstanceId, body); @@ -95,8 +104,7 @@ public class A1PApiController implements A1PApi { } public ResponseEntity a1ControllerGetHealthcheck() { - String accept = request.getHeader("Accept"); - return new ResponseEntity(HttpStatus.ACCEPTED); + return new ResponseEntity(HttpStatus.OK); } public ResponseEntity a1ControllerGetPolicyInstance(@ApiParam(value = "",required=true) @PathVariable("policy_type_id") Integer policyTypeId,@ApiParam(value = "",required=true) @PathVariable("policy_instance_id") String policyInstanceId) { diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/model/PolicyType.java b/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/model/PolicyType.java index f63a3b3b..5429cab1 100644 --- a/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/model/PolicyType.java +++ b/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/model/PolicyType.java @@ -1,5 +1,3 @@ -package org.onap.nearric.simulator.model; - /*- * ============LICENSE_START======================================================= * Copyright (C) 2019 Nordix Foundation. @@ -20,6 +18,8 @@ package org.onap.nearric.simulator.model; * ============LICENSE_END========================================================= */ +package org.onap.nearric.simulator.model; + import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/service/A1PApiServiceImpl.java b/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/service/A1PApiServiceImpl.java index 1521ed79..a79cfa42 100644 --- a/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/service/A1PApiServiceImpl.java +++ b/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/service/A1PApiServiceImpl.java @@ -20,13 +20,7 @@ package org.onap.nearric.simulator.service; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -34,15 +28,12 @@ import java.util.Set; import javax.servlet.http.HttpServletRequest; -import org.apache.commons.beanutils.BeanUtils; -import org.onap.nearric.simulator.model.PolicyType; import org.onap.nearric.simulator.model.PolicyInstance; -import org.oransc.ric.a1med.api.model.PolicyTypeSchema; +import org.onap.nearric.simulator.model.PolicyType; import org.oransc.ric.a1med.api.model.InlineResponse200; - +import org.oransc.ric.a1med.api.model.PolicyTypeSchema; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; @@ -58,8 +49,6 @@ import com.github.fge.jsonschema.core.report.ProcessingReport; import com.github.fge.jsonschema.main.JsonSchema; import com.github.fge.jsonschema.main.JsonSchemaFactory; -import com.fasterxml.jackson.databind.ObjectMapper; - /** * This class provides the service implementation of all the A1 operation * @@ -68,7 +57,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; */ @Service -public class A1PApiServiceImpl { // implements A1PApiService { +public class A1PApiServiceImpl { private static final Logger log = LoggerFactory.getLogger(A1PApiServiceImpl.class); @@ -82,35 +71,32 @@ public class A1PApiServiceImpl { // implements A1PApiService { ProcessingReport report = null; boolean result = false; try { - System.out.println("Applying schema: @<@<" + jsonSchema + ">@>@ to data: #<#<" + jsonData + ">#>#"); + log.info("Applying schema: @<@<" + jsonSchema + ">@>@ to data: #<#<" + jsonData + ">#>#"); JsonNode schemaNode = JsonLoader.fromString(jsonSchema); JsonNode data = JsonLoader.fromString(jsonData); JsonSchemaFactory factory = JsonSchemaFactory.byDefault(); JsonSchema schema = factory.getJsonSchema(schemaNode); report = schema.validate(data); } catch (JsonParseException jpex) { - System.out.println("Error. Something went wrong trying to parse json data: #<#<" + jsonData + log.info("Error. Something went wrong trying to parse json data: #<#<" + jsonData + ">#># or json schema: @<@<" + jsonSchema + ">@>@. Are the double quotes included? " + jpex.getMessage()); - // jpex.printStackTrace(); } catch (ProcessingException pex) { - System.out.println("Error. Something went wrong trying to process json data: #<#<" + jsonData + log.info("Error. Something went wrong trying to process json data: #<#<" + jsonData + ">#># with json schema: @<@<" + jsonSchema + ">@>@ " + pex.getMessage()); - // pex.printStackTrace(); } catch (IOException e) { - System.out.println("Error. Something went wrong trying to read json data: #<#<" + jsonData + log.info("Error. Something went wrong trying to read json data: #<#<" + jsonData + ">#># or json schema: @<@<" + jsonSchema + ">@>@"); - // e.printStackTrace(); } if (report != null) { Iterator iter = report.iterator(); while (iter.hasNext()) { ProcessingMessage pm = iter.next(); - System.out.println("Processing Message: " + pm.getMessage()); + log.info("Processing Message: " + pm.getMessage()); } result = report.isSuccess(); } - System.out.println(" Result=" + result); + log.info("Result=" + result); return result; } @@ -121,82 +107,99 @@ public class A1PApiServiceImpl { // implements A1PApiService { this.objectMapper = objectMapper; this.request = request; } + + public void reset() { + log.info("Resetting db"); + policyTypes.clear(); + } + + public ResponseEntity createReplaceType(Integer policyTypeId, PolicyTypeSchema policyTypeSchema) { + log.info("createReplaceType - policyTypeId: " + policyTypeId); + log.info("createReplaceType - policyTypeSchema: " + policyTypeSchema); + + if (policyTypeId == null || policyTypeSchema == null || policyTypeSchema.getName() == null) { + log.info("createReplaceType - bad parameters"); + return new ResponseEntity(HttpStatus.BAD_REQUEST); + } + if (policyTypeSchema.getPolicyTypeId().intValue() != policyTypeId.intValue()) { + log.info("createReplaceType - policytype id mismatch between request and policyTypeSchema"); + return new ResponseEntity(HttpStatus.BAD_REQUEST); + } - public ResponseEntity createReplaceType(Integer policyTypeId, PolicyTypeSchema body) { - - System.out.println("createReplaceType - policyTypeId: " + policyTypeId); - System.out.println("createReplaceType - body: " + body); - - String accept = request.getHeader("Accept"); - - if (body != null && body.getName() != null) { - if (body.getPolicyTypeId().intValue() != policyTypeId.intValue()) { - System.out.println("createReplaceType - policytype mismatch between request and body"); - return new ResponseEntity(HttpStatus.BAD_REQUEST); - } - - if (policyTypes.containsKey(policyTypeId.toString())) { - System.out.println("createReplaceType - policytype already exists"); - return new ResponseEntity(HttpStatus.BAD_REQUEST); - } + if (policyTypes.containsKey(policyTypeId.toString())) { + log.info("createReplaceType - policytype already exists"); + return new ResponseEntity(HttpStatus.BAD_REQUEST); + } - PolicyType policyType = new PolicyType(policyTypeId, body); - policyTypes.put(policyTypeId.toString(), policyType); - } - System.out.println("createReplaceType - created ok"); - return new ResponseEntity(HttpStatus.CREATED); + PolicyType policyType = new PolicyType(policyTypeId, policyTypeSchema); + policyTypes.put(policyTypeId.toString(), policyType); + log.info("createReplaceType - created ok"); + return new ResponseEntity(HttpStatus.CREATED); } public ResponseEntity deleteType(Integer policyTypeId) { + log.info("deleteType - policyTypeId: " + policyTypeId); - System.out.println("deleteType - policyTypeId: " + policyTypeId); - - String accept = request.getHeader("Accept"); + if (policyTypeId == null) { + log.info("deleteType - bad parameter"); + return new ResponseEntity(HttpStatus.BAD_REQUEST); + } - PolicyType policyType = policyTypes.get(policyTypeId.toString()); + PolicyType policyType = policyTypes.get(policyTypeId.toString()); - if (policyType == null) { - System.out.println("deleteType - policytype does not exists"); - return new ResponseEntity(HttpStatus.NOT_FOUND); - } + if (policyType == null) { + log.info("deleteType - policytype does not exists"); + return new ResponseEntity(HttpStatus.NOT_FOUND); + } - if (policyType.getNumberInstances() > 0) { - System.out.println("deleteType - cannot delete, instances exists"); - return new ResponseEntity(HttpStatus.BAD_REQUEST); - } - policyTypes.remove(policyTypeId.toString()); + if (policyType.getNumberInstances() > 0) { + log.info("deleteType - cannot delete, instances exists"); + return new ResponseEntity(HttpStatus.BAD_REQUEST); + } + policyTypes.remove(policyTypeId.toString()); - System.out.println("deleteType - deleted ok"); - return new ResponseEntity(HttpStatus.NO_CONTENT); + log.info("deleteType - deleted ok"); + return new ResponseEntity(HttpStatus.NO_CONTENT); } public ResponseEntity deleteInstance(Integer policyTypeId, String policyInstanceId) { - System.out.println("deleteInstance - policyTypeId: " + policyTypeId); - System.out.println("deleteInstance - policyInstanceId: " + policyInstanceId); + log.info("deleteInstance - policyTypeId: " + policyTypeId); + log.info("deleteInstance - policyInstanceId: " + policyInstanceId); - PolicyType policyType = policyTypes.get(policyTypeId.toString()); + if (policyTypeId == null || policyInstanceId == null) { + log.info("deleteInstance - bad parameters"); + return new ResponseEntity(HttpStatus.NOT_FOUND); + } - if (policyType == null) { - System.out.println("deleteType - policytype does not exists"); - return new ResponseEntity(HttpStatus.NOT_FOUND); - } - PolicyInstance policyInstance = policyType.getInstance(policyInstanceId); - if (policyInstance == null) { - System.out.println("deleteType - instance does not exists"); - return new ResponseEntity(HttpStatus.NOT_FOUND); - } - policyType.delete(policyInstanceId); + PolicyType policyType = policyTypes.get(policyTypeId.toString()); + + if (policyType == null) { + log.info("deleteType - policytype does not exists"); + return new ResponseEntity(HttpStatus.NOT_FOUND); + } + PolicyInstance policyInstance = policyType.getInstance(policyInstanceId); + if (policyInstance == null) { + log.info("deleteType - instance does not exists"); + return new ResponseEntity(HttpStatus.NOT_FOUND); + } + policyType.delete(policyInstanceId); - System.out.println("deleteInstance - deleted ok"); - return new ResponseEntity(HttpStatus.NO_CONTENT); + log.info("deleteInstance - deleted ok"); + return new ResponseEntity(HttpStatus.NO_CONTENT); } public ResponseEntity getPolicyTypeSchema(Integer policyTypeId) { - System.out.println("getPolicyTypeSchema - policyTypeId: " + policyTypeId); + log.info("getPolicyTypeSchema - policyTypeId: " + policyTypeId); + + if (policyTypeId == null) { + log.info("getPolicyTypeSchema - bad parameter"); + return new ResponseEntity(HttpStatus.NOT_FOUND); + } + String accept = request.getHeader("Accept"); if (accept != null && accept.contains("application/json")) { String res = null; @@ -204,46 +207,45 @@ public class A1PApiServiceImpl { // implements A1PApiService { PolicyType policyType = policyTypes.get(policyTypeId.toString()); if (policyType == null) { - System.out.println("getPolicyTypeSchema - policytype does not exists"); + log.info("getPolicyTypeSchema - policytype does not exists"); return new ResponseEntity(HttpStatus.NOT_FOUND); } - String json = "{}"; + String json = null; PolicyTypeSchema schema = policyType.getSchema(); String createSchema = "{}"; try { // Convert Map to JSON json = objectMapper.writeValueAsString(schema); // Print JSON output - System.out.println("getPolicyTypeSchema - schema: " + json); + log.info("getPolicyTypeSchema - schema: " + json); createSchema = objectMapper.writeValueAsString(schema.getCreateSchema()); - System.out.println("getPolicyTypeSchema - createSchema: " + createSchema); + log.info("getPolicyTypeSchema - createSchema: " + createSchema); } catch (Exception e) { e.printStackTrace(); - System.out.println("getPolicyTypeSchema - schema corrupt"); + log.info("getPolicyTypeSchema - schema corrupt"); return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR); } res = "{\n \"name\" : \"" + schema.getName() + "\",\n \"description\" : \"" + schema.getDescription() + "\",\n \"create_schema\" : " + createSchema + ",\n \"policy_type_id\" : " + schema.getPolicyTypeId().intValue() + "\n}"; - System.out.println("getPolicyTypeSchema - json schema: " + res); - objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true); + log.info("getPolicyTypeSchema - json schema: " + res); return new ResponseEntity(objectMapper.readValue(res, PolicyTypeSchema.class), - HttpStatus.ACCEPTED); + HttpStatus.OK); } catch (Exception e) { e.printStackTrace(); - System.out - .println("getPolicyTypeSchema - Couldn't serialize response for content type application/json"); + log.info("getPolicyTypeSchema - Couldn't serialize response for content type application/json"); return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR); } } - System.out.println("getPolicyTypeSchema - not implemented"); + log.info("getPolicyTypeSchema - not implemented"); return new ResponseEntity(HttpStatus.NOT_IMPLEMENTED); } public ResponseEntity> getAllTypes() { - System.out.println("getAllTypes"); + log.info("getAllTypes"); + String accept = request.getHeader("Accept"); if (accept != null && accept.contains("application/json")) { try { @@ -257,84 +259,93 @@ public class A1PApiServiceImpl { // implements A1PApiService { res = res + tid; } return new ResponseEntity>(objectMapper.readValue("[" + res + "]", List.class), - HttpStatus.ACCEPTED); + HttpStatus.OK); } catch (IOException e) { e.printStackTrace(); - System.out.println("getAllTypes - Couldn't serialize response for content type application/json"); + log.info("getAllTypes - Couldn't serialize response for content type application/json"); return new ResponseEntity>(HttpStatus.INTERNAL_SERVER_ERROR); } } - System.out.println("getAllTypes - not implemented"); + log.info("getAllTypes - not implemented"); return new ResponseEntity>(HttpStatus.NOT_IMPLEMENTED); } public ResponseEntity createReplaceInstance(Integer policyTypeId, String policyInstanceId, Object body) { - System.out.println("createReplaceInstance - policyTypeId:" + policyTypeId); - System.out.println("createReplaceInstance - policyInstanceId:" + policyInstanceId); - System.out.println("createReplaceInstance - body:" + body); - System.out.println("createReplaceInstance - bodyclass:" + body.getClass().toString()); + log.info("createReplaceInstance - policyTypeId:" + policyTypeId); + log.info("createReplaceInstance - policyInstanceId:" + policyInstanceId); + log.info("createReplaceInstance - body:" + body); - String accept = request.getHeader("Accept"); + if (policyTypeId == null || policyInstanceId == null || body == null) { + log.info("createReplaceInstance - bad parameter"); + return new ResponseEntity(HttpStatus.BAD_REQUEST); + } - PolicyType policyType = policyTypes.get(policyTypeId.toString()); + log.info("createReplaceInstance - bodyclass:" + body.getClass().toString()); - if (policyType == null) { - System.out.println("createReplaceInstance - policytype does not exists"); - return new ResponseEntity(HttpStatus.NOT_FOUND); - } + PolicyType policyType = policyTypes.get(policyTypeId.toString()); - // Create json string from schema - String createSchema = null; - try { - PolicyTypeSchema schema = policyType.getSchema(); - // Convert Map to JSON - String json = objectMapper.writeValueAsString(schema); - // Print JSON output - System.out.println("createReplaceInstance - schema - json: " + json); - createSchema = objectMapper.writeValueAsString(schema.getCreateSchema()); - System.out.println("createReplaceInstance - createSchema - string: " + createSchema); - } catch (Exception e) { - e.printStackTrace(); - System.out.println("createReplaceInstance - schema corrupt"); - return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR); - } + if (policyType == null) { + log.info("createReplaceInstance - policytype does not exists"); + return new ResponseEntity(HttpStatus.NOT_FOUND); + } - // Create json string from instance - String jsonInstance = null; - try { - System.out.println("createReplaceInstance - raw: " + body); - // Convert Map to JSON - jsonInstance = objectMapper.writeValueAsString(body); - // Print JSON output - System.out.println("createReplaceInstance - instance: " + jsonInstance); + // Create json string from schema + String createSchema = null; + try { + PolicyTypeSchema schema = policyType.getSchema(); + // Convert Map to JSON + String json = objectMapper.writeValueAsString(schema); + // Print JSON output + log.info("createReplaceInstance - schema - json: " + json); + createSchema = objectMapper.writeValueAsString(schema.getCreateSchema()); + log.info("createReplaceInstance - createSchema - string: " + createSchema); + } catch (Exception e) { + e.printStackTrace(); + log.info("createReplaceInstance - schema corrupt"); + return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR); + } - } catch (Exception e) { - e.printStackTrace(); - System.out.println("createReplaceInstance - instancce corrupt"); - return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR); - } + // Create json string from instance + String jsonInstance = null; + try { + log.info("createReplaceInstance - raw: " + body); + // Convert Map to JSON + jsonInstance = objectMapper.writeValueAsString(body); + // Print JSON output + log.info("createReplaceInstance - instance: " + jsonInstance); + + } catch (Exception e) { + e.printStackTrace(); + log.info("createReplaceInstance - instancce corrupt"); + return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR); + } - if (!validateSchema(jsonInstance, createSchema)) { - System.out.println("createReplaceInstance - schema validation failed"); - return new ResponseEntity(HttpStatus.BAD_REQUEST); - } - PolicyInstance policyInstance = new PolicyInstance(policyInstanceId, body); - policyType.createReplaceInstance(policyInstanceId, policyInstance); + if (!validateSchema(jsonInstance, createSchema)) { + log.info("createReplaceInstance - schema validation failed"); + return new ResponseEntity(HttpStatus.BAD_REQUEST); + } + PolicyInstance policyInstance = new PolicyInstance(policyInstanceId, body); + policyType.createReplaceInstance(policyInstanceId, policyInstance); - System.out.println("createReplaceInstance - created/replaced ok"); - return new ResponseEntity(HttpStatus.CREATED); + log.info("createReplaceInstance - created/replaced ok"); + return new ResponseEntity(HttpStatus.CREATED); } public ResponseEntity> getAllInstanceForType(Integer policyTypeId) { - System.out.println("getAllInstanceForType - policyTypeId:" + policyTypeId); + log.info("getAllInstanceForType - policyTypeId:" + policyTypeId); + + if (policyTypeId == null) { + log.info("getAllInstanceForType - bad parameter"); + return new ResponseEntity>(HttpStatus.NOT_FOUND); + } String accept = request.getHeader("Accept"); if (accept != null && accept.contains("application/json")) { try { PolicyType policyType = policyTypes.get(policyTypeId.toString()); if (policyType == null) { - System.out.println("getAllInstanceForType - policytype does not exists"); + log.info("getAllInstanceForType - policytype does not exists"); return new ResponseEntity>(HttpStatus.NOT_FOUND); } Set instances = policyType.getInstances(); @@ -347,57 +358,61 @@ public class A1PApiServiceImpl { // implements A1PApiService { } res = res + iid; } - System.out.println("getAllInstanceForType - " + res); + log.info("getAllInstanceForType - " + res); return new ResponseEntity>(objectMapper.readValue("[" + res + "]", List.class), - HttpStatus.ACCEPTED); + HttpStatus.OK); } catch (IOException e) { e.printStackTrace(); - System.out.println( - "getAllInstanceForType - Couldn't serialize response for content type application/json"); + log.info("getAllInstanceForType - Couldn't serialize response for content type application/json"); return new ResponseEntity>(HttpStatus.INTERNAL_SERVER_ERROR); } } - System.out.println("getAllInstanceForType - not implemented"); + log.info("getAllInstanceForType - not implemented"); return new ResponseEntity>(HttpStatus.NOT_IMPLEMENTED); } public ResponseEntity getPolicyInstance(Integer policyTypeId, String policyInstanceId) { - System.out.println("getPolicyInstance - policyTypeId:" + policyTypeId); - System.out.println("getPolicyInstance - policyInstanceId:" + policyInstanceId); + log.info("getPolicyInstance - policyTypeId:" + policyTypeId); + log.info("getPolicyInstance - policyInstanceId:" + policyInstanceId); + + if (policyTypeId == null || policyInstanceId == null) { + log.info("getPolicyInstance - bad parameter"); + return new ResponseEntity(HttpStatus.NOT_FOUND); + } String accept = request.getHeader("Accept"); if (accept != null && accept.contains("application/json")) { try { PolicyType policyType = policyTypes.get(policyTypeId.toString()); if (policyType == null) { - System.out.println("getPolicyInstance - policytype does not exists"); + log.info("getPolicyInstance - policytype does not exists"); return new ResponseEntity(HttpStatus.NOT_FOUND); } PolicyInstance policyInstance = policyType.getInstance(policyInstanceId); if (policyInstance == null) { - System.out.println("getPolicyInstance - policyinstance does not exists"); + log.info("getPolicyInstance - policyinstance does not exists"); return new ResponseEntity(HttpStatus.NOT_FOUND); } - String json = "{}"; + String json = null; try { - System.out.println("getPolicyInstance - rawschema: " + policyInstance.getJson()); + log.info("getPolicyInstance - rawschema: " + policyInstance.getJson()); // Convert Map to JSON json = objectMapper.writeValueAsString(policyInstance.getJson()); // Print JSON output - System.out.println("getPolicyInstance - schema: " + json); + log.info("getPolicyInstance - schema: " + json); } catch (Exception e) { e.printStackTrace(); - System.out.println("getPolicyInstance - schema corrupt"); + log.info("getPolicyInstance - schema corrupt"); return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR); } - return new ResponseEntity(objectMapper.readValue(json, Object.class), HttpStatus.ACCEPTED); + return new ResponseEntity(objectMapper.readValue(json, Object.class), HttpStatus.OK); } catch (IOException e) { e.printStackTrace(); - System.out.println("getPolicyInstance - policyinstance corrupt"); + log.info("getPolicyInstance - policyinstance corrupt"); return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR); } } @@ -406,31 +421,35 @@ public class A1PApiServiceImpl { // implements A1PApiService { } public ResponseEntity> getStatus(Integer policyTypeId, String policyInstanceId) { - System.out.println("getStatus - policyTypeId:" + policyTypeId); - System.out.println("getStatus - policyInstanceId:" + policyInstanceId); + log.info("getStatus - policyTypeId:" + policyTypeId); + log.info("getStatus - policyInstanceId:" + policyInstanceId); + + if (policyTypeId == null || policyInstanceId == null) { + log.info("getStatus - bad parameters"); + return new ResponseEntity>(HttpStatus.NOT_FOUND); + } String accept = request.getHeader("Accept"); if (accept != null && accept.contains("application/json")) { try { PolicyType policyType = policyTypes.get(policyTypeId.toString()); if (policyType == null) { - System.out.println("getStatus - policytype does not exists"); + log.info("getStatus - policytype does not exists"); return new ResponseEntity>(HttpStatus.NOT_FOUND); } PolicyInstance policyInstance = policyType.getInstance(policyInstanceId); if (policyInstance == null) { - System.out.println("getStatus - policyinstance does not exists"); + log.info("getStatus - policyinstance does not exists"); return new ResponseEntity>(HttpStatus.NOT_FOUND); } - return new ResponseEntity>( - objectMapper.readValue("[ {\n \"handler_id\" : \"X-APP-1\",\n \"status\" : \"enforced\"\n} ]", + objectMapper.readValue("[ {\n \"handler_id\" : \"NearRTRIC-1\",\n \"status\" : \"enforced\"\n} ]", List.class), - HttpStatus.ACCEPTED); + HttpStatus.OK); } catch (IOException e) { e.printStackTrace(); - System.out.println("getStatus - Couldn't serialize response for content type application/json"); + log.info("getStatus - Couldn't serialize response for content type application/json"); return new ResponseEntity>(HttpStatus.INTERNAL_SERVER_ERROR); } } diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/test/.gitignore b/near-rt-ric-simulator/nearric-simulator/nearric-service/test/.gitignore new file mode 100644 index 00000000..aab4112a --- /dev/null +++ b/near-rt-ric-simulator/nearric-simulator/nearric-service/test/.gitignore @@ -0,0 +1 @@ +.tmp* diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/test/pi-template.json b/near-rt-ric-simulator/nearric-simulator/nearric-service/test/pi-template.json new file mode 100644 index 00000000..a6c6bdc9 --- /dev/null +++ b/near-rt-ric-simulator/nearric-simulator/nearric-service/test/pi-template.json @@ -0,0 +1,4 @@ +{ "scope": {"ue_id": "1","flow_id": "3"}, + "statement" : {"gfbr": "l", "mfbr": "2", "priority_level": "3", "pdb": "4"}, + "policy_id": "pi-XXXX" +} \ No newline at end of file diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/test/populate.sh b/near-rt-ric-simulator/nearric-simulator/nearric-service/test/populate.sh new file mode 100755 index 00000000..378fee86 --- /dev/null +++ b/near-rt-ric-simulator/nearric-simulator/nearric-service/test/populate.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +echo "Usage: populate.sh []" + +HOST_PORT="localhost:8080" + +if [ $# == 1 ]; then + echo "Setting host and port from cmd line: "$1 + HOST_PORT=$1 +fi + +echo "=======================================" +echo "Using host and port:" $HOST_PORT +echo "=======================================" + + +PT_MAX=10 +PI_MAX=20 +PI_ID=0 +pt=0 +while [ $pt -lt $PT_MAX ]; do + pi=0 + PATTERN="s/XXXX/${pt}/g" + sed $PATTERN pt-template.json > .tmp.json + curl -v -X PUT --header 'Content-Type: application/json' --header 'Accept: */*' -d @.tmp.json 'http://'$HOST_PORT'/a1-p/policytypes/'$pt + while [ $pi -lt $PI_MAX ]; do + echo $pt"--"$pi"-"$PI_ID + + PATTERN="s/XXXX/${PI_ID}/g" + sed $PATTERN pi-template.json > .tmp.json + curl -v -X PUT --header 'Content-Type: application/json' --header 'Accept: */*' -d @.tmp.json 'http://'$HOST_PORT'/a1-p/policytypes/'$pt'/policies/'$PI_ID + let pi=pi+1 + let PI_ID=PI_ID+1 + done + let pt=pt+1 +done + +curl -v --header 'Accept: application/json' 'http://'$HOST_PORT'/a1-p/policytypes/' +curl -v --header 'Accept: application/json' 'http://'$HOST_PORT'/a1-p/policytypes/1/policies' diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/test/pt-template.json b/near-rt-ric-simulator/nearric-simulator/nearric-service/test/pt-template.json new file mode 100644 index 00000000..8fa16b13 --- /dev/null +++ b/near-rt-ric-simulator/nearric-simulator/nearric-service/test/pt-template.json @@ -0,0 +1,49 @@ +{ + "description": "Policy type XXXX", + "name": "PT XXXX", + "policy_type_id": XXXX, + "create_schema": + + + { + "$id": "https://est.tech/policy-type.schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Policy type schema XXXX", + "description": "Policy type schema for qos", + "type": "object", + "properties": { + "policy_id": { + "description": "Identity of the policy", + "type": "string"}, + "scope": { + "type": "object", + "properties": { + "ue_id": { + "description": "User identity", + "type": "string"}, + "flow_id": { + "description": "Identity of the flow", + "type": "string"} + }, "required": ["ue_id", "flow_id"] + }, + "statement": { + "type": "object", + "properties": { + "gfbr": { + "description": "Guaranteed Flow Bit Rate", + "type": "string"}, + "mfbr": { + "description": "Maximum Flow Bit Rate", + "type": "string"}, + "priority_level": { + "description": "Priority Level", + "type": "string"}, + "pdb": { + "description": "Packet Delay Budget", + "type": "string"} + }, "required": ["gfbr", "mfbr", "priority_level", "pdb"] + } + }, "required": ["policy_id", "scope", "statement"] + } + +} diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/test/test-api.sh b/near-rt-ric-simulator/nearric-simulator/nearric-service/test/test-api.sh new file mode 100755 index 00000000..fd6b1d09 --- /dev/null +++ b/near-rt-ric-simulator/nearric-simulator/nearric-service/test/test-api.sh @@ -0,0 +1,126 @@ +#!/bin/bash + +#Script for basic testing of the A1 simulator API +#Note: policy is reset before test + +HOST_PORT="localhost:8080" + +echo "Usage: populate.sh []" + +HOST_PORT="localhost:8080" + +if [ $# == 1 ]; then + echo "Setting host and port from cmd line: "$1 + HOST_PORT=$1 +fi + +echo "=======================================" +echo "Using host and port:" $HOST_PORT +echo "=======================================" + +echo "=======================================" +echo "Resetting db" +curl 'http://'$HOST_PORT'/reset' +echo "=======================================" + +#Create a policy type +create_pt() { + PATTERN="s/XXXX/${1}/g" + sed $PATTERN pt-template.json > .tmp.json + res=$(curl -sw "%{http_code}" -X PUT --header 'Content-Type: application/json' --header 'Accept: */*' -d @.tmp.json 'http://'${HOST_PORT}'/a1-p/policytypes/'$1) + http_code="${res:${#res}-3}" + echo "Response code: " $http_code +} + +get_pt() { + res=$(curl -sw "%{http_code}" --header 'Accept: application/json' 'http://'${HOST_PORT}'/a1-p/policytypes/'$1) + http_code="${res:${#res}-3}" + echo "Response code: " $http_code + echo "Response: " ${res:0:${#res}-3} +} + +get_pts() { + res=$(curl -sw "%{http_code}" --header 'Accept: application/json' 'http://'${HOST_PORT}'/a1-p/policytypes/') + http_code="${res:${#res}-3}" + echo "Response code: " $http_code + echo "Response: " ${res:0:${#res}-3} +} + +del_pt() { + res=$(curl -sw "%{http_code}" -X DELETE --header 'Accept: */*' 'http://'${HOST_PORT}'/a1-p/policytypes/'$1) + http_code="${res:${#res}-3}" + echo "Response code: " $http_code +} + +get_pis() { + res=$(curl -sw "%{http_code}" --header 'Accept: application/json' 'http://'${HOST_PORT}'/a1-p/policytypes/'${1}'/policies') + http_code="${res:${#res}-3}" + echo "Response code: " $http_code + echo "Response: " ${res:0:${#res}-3} +} + +create_pi() { + PATTERN="s/XXXX/${2}/g" + sed $PATTERN pi-template.json > .tmp.json + res=$(curl -sw "%{http_code}" -X PUT --header 'Content-Type: application/json' --header 'Accept: */*' -d @.tmp.json 'http://'${HOST_PORT}'/a1-p/policytypes/'$1'/policies/'$2) + http_code="${res:${#res}-3}" + echo "Response code: " $http_code +} + +get_pi() { + res=$(curl -sw "%{http_code}" --header 'Accept: application/json' 'http://'${HOST_PORT}'/a1-p/policytypes/'${1}'/policies/'$2) + http_code="${res:${#res}-3}" + echo "Response code: " $http_code + echo "Response: " ${res:0:${#res}-3} +} + +del_pi() { + res=$(curl -sw "%{http_code}" -X DELETE --header 'Accept: application/json' 'http://'${HOST_PORT}'/a1-p/policytypes/'${1}'/policies/'$2) + http_code="${res:${#res}-3}" + echo "Response code: " $http_code +} + +stat_pi() { + res=$(curl -sw "%{http_code}" --header 'Accept: application/json' 'http://'${HOST_PORT}'/a1-p/policytypes/'${1}'/policies/'$2'/status') + http_code="${res:${#res}-3}" + echo "Response code: " $http_code + echo "Response: " ${res:0:${#res}-3} +} + + +echo "== Create policy type 23" +create_pt 23 +echo "== Get policy type 23" +get_pt 23 +echo "== Create policy type 23 again" +create_pt 23 +echo "== Create policy type 24" +create_pt 24 +echo "== Get all policy types" +get_pts +echo "== Delete policy type 24" +del_pt 24 +echo "== Delete policy type 24 again" +del_pt 24 +echo "== Get all policy types" +get_pts +echo "== Get all policy instancess for type 23" +get_pis 23 +echo "== Create policy instance 16 for type 23" +create_pi 23 16 +echo "== Create policy instance 16 for type 23 again" +create_pi 23 16 +echo "== Get policy instance 16 for type 23" +get_pi 23 16 +echo "== Get missing policy instance 17 for type 23" +get_pi 23 17 +echo "== Create policy instance 18 for type 23" +create_pi 23 18 +echo "== Get all policy instances for type 23" +get_pis 23 +echo "== Delete policy instance 18 for type 23" +del_pi 23 18 +echo "== Get all policy instances for type 23" +get_pis 23 +echo "== Get status for policy instance 16 for type 23" +stat_pi 23 16 -- 2.16.6