Simulator updates 58/1258/2
authorBjornMagnussonXA <bjorn.magnusson@est.tech>
Tue, 15 Oct 2019 06:42:08 +0000 (08:42 +0200)
committerBjornMagnussonXA <bjorn.magnusson@est.tech>
Tue, 29 Oct 2019 16:15:44 +0000 (17:15 +0100)
Change-Id: I9b7ac08c190ed10decce7b5ed700905729b565ac

Issue-ID: NONRTRIC-46

Signed-off-by: BjornMagnussonXA <bjorn.magnusson@est.tech>
Change-Id: Ia79ff05419307d2dfc526d384a232449af3400e5

near-rt-ric-simulator/nearric-simulator/nearric-service/Dockerfile [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/nearric-service/pom.xml
near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/docker/Dockerfile [deleted file]
near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/controller/A1PApiController.java
near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/model/PolicyType.java
near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/service/A1PApiServiceImpl.java
near-rt-ric-simulator/nearric-simulator/nearric-service/test/.gitignore [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/nearric-service/test/pi-template.json [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/nearric-service/test/populate.sh [new file with mode: 0755]
near-rt-ric-simulator/nearric-simulator/nearric-service/test/pt-template.json [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/nearric-service/test/test-api.sh [new file with mode: 0755]

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 (file)
index 0000000..4a85d00
--- /dev/null
@@ -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
index 383e846..e35337c 100644 (file)
                <java.version>1.8</java.version>
                <okhttp-version>2.7.5</okhttp-version>
                <gson-version>2.8.1</gson-version>
+               <dockerfile-maven-version>1.4.2</dockerfile-maven-version>
        </properties>
        <dependencies>
                <dependency>
                        <groupId>org.oran.nearric</groupId>
                        <artifactId>a1-med-api</artifactId>
-                       <version>0.10.3-SNAPSHOT</version>
+                       <version>1.0.0-SNAPSHOT</version>
                </dependency>
                <dependency>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-web</artifactId>
+                       <exclusions>
+                               <exclusion>
+                                       <groupId>org.springframework.boot</groupId>
+                                       <artifactId>spring-boot-starter-logging</artifactId>
+                               </exclusion>
+                       </exclusions>
                </dependency>
                <dependency>
                        <groupId>org.springframework.boot</groupId>
                                        </execution>
                                </executions>
                        </plugin>
+                       <plugin>
+                               <groupId>com.spotify</groupId>
+                               <artifactId>dockerfile-maven-plugin</artifactId>
+                               <version>${dockerfile-maven-version}</version>
+                               <executions>
+                                       <execution>
+                                               <id>default</id>
+                                               <goals>
+                                                       <goal>build</goal>
+                                                       <goal>push</goal>
+                                               </goals>
+                                       </execution>
+                               </executions>
+                               <configuration>
+                                       <repository>nearric-simulator</repository>
+                                       <tag>${project.version}</tag>
+                                       <buildArgs>
+                                               <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
+                                       </buildArgs>
+                               </configuration>
+                       </plugin>
                </plugins>
        </build>
 </project>
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 (file)
index 8a862e8..0000000
+++ /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
index d2a0b3f..d33e6c6 100644 (file)
@@ -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<Void> 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<Void> a1ControllerGetHealthcheck() {
-      String accept = request.getHeader("Accept");
-      return new ResponseEntity<Void>(HttpStatus.ACCEPTED);
+      return new ResponseEntity<Void>(HttpStatus.OK);
   }
 
   public ResponseEntity<Object> a1ControllerGetPolicyInstance(@ApiParam(value = "",required=true) @PathVariable("policy_type_id") Integer policyTypeId,@ApiParam(value = "",required=true) @PathVariable("policy_instance_id") String policyInstanceId) {
index f63a3b3..5429cab 100644 (file)
@@ -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;
index 1521ed7..a79cfa4 100644 (file)
 
 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<ProcessingMessage> 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<Void> 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<Void>(HttpStatus.BAD_REQUEST);
+               }
 
+               if (policyTypeSchema.getPolicyTypeId().intValue() != policyTypeId.intValue()) {
+                       log.info("createReplaceType - policytype id mismatch between request and policyTypeSchema");
+                       return new ResponseEntity<Void>(HttpStatus.BAD_REQUEST);
+               }
 
-       public ResponseEntity<Void> 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<Void>(HttpStatus.BAD_REQUEST);
-                               }
-
-                               if (policyTypes.containsKey(policyTypeId.toString())) {
-                                       System.out.println("createReplaceType - policytype already exists");
-                                       return new ResponseEntity<Void>(HttpStatus.BAD_REQUEST);
-                               }
+               if (policyTypes.containsKey(policyTypeId.toString())) {
+                       log.info("createReplaceType - policytype already exists");
+                       return new ResponseEntity<Void>(HttpStatus.BAD_REQUEST);
+               }
 
-                               PolicyType policyType = new PolicyType(policyTypeId, body);
-                               policyTypes.put(policyTypeId.toString(), policyType);
-                       }
-                       System.out.println("createReplaceType - created ok");
-                       return new ResponseEntity<Void>(HttpStatus.CREATED);
+               PolicyType policyType = new PolicyType(policyTypeId, policyTypeSchema);
+               policyTypes.put(policyTypeId.toString(), policyType);
+               log.info("createReplaceType - created ok");
 
+               return new ResponseEntity<Void>(HttpStatus.CREATED);
        }
 
        public ResponseEntity<Void> 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<Void>(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<Void>(HttpStatus.NOT_FOUND);
-                       }
+               if (policyType == null) {
+                       log.info("deleteType - policytype does not exists");
+                       return new ResponseEntity<Void>(HttpStatus.NOT_FOUND);
+               }
 
-                       if (policyType.getNumberInstances() > 0) {
-                               System.out.println("deleteType - cannot delete, instances exists");
-                               return new ResponseEntity<Void>(HttpStatus.BAD_REQUEST);
-                       }
-                       policyTypes.remove(policyTypeId.toString());
+               if (policyType.getNumberInstances() > 0) {
+                       log.info("deleteType - cannot delete, instances exists");
+                       return new ResponseEntity<Void>(HttpStatus.BAD_REQUEST);
+               }
+               policyTypes.remove(policyTypeId.toString());
 
-                       System.out.println("deleteType - deleted ok");
-                       return new ResponseEntity<Void>(HttpStatus.NO_CONTENT);
+               log.info("deleteType - deleted ok");
+               return new ResponseEntity<Void>(HttpStatus.NO_CONTENT);
        }
 
        public ResponseEntity<Void> 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<Void>(HttpStatus.NOT_FOUND);
+               }
 
-                       if (policyType == null) {
-                               System.out.println("deleteType - policytype does not exists");
-                               return new ResponseEntity<Void>(HttpStatus.NOT_FOUND);
-                       }
-                       PolicyInstance policyInstance = policyType.getInstance(policyInstanceId);
-                       if (policyInstance == null) {
-                               System.out.println("deleteType - instance does not exists");
-                               return new ResponseEntity<Void>(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<Void>(HttpStatus.NOT_FOUND);
+               }
+               PolicyInstance policyInstance = policyType.getInstance(policyInstanceId);
+               if (policyInstance == null) {
+                       log.info("deleteType - instance does not exists");
+                       return new ResponseEntity<Void>(HttpStatus.NOT_FOUND);
+               }
+               policyType.delete(policyInstanceId);
 
-                       System.out.println("deleteInstance - deleted ok");
-                       return new ResponseEntity<Void>(HttpStatus.NO_CONTENT);
+               log.info("deleteInstance - deleted ok");
+               return new ResponseEntity<Void>(HttpStatus.NO_CONTENT);
 
        }
 
        public ResponseEntity<PolicyTypeSchema> 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<PolicyTypeSchema>(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<PolicyTypeSchema>(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<PolicyTypeSchema>(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<PolicyTypeSchema>(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<PolicyTypeSchema>(HttpStatus.INTERNAL_SERVER_ERROR);
                        }
                }
-               System.out.println("getPolicyTypeSchema - not implemented");
+               log.info("getPolicyTypeSchema - not implemented");
                return new ResponseEntity<PolicyTypeSchema>(HttpStatus.NOT_IMPLEMENTED);
        }
 
        public ResponseEntity<List<Integer>> 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<List<Integer>>(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<List<Integer>>(HttpStatus.INTERNAL_SERVER_ERROR);
                        }
                }
-               System.out.println("getAllTypes - not implemented");
+               log.info("getAllTypes - not implemented");
                return new ResponseEntity<List<Integer>>(HttpStatus.NOT_IMPLEMENTED);
        }
 
        public ResponseEntity<Void> 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<Void>(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<Void>(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<Void>(HttpStatus.INTERNAL_SERVER_ERROR);
-                       }
+               if (policyType == null) {
+                       log.info("createReplaceInstance - policytype does not exists");
+                       return new ResponseEntity<Void>(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<Void>(HttpStatus.INTERNAL_SERVER_ERROR);
+               }
 
-                       } catch (Exception e) {
-                               e.printStackTrace();
-                               System.out.println("createReplaceInstance - instancce corrupt");
-                               return new ResponseEntity<Void>(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<Void>(HttpStatus.INTERNAL_SERVER_ERROR);
+               }
 
-                       if (!validateSchema(jsonInstance, createSchema)) {
-                               System.out.println("createReplaceInstance - schema validation failed");
-                               return new ResponseEntity<Void>(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<Void>(HttpStatus.BAD_REQUEST);
+               }
+               PolicyInstance policyInstance = new PolicyInstance(policyInstanceId, body);
+               policyType.createReplaceInstance(policyInstanceId, policyInstance);
 
-                       System.out.println("createReplaceInstance - created/replaced ok");
-                       return new ResponseEntity<Void>(HttpStatus.CREATED);
+               log.info("createReplaceInstance - created/replaced ok");
+               return new ResponseEntity<Void>(HttpStatus.CREATED);
 
        }
 
        public ResponseEntity<List<String>> 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<List<String>>(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<List<String>>(HttpStatus.NOT_FOUND);
                                }
                                Set<String> 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<List<String>>(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<List<String>>(HttpStatus.INTERNAL_SERVER_ERROR);
                        }
                }
-               System.out.println("getAllInstanceForType - not implemented");
+               log.info("getAllInstanceForType - not implemented");
                return new ResponseEntity<List<String>>(HttpStatus.NOT_IMPLEMENTED);
 
        }
 
        public ResponseEntity<Object> 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<Object>(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<Object>(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<Object>(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<Object>(HttpStatus.INTERNAL_SERVER_ERROR);
                                }
 
-                               return new ResponseEntity<Object>(objectMapper.readValue(json, Object.class), HttpStatus.ACCEPTED);
+                               return new ResponseEntity<Object>(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<Object>(HttpStatus.INTERNAL_SERVER_ERROR);
                        }
                }
@@ -406,31 +421,35 @@ public class A1PApiServiceImpl { // implements A1PApiService {
        }
 
        public ResponseEntity<List<InlineResponse200>> 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<List<InlineResponse200>>(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<List<InlineResponse200>>(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<List<InlineResponse200>>(HttpStatus.NOT_FOUND);
                                }
 
-
                                return new ResponseEntity<List<InlineResponse200>>(
-                                               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<List<InlineResponse200>>(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 (file)
index 0000000..aab4112
--- /dev/null
@@ -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 (file)
index 0000000..a6c6bdc
--- /dev/null
@@ -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 (executable)
index 0000000..378fee8
--- /dev/null
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+echo "Usage: populate.sh [<host:port>]"
+
+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 (file)
index 0000000..8fa16b1
--- /dev/null
@@ -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 (executable)
index 0000000..fd6b1d0
--- /dev/null
@@ -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>]"
+
+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