package org.oransc.policyagent.clients;
+import static org.junit.Assert.fail;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.stubbing.OngoingStubbing;
import org.oransc.policyagent.clients.A1Client.A1ProtocolType;
+import org.oransc.policyagent.clients.ImmutableAdapterOutput.Builder;
import org.oransc.policyagent.clients.SdncOscA1Client.AdapterOutput;
import org.oransc.policyagent.clients.SdncOscA1Client.AdapterRequest;
import org.oransc.policyagent.configuration.ControllerConfig;
import org.oransc.policyagent.configuration.ImmutableControllerConfig;
import org.oransc.policyagent.repository.Policy;
import org.oransc.policyagent.repository.Ric;
+import org.springframework.http.HttpStatus;
import org.springframework.web.reactive.function.client.WebClientResponseException;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
@ExtendWith(MockitoExtension.class)
-public class SdncOscA1ClientTest {
+class SdncOscA1ClientTest {
private static final String CONTROLLER_USERNAME = "username";
private static final String CONTROLLER_PASSWORD = "password";
private static final String RIC_1_URL = "RicUrl";
SdncOscA1Client clientUnderTest;
+ @Mock
AsyncRestClient asyncRestClientMock;
private ControllerConfig controllerConfig() {
}
@BeforeEach
- public void init() {
- asyncRestClientMock = mock(AsyncRestClient.class);
+ void init() {
Ric ric = A1ClientHelper.createRic(RIC_1_URL);
clientUnderTest = new SdncOscA1Client(A1ProtocolType.SDNC_OSC_STD_V1_1, ric.getConfig(), controllerConfig(),
}
@Test
- public void testGetPolicyTypeIdentities_STD() {
+ void createClientWithWrongProtocol_thenErrorIsThrown() {
+ try {
+ new SdncOscA1Client(A1ProtocolType.STD_V1_1, null, null, null);
+ fail("Should have thrown exception.");
+ } catch (IllegalArgumentException e) {
+ return;
+ }
+ }
+
+ @Test
+ void getPolicyTypeIdentities_STD() {
List<String> policyTypeIds = clientUnderTest.getPolicyTypeIdentities().block();
assertEquals(1, policyTypeIds.size(), "should hardcoded to one");
assertEquals("", policyTypeIds.get(0), "should hardcoded to empty");
}
@Test
- public void testGetPolicyTypeIdentities_OSC() {
+ void getPolicyTypeIdentities_OSC() {
clientUnderTest = new SdncOscA1Client(A1ProtocolType.SDNC_OSC_OSC_V1, //
A1ClientHelper.createRic(RIC_1_URL).getConfig(), //
controllerConfig(), asyncRestClientMock);
- String response = createResponse(Arrays.asList(POLICY_TYPE_1_ID));
+ String response = createOkResponseWithBody(Arrays.asList(POLICY_TYPE_1_ID));
whenAsyncPostThenReturn(Mono.just(response));
List<String> policyTypeIds = clientUnderTest.getPolicyTypeIdentities().block();
- assertEquals(1, policyTypeIds.size(), "");
- assertEquals(POLICY_TYPE_1_ID, policyTypeIds.get(0), "");
+
+ assertEquals(1, policyTypeIds.size());
+ assertEquals(POLICY_TYPE_1_ID, policyTypeIds.get(0));
String expUrl = RIC_1_URL + "/a1-p/policytypes";
ImmutableAdapterRequest expectedParams = ImmutableAdapterRequest.builder() //
CONTROLLER_PASSWORD);
}
- private String loadFile(String fileName) throws IOException {
- ClassLoader loader = Thread.currentThread().getContextClassLoader();
- URL url = loader.getResource(fileName);
- File file = new File(url.getFile());
- return new String(Files.readAllBytes(file.toPath()));
+ @Test
+ void getTypeSchema_STD() {
+ String policyType = clientUnderTest.getPolicyTypeSchema("").block();
+
+ assertEquals("{}", policyType);
}
@Test
- public void testGetTypeSchema_OSC() throws IOException {
+ void getTypeSchema_OSC() throws IOException {
clientUnderTest = new SdncOscA1Client(A1ProtocolType.SDNC_OSC_OSC_V1, //
A1ClientHelper.createRic(RIC_1_URL).getConfig(), //
controllerConfig(), asyncRestClientMock);
String ricResponse = loadFile("test_osc_get_schema_response.json");
JsonElement elem = gson().fromJson(ricResponse, JsonElement.class);
- String responseFromController = createResponse(elem);
+ String responseFromController = createOkResponseWithBody(elem);
whenAsyncPostThenReturn(Mono.just(responseFromController));
String response = clientUnderTest.getPolicyTypeSchema("policyTypeId").block();
+
JsonElement respJson = gson().fromJson(response, JsonElement.class);
assertEquals("policyTypeId", respJson.getAsJsonObject().get("title").getAsString(),
"title should be updated to contain policyType ID");
}
- private String policiesUrl() {
- return RIC_1_URL + "/A1-P/v1/policies";
- }
-
- private Gson gson() {
- return SdncOscA1Client.gson;
- }
-
- private String createResponse(Object body) {
- AdapterOutput output = ImmutableAdapterOutput.builder() //
- .body(gson().toJson(body)) //
- .httpStatus(200) //
- .build();
- return SdncJsonHelper.createOutputJsonString(output);
+ @Test
+ void parseJsonArrayOfString() {
+ // One integer and one string
+ String inputString = "[1, \"1\" ]";
+
+ List<String> result = SdncJsonHelper.parseJsonArrayOfString(inputString).collectList().block();
+ assertEquals(2, result.size());
+ assertEquals("1", result.get(0));
+ assertEquals("1", result.get(1));
}
@Test
- public void testGetPolicyIdentities() {
+ void getPolicyIdentities_STD() {
- String policyIdsResp = createResponse(Arrays.asList(POLICY_1_ID, POLICY_2_ID));
+ String policyIdsResp = createOkResponseWithBody(Arrays.asList(POLICY_1_ID, POLICY_2_ID));
whenAsyncPostThenReturn(Mono.just(policyIdsResp));
List<String> returned = clientUnderTest.getPolicyIdentities().block();
- assertEquals(2, returned.size(), "");
+
+ assertEquals(2, returned.size());
ImmutableAdapterRequest expectedParams = ImmutableAdapterRequest.builder() //
.nearRtRicUrl(policiesUrl()) //
}
@Test
- public void testGetValidPolicyType() {
- String policyType = clientUnderTest.getPolicyTypeSchema("").block();
- assertEquals("{}", policyType, "");
+ void getPolicyIdentities_OSC() {
+ clientUnderTest = new SdncOscA1Client(A1ProtocolType.SDNC_OSC_OSC_V1, //
+ A1ClientHelper.createRic(RIC_1_URL).getConfig(), //
+ controllerConfig(), asyncRestClientMock);
+
+ String policytypeIdsResp = createOkResponseWithBody(Arrays.asList(POLICY_TYPE_1_ID));
+ String policyIdsResp = createOkResponseWithBody(Arrays.asList(POLICY_1_ID, POLICY_2_ID));
+ whenAsyncPostThenReturn(Mono.just(policytypeIdsResp)).thenReturn(Mono.just(policyIdsResp));
+
+ List<String> returned = clientUnderTest.getPolicyIdentities().block();
+
+ assertEquals(2, returned.size());
+
+ ImmutableAdapterRequest expectedParams = ImmutableAdapterRequest.builder() //
+ .nearRtRicUrl(RIC_1_URL + "/a1-p/policytypes/type1/policies") //
+ .build();
+ String expInput = SdncJsonHelper.createInputJsonString(expectedParams);
+ verify(asyncRestClientMock).postWithAuthHeader(GET_A1_POLICY_URL, expInput, CONTROLLER_USERNAME,
+ CONTROLLER_PASSWORD);
}
@Test
- public void testPutPolicyValidResponse() {
+ void putPolicyValidResponse() {
whenPostReturnOkResponse();
String returned = clientUnderTest
.putPolicy(A1ClientHelper.createPolicy(RIC_1_URL, POLICY_1_ID, POLICY_JSON_VALID, POLICY_TYPE_1_ID))
.block();
- assertEquals("OK", returned, "");
+
+ assertEquals("OK", returned);
final String expUrl = policiesUrl() + "/" + POLICY_1_ID;
AdapterRequest expectedInputParams = ImmutableAdapterRequest.builder() //
.nearRtRicUrl(expUrl) //
}
@Test
- public void testPutPolicyRejected() {
+ void putPolicyRejected() {
final String policyJson = "{}";
AdapterOutput adapterOutput = ImmutableAdapterOutput.builder() //
.body("NOK") //
- .httpStatus(400) // ERROR
+ .httpStatus(HttpStatus.BAD_REQUEST.value()) // ERROR
.build();
String resp = SdncJsonHelper.createOutputJsonString(adapterOutput);
}
@Test
- public void testDeletePolicy() {
+ void deletePolicy() {
whenPostReturnOkResponse();
String returned = clientUnderTest
.deletePolicy(A1ClientHelper.createPolicy(RIC_1_URL, POLICY_1_ID, POLICY_JSON_VALID, POLICY_TYPE_1_ID))
.block();
- assertEquals("OK", returned, "");
+
+ assertEquals("OK", returned);
final String expUrl = policiesUrl() + "/" + POLICY_1_ID;
AdapterRequest expectedInputParams = ImmutableAdapterRequest.builder() //
.nearRtRicUrl(expUrl) //
}
@Test
- public void testGetStatus() {
+ void getStatus() {
whenPostReturnOkResponse();
Policy policy = A1ClientHelper.createPolicy(RIC_1_URL, POLICY_1_ID, POLICY_JSON_VALID, POLICY_TYPE_1_ID);
}
@Test
- public void testGetVersion() {
+ void getVersion_STD() {
whenPostReturnOkResponse();
+
A1ProtocolType returnedVersion = clientUnderTest.getProtocolVersion().block();
- assertEquals(A1ProtocolType.SDNC_OSC_STD_V1_1, returnedVersion, "");
+
+ assertEquals(A1ProtocolType.SDNC_OSC_STD_V1_1, returnedVersion);
whenPostReturnOkResponseNoBody();
+
returnedVersion = clientUnderTest.getProtocolVersion().block();
- assertEquals(A1ProtocolType.SDNC_OSC_STD_V1_1, returnedVersion, "");
+
+ assertEquals(A1ProtocolType.SDNC_OSC_STD_V1_1, returnedVersion);
}
- private void whenPostReturnOkResponse() {
- AdapterOutput adapterOutput = ImmutableAdapterOutput.builder() //
- .body("OK") //
- .httpStatus(200) //
- .build();
+ @Test
+ void getVersion_OSC() {
+ clientUnderTest = new SdncOscA1Client(A1ProtocolType.SDNC_OSC_OSC_V1, //
+ A1ClientHelper.createRic(RIC_1_URL).getConfig(), //
+ controllerConfig(), asyncRestClientMock);
- String resp = SdncJsonHelper.createOutputJsonString(adapterOutput);
- whenAsyncPostThenReturn(Mono.just(resp));
+ whenAsyncPostThenReturn(Mono.error(new Exception("Error"))).thenReturn(Mono.just(createOkResponseString(true)));
+
+ A1ProtocolType returnedVersion = clientUnderTest.getProtocolVersion().block();
+
+ assertEquals(A1ProtocolType.SDNC_OSC_OSC_V1, returnedVersion);
+ }
+
+ private String policiesUrl() {
+ return RIC_1_URL + "/A1-P/v1/policies";
+ }
+
+ private Gson gson() {
+ return SdncOscA1Client.gson;
+ }
+
+ private String loadFile(String fileName) throws IOException {
+ ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ URL url = loader.getResource(fileName);
+ File file = new File(url.getFile());
+ return new String(Files.readAllBytes(file.toPath()));
+ }
+
+ private void whenPostReturnOkResponse() {
+ whenAsyncPostThenReturn(Mono.just(createOkResponseString(true)));
}
private void whenPostReturnOkResponseNoBody() {
- AdapterOutput adapterOutput = ImmutableAdapterOutput.builder() //
- .httpStatus(200) //
- .body(Optional.empty()) //
+ whenAsyncPostThenReturn(Mono.just(createOkResponseString(false)));
+ }
+
+ private String createOkResponseWithBody(Object body) {
+ AdapterOutput output = ImmutableAdapterOutput.builder() //
+ .body(gson().toJson(body)) //
+ .httpStatus(HttpStatus.OK.value()) //
.build();
+ return SdncJsonHelper.createOutputJsonString(output);
+ }
- String resp = SdncJsonHelper.createOutputJsonString(adapterOutput);
- whenAsyncPostThenReturn(Mono.just(resp));
+ private String createOkResponseString(boolean withBody) {
+ Builder responseBuilder = ImmutableAdapterOutput.builder().httpStatus(HttpStatus.OK.value());
+ if (withBody) {
+ responseBuilder.body(HttpStatus.OK.name());
+ } else {
+ responseBuilder.body(Optional.empty());
+ }
+ return SdncJsonHelper.createOutputJsonString(responseBuilder.build());
}
private OngoingStubbing<Mono<String>> whenAsyncPostThenReturn(Mono<String> response) {