Fix bug in SDNC, read controller info from yaml 83/2383/3
authorRehanRaza <muhammad.rehan.raza@est.tech>
Thu, 30 Jan 2020 12:14:08 +0000 (13:14 +0100)
committerRehanRaza <muhammad.rehan.raza@est.tech>
Thu, 30 Jan 2020 15:09:59 +0000 (16:09 +0100)
Change-Id: I2fa69844d9b8ba3d82a84b04b9dd658c9fad5c59
Issue-ID: NONRTRIC-108
Signed-off-by: RehanRaza <muhammad.rehan.raza@est.tech>
policy-agent/config/application.yaml
policy-agent/src/main/java/org/oransc/policyagent/BeanFactory.java
policy-agent/src/main/java/org/oransc/policyagent/clients/A1ClientFactory.java
policy-agent/src/main/java/org/oransc/policyagent/clients/SdncOscA1Client.java
policy-agent/src/main/java/org/oransc/policyagent/clients/SdnrOnapA1Client.java
policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfig.java
policy-agent/src/test/java/org/oransc/policyagent/utils/MockA1ClientFactory.java
sdnc-a1-controller/northbound/nonrt-ric-api/provider/src/main/java/org/onap/sdnc/northbound/restadapter/NearRicUrlProvider.java

index 5b6df77..aec36d0 100644 (file)
@@ -19,6 +19,9 @@ logging:
   file: /var/log/policy-agent/application.log
 app:
   filepath: /opt/app/policy-agent/config/application_configuration.json
+  a1ControllerBaseUrl: http://a1-controller-container:8181
+  a1ControllerUsername: admin
+  a1ControllerPassword: Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
 
 server:
    port : 8081
index 8ed1c21..8297b22 100644 (file)
@@ -60,7 +60,7 @@ class BeanFactory {
 
     @Bean
     A1ClientFactory getA1ClientFactory() {
-        return new A1ClientFactory();
+        return new A1ClientFactory(getApplicationConfig());
     }
 
     @Bean
index 7b7e0ce..c150c08 100644 (file)
 package org.oransc.policyagent.clients;
 
 import org.oransc.policyagent.clients.A1Client.A1ProtocolType;
+import org.oransc.policyagent.configuration.ApplicationConfig;
 import org.oransc.policyagent.exceptions.ServiceException;
 import org.oransc.policyagent.repository.Ric;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import reactor.core.publisher.Mono;
 
 public class A1ClientFactory {
 
     private static final Logger logger = LoggerFactory.getLogger(A1ClientFactory.class);
 
+    private final ApplicationConfig appConfig;
+
+    @Autowired
+    public A1ClientFactory(ApplicationConfig appConfig) {
+        this.appConfig = appConfig;
+    }
+
     public Mono<A1Client> createA1Client(Ric ric) {
         return getProtocolVersion(ric) //
             .flatMap(version -> createA1Client(ric, version));
@@ -68,11 +77,13 @@ public class A1ClientFactory {
     }
 
     protected A1Client createSdncOscA1Client(Ric ric) {
-        return new SdncOscA1Client(ric.getConfig());
+        return new SdncOscA1Client(ric.getConfig(), appConfig.getA1ControllerBaseUrl(),
+            appConfig.getA1ControllerUsername(), appConfig.getA1ControllerPassword());
     }
 
     protected A1Client createSdnrOnapA1Client(Ric ric) {
-        return new SdnrOnapA1Client(ric.getConfig());
+        return new SdnrOnapA1Client(ric.getConfig(), appConfig.getA1ControllerBaseUrl(),
+            appConfig.getA1ControllerUsername(), appConfig.getA1ControllerPassword());
     }
 
     private Mono<A1Client.A1ProtocolType> fetchVersion(Ric ric, A1Client a1Client) {
index a91f9f8..2f8fab4 100644 (file)
@@ -37,17 +37,21 @@ import reactor.core.publisher.Mono;
 
 public class SdncOscA1Client implements A1Client {
     private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-    private static final String A1_CONTROLLER_URL = "http://a1-controller-container:8181/restconf/operations";
-    private static final String A1_CONTROLLER_USERNAME = "admin";
-    private static final String A1_CONTROLLER_PASSWORD = "Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U";
 
+    private String a1ControllerBaseUrl;
+    private String a1ControllerUsername;
+    private String a1ControllerPassword;
     private final RicConfig ricConfig;
     private final AsyncRestClient restClient;
 
-    public SdncOscA1Client(RicConfig ricConfig) {
+    public SdncOscA1Client(RicConfig ricConfig, String baseUrl, String username, String password) {
         this.ricConfig = ricConfig;
-        this.restClient = new AsyncRestClient(A1_CONTROLLER_URL);
-        logger.debug("SdncOscA1Client for ric: {}", this.ricConfig.name());
+        this.a1ControllerBaseUrl = baseUrl;
+        this.a1ControllerUsername = username;
+        this.a1ControllerPassword = password;
+        this.restClient = new AsyncRestClient(a1ControllerBaseUrl + "/restconf/operations");
+        logger.debug("SdncOscA1Client for ric: {}, a1ControllerBaseUrl: {}", this.ricConfig.name(),
+            a1ControllerBaseUrl);
     }
 
     @Override
@@ -58,8 +62,8 @@ public class SdncOscA1Client implements A1Client {
         logger.debug("POST getPolicyTypeIdentities inputJsonString = {}", inputJsonString);
 
         return restClient
-            .postWithAuthHeader("/A1-ADAPTER-API:getPolicyTypeIdentities", inputJsonString, A1_CONTROLLER_USERNAME,
-                A1_CONTROLLER_PASSWORD) //
+            .postWithAuthHeader("/A1-ADAPTER-API:getPolicyTypeIdentities", inputJsonString, a1ControllerUsername,
+                a1ControllerPassword) //
             .flatMap(response -> getValueFromResponse(response, "policy-type-id-list")) //
             .flatMap(this::parseJsonArrayOfString);
     }
@@ -72,8 +76,8 @@ public class SdncOscA1Client implements A1Client {
         logger.debug("POST getPolicyIdentities inputJsonString = {}", inputJsonString);
 
         return restClient
-            .postWithAuthHeader("/A1-ADAPTER-API:getPolicyIdentities", inputJsonString, A1_CONTROLLER_USERNAME,
-                A1_CONTROLLER_PASSWORD) //
+            .postWithAuthHeader("/A1-ADAPTER-API:getPolicyIdentities", inputJsonString, a1ControllerUsername,
+                a1ControllerPassword) //
             .flatMap(response -> getValueFromResponse(response, "policy-id-list")) //
             .flatMap(this::parseJsonArrayOfString);
     }
@@ -87,8 +91,8 @@ public class SdncOscA1Client implements A1Client {
         logger.debug("POST getPolicyType inputJsonString = {}", inputJsonString);
 
         return restClient
-            .postWithAuthHeader("/A1-ADAPTER-API:getPolicyType", inputJsonString, A1_CONTROLLER_USERNAME,
-                A1_CONTROLLER_PASSWORD) //
+            .postWithAuthHeader("/A1-ADAPTER-API:getPolicyType", inputJsonString, a1ControllerUsername,
+                a1ControllerPassword) //
             .flatMap(response -> getValueFromResponse(response, "policy-type")) //
             .flatMap(this::extractPolicySchema);
     }
@@ -104,8 +108,8 @@ public class SdncOscA1Client implements A1Client {
         logger.debug("POST putPolicy inputJsonString = {}", inputJsonString);
 
         return restClient
-            .postWithAuthHeader("/A1-ADAPTER-API:putPolicy", inputJsonString, A1_CONTROLLER_USERNAME,
-                A1_CONTROLLER_PASSWORD) //
+            .postWithAuthHeader("/A1-ADAPTER-API:putPolicy", inputJsonString, a1ControllerUsername,
+                a1ControllerPassword) //
             .flatMap(response -> getValueFromResponse(response, "returned-policy")) //
             .flatMap(this::validateJson);
     }
@@ -129,8 +133,8 @@ public class SdncOscA1Client implements A1Client {
         String inputJsonString = createInputJsonString(paramsJson);
         logger.debug("POST deletePolicy inputJsonString = {}", inputJsonString);
 
-        return restClient.postWithAuthHeader("/A1-ADAPTER-API:deletePolicy", inputJsonString, A1_CONTROLLER_USERNAME,
-            A1_CONTROLLER_PASSWORD);
+        return restClient.postWithAuthHeader("/A1-ADAPTER-API:deletePolicy", inputJsonString, a1ControllerUsername,
+            a1ControllerPassword);
     }
 
     @Override
@@ -150,6 +154,9 @@ public class SdncOscA1Client implements A1Client {
         try {
             JSONObject outputJson = new JSONObject(response);
             JSONObject responseParams = outputJson.getJSONObject("output");
+            if (!responseParams.has(key)) {
+                return Mono.just("");
+            }
             String value = responseParams.get(key).toString();
             return Mono.just(value);
         } catch (JSONException ex) { // invalid json
@@ -160,6 +167,9 @@ public class SdncOscA1Client implements A1Client {
     private Mono<List<String>> parseJsonArrayOfString(String inputString) {
         try {
             List<String> arrayList = new ArrayList<>();
+            if (inputString.isEmpty()) {
+                return Mono.just(arrayList);
+            }
             JSONArray jsonArray = new JSONArray(inputString);
             for (int i = 0; i < jsonArray.length(); i++) {
                 arrayList.add(jsonArray.getString(i));
index 4a0a506..1993be7 100644 (file)
@@ -37,17 +37,21 @@ import reactor.core.publisher.Mono;
 
 public class SdnrOnapA1Client implements A1Client {
     private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-    private static final String A1_CONTROLLER_URL = "http://sdnc_controller_container:8181/restconf/operations";
-    private static final String A1_CONTROLLER_USERNAME = "admin";
-    private static final String A1_CONTROLLER_PASSWORD = "Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U";
 
+    private String a1ControllerBaseUrl;
+    private String a1ControllerUsername;
+    private String a1ControllerPassword;
     private final RicConfig ricConfig;
     private final AsyncRestClient restClient;
 
-    public SdnrOnapA1Client(RicConfig ricConfig) {
+    public SdnrOnapA1Client(RicConfig ricConfig, String baseUrl, String username, String password) {
         this.ricConfig = ricConfig;
-        this.restClient = new AsyncRestClient(A1_CONTROLLER_URL);
-        logger.debug("SdnrOnapA1Client for ric: {}", this.ricConfig.name());
+        this.a1ControllerBaseUrl = baseUrl;
+        this.a1ControllerUsername = username;
+        this.a1ControllerPassword = password;
+        this.restClient = new AsyncRestClient(a1ControllerBaseUrl + "/restconf/operations");
+        logger.debug("SdnrOnapA1Client for ric: {}, a1ControllerBaseUrl: {}", this.ricConfig.name(),
+            a1ControllerBaseUrl);
     }
 
     @Override
@@ -58,8 +62,8 @@ public class SdnrOnapA1Client implements A1Client {
         logger.debug("POST getPolicyTypeIdentities inputJsonString = {}", inputJsonString);
 
         return restClient
-            .postWithAuthHeader("/A1-ADAPTER-API:getPolicyTypes", inputJsonString, A1_CONTROLLER_USERNAME,
-                A1_CONTROLLER_PASSWORD) //
+            .postWithAuthHeader("/A1-ADAPTER-API:getPolicyTypes", inputJsonString, a1ControllerUsername,
+                a1ControllerPassword) //
             .flatMap(response -> getValueFromResponse(response, "policy-type-id-list")) //
             .flatMap(this::parseJsonArrayOfString);
     }
@@ -81,8 +85,8 @@ public class SdnrOnapA1Client implements A1Client {
         logger.debug("POST getPolicyIdentities inputJsonString = {}", inputJsonString);
 
         return restClient
-            .postWithAuthHeader("/A1-ADAPTER-API:getPolicyInstances", inputJsonString, A1_CONTROLLER_USERNAME,
-                A1_CONTROLLER_PASSWORD) //
+            .postWithAuthHeader("/A1-ADAPTER-API:getPolicyInstances", inputJsonString, a1ControllerUsername,
+                a1ControllerPassword) //
             .flatMap(response -> getValueFromResponse(response, "policy-instance-id-list")) //
             .flatMap(this::parseJsonArrayOfString);
     }
@@ -96,8 +100,8 @@ public class SdnrOnapA1Client implements A1Client {
         logger.debug("POST getPolicyType inputJsonString = {}", inputJsonString);
 
         return restClient
-            .postWithAuthHeader("/A1-ADAPTER-API:getPolicyType", inputJsonString, A1_CONTROLLER_USERNAME,
-                A1_CONTROLLER_PASSWORD) //
+            .postWithAuthHeader("/A1-ADAPTER-API:getPolicyType", inputJsonString, a1ControllerUsername,
+                a1ControllerPassword) //
             .flatMap(response -> getValueFromResponse(response, "policy-type")) //
             .flatMap(this::extractPolicySchema);
     }
@@ -114,7 +118,7 @@ public class SdnrOnapA1Client implements A1Client {
         logger.debug("POST putPolicy inputJsonString = {}", inputJsonString);
 
         return restClient.postWithAuthHeader("/A1-ADAPTER-API:createPolicyInstance", inputJsonString,
-            A1_CONTROLLER_USERNAME, A1_CONTROLLER_PASSWORD);
+            a1ControllerUsername, a1ControllerPassword);
     }
 
     public Mono<String> deletePolicy(String policyTypeId, String policyId) {
@@ -126,7 +130,7 @@ public class SdnrOnapA1Client implements A1Client {
         logger.debug("POST deletePolicy inputJsonString = {}", inputJsonString);
 
         return restClient.postWithAuthHeader("/A1-ADAPTER-API:deletePolicyInstance", inputJsonString,
-            A1_CONTROLLER_USERNAME, A1_CONTROLLER_PASSWORD);
+            a1ControllerUsername, a1ControllerPassword);
     }
 
     @Override
@@ -164,6 +168,9 @@ public class SdnrOnapA1Client implements A1Client {
         try {
             JSONObject outputJson = new JSONObject(response);
             JSONObject responseParams = outputJson.getJSONObject("output");
+            if (!responseParams.has(key)) {
+                return Mono.just("");
+            }
             String value = responseParams.get(key).toString();
             return Mono.just(value);
         } catch (JSONException ex) { // invalid json
@@ -174,6 +181,9 @@ public class SdnrOnapA1Client implements A1Client {
     private Mono<List<String>> parseJsonArrayOfString(String inputString) {
         try {
             List<String> arrayList = new ArrayList<>();
+            if (inputString.isEmpty()) {
+                return Mono.just(arrayList);
+            }
             JSONArray jsonArray = new JSONArray(inputString);
             for (int i = 0; i < jsonArray.length(); i++) {
                 arrayList.add(jsonArray.getString(i));
index f23b5e2..1e8c6d4 100644 (file)
@@ -42,6 +42,15 @@ public class ApplicationConfig {
     @NotEmpty
     private String filepath;
 
+    @NotEmpty
+    private String a1ControllerBaseUrl;
+
+    @NotEmpty
+    private String a1ControllerUsername;
+
+    @NotEmpty
+    private String a1ControllerPassword;
+
     private Collection<Observer> observers = new Vector<>();
     private Map<String, RicConfig> ricConfigs = new HashMap<>();
     @Getter
@@ -57,6 +66,18 @@ public class ApplicationConfig {
         return this.filepath;
     }
 
+    public String getA1ControllerBaseUrl() {
+        return this.a1ControllerBaseUrl;
+    }
+
+    public String getA1ControllerUsername() {
+        return this.a1ControllerUsername;
+    }
+
+    public String getA1ControllerPassword() {
+        return this.a1ControllerPassword;
+    }
+
     /*
      * Do not remove, used by framework!
      */
@@ -64,6 +85,18 @@ public class ApplicationConfig {
         this.filepath = filepath;
     }
 
+    public synchronized void setA1ControllerBaseUrl(String a1ControllerBaseUrl) {
+        this.a1ControllerBaseUrl = a1ControllerBaseUrl;
+    }
+
+    public synchronized void setA1ControllerUsername(String a1ControllerUsername) {
+        this.a1ControllerUsername = a1ControllerUsername;
+    }
+
+    public synchronized void setA1ControllerPassword(String a1ControllerPassword) {
+        this.a1ControllerPassword = a1ControllerPassword;
+    }
+
     public synchronized Collection<RicConfig> getRicConfigs() {
         return this.ricConfigs.values();
     }
index 314c44c..ec86a82 100644 (file)
 
 package org.oransc.policyagent.utils;
 
+import static org.mockito.Mockito.mock;
+
 import java.lang.invoke.MethodHandles;
 import java.util.HashMap;
 import java.util.Map;
 
 import org.oransc.policyagent.clients.A1Client;
 import org.oransc.policyagent.clients.A1ClientFactory;
+import org.oransc.policyagent.configuration.ApplicationConfig;
 import org.oransc.policyagent.repository.PolicyTypes;
 import org.oransc.policyagent.repository.Ric;
 import org.slf4j.Logger;
@@ -37,6 +40,7 @@ public class MockA1ClientFactory extends A1ClientFactory {
     private final PolicyTypes policyTypes;
 
     public MockA1ClientFactory(PolicyTypes policyTypes) {
+        super(mock(ApplicationConfig.class));
         this.policyTypes = policyTypes;
     }
 
index d45d202..10b16e3 100644 (file)
@@ -88,8 +88,8 @@ public class NearRicUrlProvider {
    * @return the putPolicy url
    */
   public String putPolicyUrl(final String nearRtRicUrl, final String policyId, final String policyTypeId) {
-    return UriComponentsBuilder.fromUriString(policiesUrl(nearRtRicUrl)).pathSegment(policyId)
-            .pathSegment("?policyTypeId=").pathSegment(policyTypeId).build().toString();
+    return UriComponentsBuilder.fromUriString(policiesUrl(nearRtRicUrl))
+            .pathSegment(policyId + "?policyTypeId=" + policyTypeId).build().toString();
   }
 
   /**