Added queryparam 'ric' for get_types REST API 89/2089/1
authorPatrikBuhr <patrik.buhr@est.tech>
Fri, 20 Dec 2019 08:14:12 +0000 (09:14 +0100)
committerPatrikBuhr <patrik.buhr@est.tech>
Fri, 20 Dec 2019 11:42:25 +0000 (12:42 +0100)
Change-Id: I1bb32e895d8e8c4ab03f34e9367beb6eba633ab9
Issue-ID: NONRTRIC-84
Signed-off-by: PatrikBuhr <patrik.buhr@est.tech>
policy-agent/src/main/java/org/oransc/policyagent/SwaggerConfig.java
policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfigParser.java
policy-agent/src/main/java/org/oransc/policyagent/controllers/PolicyController.java
policy-agent/src/main/java/org/oransc/policyagent/controllers/RicRepositoryController.java
policy-agent/src/main/java/org/oransc/policyagent/controllers/ServiceController.java
policy-agent/src/main/java/org/oransc/policyagent/repository/Policies.java
policy-agent/src/main/java/org/oransc/policyagent/repository/Rics.java
policy-agent/src/main/java/org/oransc/policyagent/repository/Services.java
policy-agent/src/main/java/org/oransc/policyagent/tasks/StartupService.java
policy-agent/src/test/java/org/oransc/policyagent/ApplicationTest.java

index cfb9a50..f3b4a5a 100644 (file)
@@ -22,6 +22,7 @@ package org.oransc.policyagent;
 
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+
 import springfox.documentation.builders.PathSelectors;
 import springfox.documentation.builders.RequestHandlerSelectors;
 import springfox.documentation.spi.DocumentationType;
@@ -37,10 +38,11 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
 @Configuration
 @EnableSwagger2
 public class SwaggerConfig {
-  @Bean
-  public Docket api() {
-    return new Docket(DocumentationType.SWAGGER_2).select()
-        .apis(RequestHandlerSelectors.basePackage("org.oransc.policyagent.controllers"))
-        .paths(PathSelectors.any()).build();
-  }
+    @Bean
+    public Docket api() {
+        return new Docket(DocumentationType.SWAGGER_2).select() //
+            .apis(RequestHandlerSelectors.basePackage("org.oransc.policyagent.controllers")) //
+            .paths(PathSelectors.any()) //
+            .build();
+    }
 }
index 86f4e59..400a681 100644 (file)
@@ -67,14 +67,6 @@ class ApplicationConfigParser {
         return elem;
     }
 
-    private static String getAsString(JsonObject obj, String memberName) throws ServiceException {
-        return get(obj, memberName).getAsString();
-    }
-
-    private static JsonObject getAsJson(JsonObject obj, String memberName) throws ServiceException {
-        return get(obj, memberName).getAsJsonObject();
-    }
-
     private JsonArray getAsJsonArray(JsonObject obj, String memberName) throws ServiceException {
         return get(obj, memberName).getAsJsonArray();
     }
index 8c6964e..97f9f4c 100644 (file)
 
 package org.oransc.policyagent.controllers;
 
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.annotations.ApiResponses;
 import java.util.Collection;
 import java.util.Vector;
 
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+
 import org.oransc.policyagent.configuration.ApplicationConfig;
 import org.oransc.policyagent.exceptions.ServiceException;
 import org.oransc.policyagent.repository.ImmutablePolicy;
@@ -38,7 +35,6 @@ import org.oransc.policyagent.repository.PolicyType;
 import org.oransc.policyagent.repository.PolicyTypes;
 import org.oransc.policyagent.repository.Ric;
 import org.oransc.policyagent.repository.Rics;
-import org.oransc.policyagent.repository.Services;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
@@ -49,51 +45,55 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+
 @RestController
 @Api(value = "Policy Management API")
 public class PolicyController {
 
-    private final ApplicationConfig appConfig;
     private final Rics rics;
     private final PolicyTypes policyTypes;
     private final Policies policies;
-    private final Services services;
     private static Gson gson = new GsonBuilder() //
         .serializeNulls() //
         .create(); //
 
     @Autowired
-    PolicyController(ApplicationConfig config, PolicyTypes types, Policies policies, Rics rics, Services services) {
-        this.appConfig = config;
+    PolicyController(ApplicationConfig config, PolicyTypes types, Policies policies, Rics rics) {
         this.policyTypes = types;
         this.policies = policies;
         this.rics = rics;
-        this.services = services;
     }
 
     @GetMapping("/policy_types")
     @ApiOperation(value = "Returns all the policy types")
-    @ApiResponses(
-        value = {
-            @ApiResponse(code = 200, message = "Policy Types found")
-        })
-    public ResponseEntity<String> getPolicyTypes() {
-
-        Collection<PolicyType> types = this.policyTypes.getAll();
-        return new ResponseEntity<String>(policyTypesToJson(types), HttpStatus.OK);
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "Policy Types found")})
+    public ResponseEntity<String> getPolicyTypes(@RequestParam(name = "ric", required = false) String ricName) {
+        if (ricName == null) {
+            Collection<PolicyType> types = this.policyTypes.getAll();
+            return new ResponseEntity<String>(policyTypesToJson(types), HttpStatus.OK);
+        } else {
+            try {
+                Collection<PolicyType> types = rics.getRic(ricName).getSupportedPolicyTypes();
+                return new ResponseEntity<String>(policyTypesToJson(types), HttpStatus.OK);
+            } catch (ServiceException e) {
+                return new ResponseEntity<String>(e.toString(), HttpStatus.NOT_FOUND);
+            }
+        }
     }
 
     @GetMapping("/policy")
     @ApiOperation(value = "Returns the policy")
     @ApiResponses(
-        value = {
-            @ApiResponse(code = 200, message = "Policy found"),
-            @ApiResponse(code = 204, message = "Policy is not found")
-        })
+        value = {@ApiResponse(code = 200, message = "Policy found"),
+            @ApiResponse(code = 204, message = "Policy is not found")})
     public ResponseEntity<String> getPolicy( //
         @RequestParam(name = "instance", required = true) String instance) {
         try {
-            Policy p = policies.get(instance);
+            Policy p = policies.getPolicy(instance);
             return new ResponseEntity<String>(p.json(), HttpStatus.OK);
         } catch (ServiceException e) {
             return new ResponseEntity<String>(e.getMessage(), HttpStatus.NO_CONTENT);
@@ -102,23 +102,17 @@ public class PolicyController {
 
     @DeleteMapping("/policy")
     @ApiOperation(value = "Deletes the policy")
-    @ApiResponses(
-        value = {
-            @ApiResponse(code = 204, message = "Policy deleted")
-        })
+    @ApiResponses(value = {@ApiResponse(code = 204, message = "Policy deleted")})
     public ResponseEntity<Void> deletePolicy( //
         @RequestParam(name = "instance", required = true) String instance) {
 
-        Policy p = policies.removeId(instance);
+        policies.removeId(instance);
         return new ResponseEntity<>(HttpStatus.NO_CONTENT);
     }
 
     @GetMapping("/policies")
     @ApiOperation(value = "Returns the policies")
-    @ApiResponses(
-        value = {
-            @ApiResponse(code = 200, message = "Polcies found")
-        })
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "Polcies found")})
     public ResponseEntity<String> getPolicies( //
         @RequestParam(name = "type", required = false) String type, //
         @RequestParam(name = "ric", required = false) String ric, //
@@ -193,10 +187,7 @@ public class PolicyController {
 
     @PutMapping(path = "/policy")
     @ApiOperation(value = "Create the policy")
-    @ApiResponses(
-        value = {
-            @ApiResponse(code = 201, message = "Policy created")
-        })
+    @ApiResponses(value = {@ApiResponse(code = 201, message = "Policy created")})
     public ResponseEntity<String> putPolicy( //
         @RequestParam(name = "type", required = true) String type, //
         @RequestParam(name = "instance", required = true) String instanceId, //
index 175d5eb..db17fb2 100644 (file)
@@ -22,6 +22,7 @@ package org.oransc.policyagent.controllers;
 
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
index 47123f2..844d6e8 100644 (file)
 
 package org.oransc.policyagent.controllers;
 
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-
 import java.time.Duration;
 import java.util.Collection;
 import java.util.Vector;
 
-import org.oransc.policyagent.configuration.ApplicationConfig;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+
 import org.oransc.policyagent.exceptions.ServiceException;
 import org.oransc.policyagent.repository.Service;
 import org.oransc.policyagent.repository.Services;
@@ -43,15 +42,13 @@ import org.springframework.web.bind.annotation.RestController;
 @RestController
 public class ServiceController {
 
-    private final ApplicationConfig appConfig;
     private final Services services;
     private static Gson gson = new GsonBuilder() //
         .serializeNulls() //
         .create(); //
 
     @Autowired
-    ServiceController(ApplicationConfig config, Services services) {
-        this.appConfig = config;
+    ServiceController(Services services) {
         this.services = services;
     }
 
index 9895ff1..7b7b17c 100644 (file)
@@ -70,7 +70,7 @@ public class Policies {
         return map.values();
     }
 
-    public synchronized Policy get(String id) throws ServiceException {
+    public synchronized Policy getPolicy(String id) throws ServiceException {
         Policy p = policiesId.get(id);
         if (p == null) {
             throw new ServiceException("Could not find policy: " + id);
index 9ea6db6..153d193 100644 (file)
@@ -24,6 +24,8 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.oransc.policyagent.exceptions.ServiceException;
+
 /**
  * Dynamic representation of all Rics in the system.
  */
@@ -38,7 +40,15 @@ public class Rics {
         return rics.values();
     }
 
-    public Ric getRic(String name) {
+    public Ric getRic(String name) throws ServiceException {
+        Ric ric = rics.get(name);
+        if (ric == null) {
+            throw new ServiceException("Could not find ric: " + name);
+        }
+        return ric;
+    }
+
+    public Ric get(String name) {
         return rics.get(name);
     }
 
index 789ea2e..509b2f5 100644 (file)
@@ -49,6 +49,7 @@ public class Services {
     }
 
     public synchronized void put(Service service) {
+        logger.debug("Put service: " + service.getName());
         services.put(service.getName(), service);
     }
 
index f7420a0..cd81673 100644 (file)
@@ -71,7 +71,7 @@ public class StartupService {
         Flux.fromIterable(applicationConfig.getRicConfigs()) //
             .map(ricConfig -> new Ric(ricConfig)) //
             .doOnNext(ric -> logger.debug("Handling ric: {}", ric.getConfig().name())) //
-            .flatMap(this::addPolicyTypesForRic)
+            .flatMap(this::addPolicyTypesForRic) //
             .flatMap(this::deletePoliciesForRic) //
             .flatMap(this::setRicToActive) //
             .flatMap(this::addRicToRepo) //
index 83ee760..0d00daa 100644 (file)
@@ -21,6 +21,7 @@
 package org.oransc.policyagent;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.Assert.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 
 import com.google.gson.Gson;
@@ -132,7 +133,6 @@ public class ApplicationTest {
 
         url = baseUrl() + "/rics?policyType=ANR";
         rsp = this.restTemplate.getForObject(url, String.class);
-        // TODO this should test that the correct types are retrieved from the RIC
         assertThat(rsp).isEqualTo("[]");
     }
 
@@ -151,11 +151,11 @@ public class ApplicationTest {
 
         String url = baseUrl() + "/policy?type=type1&instance=instance1&ric=ric1&service=service1";
         String json = "{}";
-        addPolicyType("type1");
+        addPolicyType("type1", "ric1");
 
         this.restTemplate.put(url, json);
 
-        Policy policy = policies.get("instance1");
+        Policy policy = policies.getPolicy("instance1");
 
         assertThat(policy).isNotNull();
         assertThat(policy.id()).isEqualTo("instance1");
@@ -166,18 +166,22 @@ public class ApplicationTest {
         System.out.println(rsp);
     }
 
-    private PolicyType addPolicyType(String name) {
+    private PolicyType addPolicyType(String policyTypeName, String ricName) {
         PolicyType type = ImmutablePolicyType.builder() //
-            .name(name) //
+            .name(policyTypeName) //
             .build();
 
         policyTypes.put(type);
+        addRic(ricName).addSupportedPolicyType(type);
         return type;
     }
 
-    private Ric addRic(String name) {
+    private Ric addRic(String ricName) {
+        if (rics.get(ricName) != null) {
+            return rics.get(ricName);
+        }
         Vector<String> mes = new Vector<>();
-        RicConfig conf = ImmutableRicConfig.builder().name(name).baseUrl("baseUrl").managedElementIds(mes).build();
+        RicConfig conf = ImmutableRicConfig.builder().name(ricName).baseUrl("baseUrl").managedElementIds(mes).build();
         Ric ric = new Ric(conf);
         this.rics.put(ric);
         return ric;
@@ -189,7 +193,7 @@ public class ApplicationTest {
             .json("{}") //
             .ownerServiceName(service) //
             .ric(rics.getRic(ric)) //
-            .type(addPolicyType(typeName)) //
+            .type(addPolicyType(typeName, ric)) //
             .lastModified("lastModified").build();
         policies.put(p);
         return p;
@@ -235,23 +239,28 @@ public class ApplicationTest {
             return null;
         }
         return gson.fromJson(json, new TypeToken<T>() {}.getType());
+
     }
 
     @Test
     public void testGetPolicyTypes() throws Exception {
         reset();
-        addPolicy("id1", "type1", "service1");
-        addPolicy("id2", "type2", "service2");
+        addPolicyType("type1", "ric1");
+        addPolicyType("type2", "ric2");
 
         String url = baseUrl() + "/policy_types";
         String rsp = this.restTemplate.getForObject(url, String.class);
-        System.out.println(rsp);
         assertThat(rsp).contains("type1");
         assertThat(rsp).contains("type2");
 
         List<PolicyTypeInfo> info = parseList(rsp, PolicyTypeInfo.class);
-        System.out.println(info.size());
+        assertEquals(2, info.size());
 
+        url = baseUrl() + "/policy_types?ric=ric1";
+        rsp = this.restTemplate.getForObject(url, String.class);
+        assertThat(rsp).contains("type1");
+        info = parseList(rsp, PolicyTypeInfo.class);
+        assertEquals(1, info.size());
     }
 
     @Test