Added support for https
[portal/nonrtric-controlpanel.git] / webapp-backend / src / test / java / org / oransc / portal / nonrtric / controlpanel / policyagentapi / PolicyAgentApiImplTest.java
index dcbce40..37fdd8d 100644 (file)
@@ -24,49 +24,30 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import com.google.gson.GsonBuilder;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
 import com.google.gson.reflect.TypeToken;
 
 import java.lang.reflect.Type;
-import java.util.ArrayList;
+import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.List;
-import java.util.Map;
 
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.oransc.portal.nonrtric.controlpanel.model.ImmutablePolicyInfo;
 import org.oransc.portal.nonrtric.controlpanel.model.PolicyInfo;
 import org.oransc.portal.nonrtric.controlpanel.model.PolicyInstances;
-import org.oransc.portal.nonrtric.controlpanel.model.PolicyType;
-import org.oransc.portal.nonrtric.controlpanel.model.PolicyTypes;
-import org.oransc.portal.nonrtric.controlpanel.policyagentapi.PolicyAgentApiImpl.RicInfo;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
+import org.oransc.portal.nonrtric.controlpanel.util.AsyncRestClient;
 import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
-import org.springframework.web.client.HttpClientErrorException;
-import org.springframework.web.client.RestTemplate;
+import org.springframework.web.client.HttpServerErrorException;
+import reactor.core.publisher.Mono;
 
 public class PolicyAgentApiImplTest {
-    private static final String URL_PREFIX = "UrlPrefix";
     private static final String URL_POLICY_SCHEMAS = "/policy_schemas";
-    private static final String URL_POLICY_INSTANCES = "/policies?type={type}";
-    private static final String URL_POLICY_INSTANCE = "/policy?id={id}";
-    private static final String URL_PUT_POLICY = "/policy?type={type}&id={id}&ric={ric}&service={service}";
-    private static final String URL_DELETE_POLICY = "/policy?id={id}";
-    private static final String URL_RIC_INFO = "/rics?policyType={typeName}";
     private static final String POLICY_TYPE_1_ID = "type1";
     private static final String POLICY_TYPE_1_VALID = "{\"title\":\"type1\"}";
     private static final String POLICY_TYPE_1_INVALID = "\"title\":\"type1\"}";
@@ -75,8 +56,8 @@ public class PolicyAgentApiImplTest {
     private static final String POLICY_1_VALID = "{\"policyId\":\"policy1\"}";
     private static final String POLICY_1_INVALID = "\"policyId\":\"policy1\"}";
     private static final String RIC_1_ID = "ric1";
-    private static final String RIC_1_INFO_VALID = "{\"name\":\"ric1\",\"policyTypes\":[\"type1\"]}";
-    private static final String RIC_1_INFO_INVALID = "{\"name\":\"ric1\",\"policyTypes\":\"type1\"]}";
+    private static final String RIC_1_INFO_VALID = "{\"ricName\":\"ric1\",\"policyTypes\":[\"type1\"]}";
+    private static final String RIC_1_INFO_INVALID = "{\"ricName\":\"ric1\",\"policyTypes\":\"type1\"]}";
     private static final String CLIENT_ERROR_MESSAGE = "XXXXXXX";
 
     private static com.google.gson.Gson gson = new GsonBuilder() //
@@ -85,67 +66,63 @@ public class PolicyAgentApiImplTest {
 
     PolicyAgentApiImpl apiUnderTest;
 
-    RestTemplate restTemplateMock;
+    AsyncRestClient restClient;
 
     @BeforeEach
     public void init() {
-        restTemplateMock = mock(RestTemplate.class);
-        apiUnderTest = new PolicyAgentApiImpl(URL_PREFIX, restTemplateMock);
+        restClient = mock(AsyncRestClient.class);
+        apiUnderTest = new PolicyAgentApiImpl(restClient);
+    }
+
+    private void whenGetReturnOK(String url, HttpStatus status, String body) {
+        ResponseEntity<String> ret = new ResponseEntity<>(body, status);
+        when(restClient.getForEntity(eq(url))).thenReturn(Mono.just(ret));
+    }
+
+    private void whenGetReturnFailure(String url, HttpStatus status, String body) {
+        HttpServerErrorException e = new HttpServerErrorException(status, body);
+        when(restClient.getForEntity(eq(url))).thenReturn(Mono.error(e));
     }
 
     @Test
     public void testGetAllPolicyTypesFailure() {
-        ResponseEntity<String> getAllPolicyTypesResp = new ResponseEntity<>(null, HttpStatus.NOT_FOUND);
-        when(restTemplateMock.getForEntity(eq(URL_PREFIX + URL_POLICY_SCHEMAS), eq(String.class)))
-            .thenReturn(getAllPolicyTypesResp);
-
+        whenGetReturnFailure(URL_POLICY_SCHEMAS, HttpStatus.NOT_FOUND, "");
         ResponseEntity<String> returnedResp = apiUnderTest.getAllPolicyTypes();
-
-        verify(restTemplateMock).getForEntity(URL_PREFIX + URL_POLICY_SCHEMAS, String.class);
-        assertNull(returnedResp.getBody());
         assertEquals(HttpStatus.NOT_FOUND, returnedResp.getStatusCode());
     }
 
     @Test
     public void testGetAllPolicyTypesSuccessValidJson() {
         String policyTypes = Arrays.asList(POLICY_TYPE_1_VALID, POLICY_TYPE_2_VALID).toString();
-        String policyTypesJson = parsePolicyTypesJson(policyTypes);
-        ResponseEntity<String> getAllPolicyTypesResp = new ResponseEntity<>(policyTypes, HttpStatus.OK);
-        when(restTemplateMock.getForEntity(eq(URL_PREFIX + URL_POLICY_SCHEMAS), eq(String.class)))
-            .thenReturn(getAllPolicyTypesResp);
 
-        ResponseEntity<String> returnedResp = apiUnderTest.getAllPolicyTypes();
+        whenGetReturnOK(URL_POLICY_SCHEMAS, HttpStatus.OK, policyTypes);
 
-        verify(restTemplateMock).getForEntity(URL_PREFIX + URL_POLICY_SCHEMAS, String.class);
-        assertEquals(returnedResp.getBody(), policyTypesJson);
-        assertEquals(HttpStatus.OK, returnedResp.getStatusCode());
+        ResponseEntity<String> resp = apiUnderTest.getAllPolicyTypes();
+        assertTrue(resp.getBody().contains("\"name\":\"type1\""));
+        assertEquals(HttpStatus.OK, resp.getStatusCode());
     }
 
     @Test
     public void testGetAllPolicyTypesSuccessInvalidJson() {
         String policyTypes = Arrays.asList(POLICY_TYPE_1_INVALID, POLICY_TYPE_2_VALID).toString();
-        ResponseEntity<String> getAllPolicyTypesResp = new ResponseEntity<>(policyTypes, HttpStatus.OK);
-        when(restTemplateMock.getForEntity(eq(URL_PREFIX + URL_POLICY_SCHEMAS), eq(String.class)))
-            .thenReturn(getAllPolicyTypesResp);
+        whenGetReturnOK(URL_POLICY_SCHEMAS, HttpStatus.OK, policyTypes);
 
         ResponseEntity<String> returnedResp = apiUnderTest.getAllPolicyTypes();
 
-        verify(restTemplateMock).getForEntity(URL_PREFIX + URL_POLICY_SCHEMAS, String.class);
         assertTrue(returnedResp.getBody().contains("Exception"));
         assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, returnedResp.getStatusCode());
     }
 
+    private String urlPolicyInstances(String type) {
+        return "/policies?type=" + type;
+    }
+
     @Test
     public void testGetPolicyInstancesForTypeFailure() {
-        ResponseEntity<String> getPolicyInstancesForTypeResp = new ResponseEntity<>(null, HttpStatus.NOT_FOUND);
-        Map<String, ?> uriVariables = Map.of("type", POLICY_TYPE_1_ID);
-        when(restTemplateMock.getForEntity(eq(URL_PREFIX + URL_POLICY_INSTANCES), eq(String.class), eq(uriVariables)))
-            .thenReturn(getPolicyInstancesForTypeResp);
+        whenGetReturnFailure(urlPolicyInstances(POLICY_TYPE_1_ID), HttpStatus.NOT_FOUND, "");
 
         ResponseEntity<String> returnedResp = apiUnderTest.getPolicyInstancesForType(POLICY_TYPE_1_ID);
 
-        verify(restTemplateMock).getForEntity(URL_PREFIX + URL_POLICY_INSTANCES, String.class, uriVariables);
-        assertNull(returnedResp.getBody());
         assertEquals(HttpStatus.NOT_FOUND, returnedResp.getStatusCode());
     }
 
@@ -153,14 +130,11 @@ public class PolicyAgentApiImplTest {
     public void testGetPolicyInstancesForTypeSuccessValidJson() {
         String policyInstances = Arrays.asList(POLICY_1_VALID).toString();
         String policyInstancesJson = parsePolicyInstancesJson(policyInstances);
-        ResponseEntity<String> getPolicyInstancesForTypeResp = new ResponseEntity<>(policyInstances, HttpStatus.OK);
-        Map<String, ?> uriVariables = Map.of("type", POLICY_TYPE_1_ID);
-        when(restTemplateMock.getForEntity(eq(URL_PREFIX + URL_POLICY_INSTANCES), eq(String.class), eq(uriVariables)))
-            .thenReturn(getPolicyInstancesForTypeResp);
+
+        whenGetReturnOK(urlPolicyInstances(POLICY_TYPE_1_ID), HttpStatus.OK, policyInstances);
 
         ResponseEntity<String> returnedResp = apiUnderTest.getPolicyInstancesForType(POLICY_TYPE_1_ID);
 
-        verify(restTemplateMock).getForEntity(URL_PREFIX + URL_POLICY_INSTANCES, String.class, uriVariables);
         assertEquals(returnedResp.getBody(), policyInstancesJson);
         assertEquals(HttpStatus.OK, returnedResp.getStatusCode());
     }
@@ -168,132 +142,130 @@ public class PolicyAgentApiImplTest {
     @Test
     public void testGetPolicyInstancesForTypeSuccessInvalidJson() {
         String policyInstances = Arrays.asList(POLICY_1_INVALID).toString();
-        ResponseEntity<String> getPolicyInstancesForTypeResp = new ResponseEntity<>(policyInstances, HttpStatus.OK);
-        Map<String, ?> uriVariables = Map.of("type", POLICY_TYPE_1_ID);
-        when(restTemplateMock.getForEntity(eq(URL_PREFIX + URL_POLICY_INSTANCES), eq(String.class), eq(uriVariables)))
-            .thenReturn(getPolicyInstancesForTypeResp);
+
+        whenGetReturnOK(urlPolicyInstances(POLICY_TYPE_1_ID), HttpStatus.OK, policyInstances);
 
         ResponseEntity<String> returnedResp = apiUnderTest.getPolicyInstancesForType(POLICY_TYPE_1_ID);
 
-        verify(restTemplateMock).getForEntity(URL_PREFIX + URL_POLICY_INSTANCES, String.class, uriVariables);
         assertTrue(returnedResp.getBody().contains("Exception"));
         assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, returnedResp.getStatusCode());
     }
 
+    private String urlPolicyInstance(String id) {
+        return "/policy?id=" + id;
+    }
+
     @Test
     public void testGetPolicyInstance() {
-        ResponseEntity<Object> getPolicyInstanceResp = new ResponseEntity<>(POLICY_1_VALID, HttpStatus.OK);
-        Map<String, ?> uriVariables = Map.of("id", POLICY_1_ID);
-        when(restTemplateMock.getForEntity(eq(URL_PREFIX + URL_POLICY_INSTANCE), eq(Object.class), eq(uriVariables)))
-            .thenReturn(getPolicyInstanceResp);
+        whenGetReturnOK(urlPolicyInstance(POLICY_1_ID), HttpStatus.OK, POLICY_1_VALID);
 
         ResponseEntity<Object> returnedResp = apiUnderTest.getPolicyInstance(POLICY_1_ID);
 
-        verify(restTemplateMock).getForEntity(URL_PREFIX + URL_POLICY_INSTANCE, Object.class, uriVariables);
-        assertEquals(POLICY_1_VALID, returnedResp.getBody());
         assertEquals(HttpStatus.OK, returnedResp.getStatusCode());
+        assertEquals(POLICY_1_VALID, returnedResp.getBody());
+
+    }
+
+    private String urlPutPolicy(String type, String id, String ric) {
+        return "/policy?type=" + type + "&id=" + id + "&ric=" + ric + "&service=controlpanel";
+    }
+
+    private void whenPutReturnOK(String url, String putBody, HttpStatus status, String body) {
+        ResponseEntity<String> ret = new ResponseEntity<>(body, status);
+        when(restClient.putForEntity(eq(url), eq(putBody))).thenReturn(Mono.just(ret));
+    }
+
+    private void whenPutReturnFailure(String url, String putBody, HttpStatus status, String body) {
+        HttpServerErrorException e =
+            new HttpServerErrorException(status, body, body.getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8);
+        when(restClient.putForEntity(eq(url), eq(putBody))).thenReturn(Mono.error(e));
     }
 
     @Test
     public void testPutPolicyFailure() {
-        HttpEntity<Object> jsonHttpEntity = createJsonHttpEntity(POLICY_1_VALID);
-        Map<String, ?> uriVariables = Map.of( //
-            "type", POLICY_TYPE_1_ID, //
-            "id", POLICY_1_ID, //
-            "ric", RIC_1_ID, //
-            "service", "controlpanel");
-        HttpClientErrorException exception = new HttpClientErrorException(HttpStatus.NOT_FOUND, CLIENT_ERROR_MESSAGE);
-        doThrow(exception).when(restTemplateMock).put(eq(URL_PREFIX + URL_PUT_POLICY), eq(jsonHttpEntity),
-            eq(uriVariables));
+        String url = urlPutPolicy(POLICY_TYPE_1_ID, POLICY_1_ID, RIC_1_ID);
+        whenPutReturnFailure(url, POLICY_1_VALID, HttpStatus.NOT_FOUND, CLIENT_ERROR_MESSAGE);
 
         ResponseEntity<String> returnedResp =
             apiUnderTest.putPolicy(POLICY_TYPE_1_ID, POLICY_1_ID, POLICY_1_VALID, RIC_1_ID);
 
-        verify(restTemplateMock).put(URL_PREFIX + URL_PUT_POLICY, jsonHttpEntity, uriVariables);
         assertTrue(returnedResp.getBody().contains(CLIENT_ERROR_MESSAGE));
         assertEquals(HttpStatus.NOT_FOUND, returnedResp.getStatusCode());
     }
 
     @Test
     public void testPutPolicySuccess() {
-        HttpEntity<Object> jsonHttpEntity = createJsonHttpEntity(POLICY_1_VALID);
-        Map<String, ?> uriVariables = Map.of( //
-            "type", POLICY_TYPE_1_ID, //
-            "id", POLICY_1_ID, //
-            "ric", RIC_1_ID, //
-            "service", "controlpanel");
+        String url = urlPutPolicy(POLICY_TYPE_1_ID, POLICY_1_ID, RIC_1_ID);
+        whenPutReturnOK(url, POLICY_1_VALID, HttpStatus.OK, POLICY_1_VALID);
 
         ResponseEntity<String> returnedResp =
             apiUnderTest.putPolicy(POLICY_TYPE_1_ID, POLICY_1_ID, POLICY_1_VALID, RIC_1_ID);
 
-        verify(restTemplateMock).put(URL_PREFIX + URL_PUT_POLICY, jsonHttpEntity, uriVariables);
         assertNull(returnedResp.getBody());
         assertEquals(HttpStatus.OK, returnedResp.getStatusCode());
     }
 
+    private void whenDeleteReturnOK(String url, HttpStatus status) {
+        ResponseEntity<String> ret = new ResponseEntity<>(status);
+        when(restClient.deleteForEntity(eq(url))).thenReturn(Mono.just(ret));
+    }
+
+    private void whenDeleteReturnFailure(String url, HttpStatus status, String body) {
+        HttpServerErrorException e =
+            new HttpServerErrorException(status, body, body.getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8);
+        when(restClient.deleteForEntity(eq(url))).thenReturn(Mono.error(e));
+    }
+
+    private String deletePolicyUrl(String id) {
+        return "/policy?id=" + id;
+    }
+
     @Test
     public void testDeletePolicyFailure() {
-        Map<String, ?> uriVariables = Map.of("id", POLICY_1_ID);
-        HttpClientErrorException exception = new HttpClientErrorException(HttpStatus.NOT_FOUND, CLIENT_ERROR_MESSAGE);
-        doThrow(exception).when(restTemplateMock).delete(eq(URL_PREFIX + URL_DELETE_POLICY), eq(uriVariables));
+        whenDeleteReturnFailure(deletePolicyUrl(POLICY_1_ID), HttpStatus.NOT_FOUND, CLIENT_ERROR_MESSAGE);
 
         ResponseEntity<String> returnedResp = apiUnderTest.deletePolicy(POLICY_1_ID);
 
-        verify(restTemplateMock).delete(URL_PREFIX + URL_DELETE_POLICY, uriVariables);
         assertTrue(returnedResp.getBody().contains(CLIENT_ERROR_MESSAGE));
         assertEquals(HttpStatus.NOT_FOUND, returnedResp.getStatusCode());
     }
 
     @Test
     public void testDeletePolicySuccess() {
-        Map<String, ?> uriVariables = Map.of("id", POLICY_1_ID);
-
+        whenDeleteReturnOK(deletePolicyUrl(POLICY_1_ID), HttpStatus.OK);
         ResponseEntity<String> returnedResp = apiUnderTest.deletePolicy(POLICY_1_ID);
 
-        verify(restTemplateMock).delete(URL_PREFIX + URL_DELETE_POLICY, uriVariables);
-        assertNull(returnedResp.getBody());
         assertEquals(HttpStatus.OK, returnedResp.getStatusCode());
     }
 
+    private String urlRicInfo(String typeName) {
+        return "/rics?policyType=" + typeName;
+    }
+
     @Test
     public void testGetRicsSupportingTypeValidJson() {
         String rics = Arrays.asList(RIC_1_INFO_VALID).toString();
-        String ricsJson = parseRicsJson(rics);
-        Map<String, ?> uriVariables = Map.of("typeName", POLICY_TYPE_1_ID);
-        when(restTemplateMock.getForObject(eq(URL_PREFIX + URL_RIC_INFO), eq(String.class), eq(uriVariables)))
-            .thenReturn(rics);
 
-        ResponseEntity<String> returnedResp = apiUnderTest.getRicsSupportingType(POLICY_TYPE_1_ID);
+        this.whenGetReturnOK(urlRicInfo(POLICY_TYPE_1_ID), HttpStatus.OK, rics);
 
-        verify(restTemplateMock).getForObject(URL_PREFIX + URL_RIC_INFO, String.class, uriVariables);
-        assertEquals(returnedResp.getBody(), ricsJson);
-        assertEquals(HttpStatus.OK, returnedResp.getStatusCode());
+        ResponseEntity<String> resp = apiUnderTest.getRicsSupportingType(POLICY_TYPE_1_ID);
+
+        assertEquals(HttpStatus.OK, resp.getStatusCode());
+        assertEquals("[\"ric1\"]", resp.getBody());
     }
 
     @Test
     public void testGetRicsSupportingTypeInvalidJson() {
         String rics = Arrays.asList(RIC_1_INFO_INVALID).toString();
-        Map<String, ?> uriVariables = Map.of("typeName", POLICY_TYPE_1_ID);
-        when(restTemplateMock.getForObject(eq(URL_PREFIX + URL_RIC_INFO), eq(String.class), eq(uriVariables)))
-            .thenReturn(rics);
+
+        this.whenGetReturnOK(urlRicInfo(POLICY_TYPE_1_ID), HttpStatus.OK, rics);
 
         ResponseEntity<String> returnedResp = apiUnderTest.getRicsSupportingType(POLICY_TYPE_1_ID);
 
-        verify(restTemplateMock).getForObject(URL_PREFIX + URL_RIC_INFO, String.class, uriVariables);
         assertTrue(returnedResp.getBody().contains("Exception"));
         assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, returnedResp.getStatusCode());
     }
 
-    private String parsePolicyTypesJson(String inputString) {
-        PolicyTypes policyTypes = new PolicyTypes();
-        JsonArray schemas = JsonParser.parseString(inputString).getAsJsonArray();
-        for (JsonElement schema : schemas) {
-            JsonObject schemaObj = schema.getAsJsonObject();
-            policyTypes.add(new PolicyType(schemaObj.get("title").getAsString(), schemaObj.toString()));
-        }
-        return gson.toJson(policyTypes);
-    }
-
     private String parsePolicyInstancesJson(String inputString) {
         Type listType = new TypeToken<List<ImmutablePolicyInfo>>() {}.getType();
         List<PolicyInfo> rspParsed = gson.fromJson(inputString, listType);
@@ -303,20 +275,4 @@ public class PolicyAgentApiImplTest {
         }
         return gson.toJson(policyInstances);
     }
-
-    private String parseRicsJson(String inputString) {
-        Type listType = new TypeToken<List<ImmutableRicInfo>>() {}.getType();
-        List<RicInfo> rspParsed = gson.fromJson(inputString, listType);
-        Collection<String> rics = new ArrayList<>(rspParsed.size());
-        for (RicInfo ric : rspParsed) {
-            rics.add(ric.ricName());
-        }
-        return gson.toJson(rics);
-    }
-
-    private HttpEntity<Object> createJsonHttpEntity(Object content) {
-        HttpHeaders headers = new HttpHeaders();
-        headers.setContentType(MediaType.APPLICATION_JSON);
-        return new HttpEntity<>(content, headers);
-    }
 }