2 * ========================LICENSE_START=================================
5 * Copyright (C) 2020 Nordix Foundation
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ========================LICENSE_END===================================
21 package org.oransc.policyagent.clients;
23 import static org.mockito.ArgumentMatchers.anyString;
24 import static org.mockito.Mockito.mock;
25 import static org.mockito.Mockito.verify;
26 import static org.mockito.Mockito.when;
28 import java.util.ArrayList;
29 import java.util.Arrays;
30 import java.util.List;
32 import org.json.JSONException;
33 import org.junit.jupiter.api.BeforeEach;
34 import org.junit.jupiter.api.Test;
35 import org.junit.jupiter.api.extension.ExtendWith;
36 import org.mockito.junit.jupiter.MockitoExtension;
37 import org.mockito.stubbing.OngoingStubbing;
39 import reactor.core.publisher.Flux;
40 import reactor.core.publisher.Mono;
41 import reactor.test.StepVerifier;
43 @ExtendWith(MockitoExtension.class)
44 public class SdncOnapA1ClientTest {
45 private static final String CONTROLLER_USERNAME = "username";
46 private static final String CONTROLLER_PASSWORD = "password";
47 private static final String RIC_1_URL = "RicUrl";
48 private static final String POLICYTYPES_IDENTITIES_URL = "/A1-ADAPTER-API:getPolicyTypes";
49 private static final String POLICIES_IDENTITIES_URL = "/A1-ADAPTER-API:getPolicyInstances";
50 private static final String POLICYTYPES_URL = "/A1-ADAPTER-API:getPolicyType";
51 private static final String PUT_POLICY_URL = "/A1-ADAPTER-API:createPolicyInstance";
52 private static final String DELETE_POLICY_URL = "/A1-ADAPTER-API:deletePolicyInstance";
54 private static final String POLICY_TYPE_1_ID = "type1";
55 private static final String POLICY_TYPE_2_ID = "type2";
56 private static final String POLICY_TYPE_SCHEMA_VALID = "{\"type\":\"type1\"}";
57 private static final String POLICY_TYPE_SCHEMA_INVALID = "\"type\":\"type1\"}";
58 private static final String POLICY_1_ID = "policy1";
59 private static final String POLICY_2_ID = "policy2";
60 private static final String POLICY_JSON_VALID = "{\"scope\":{\"ueId\":\"ue1\"}}";
62 SdncOnapA1Client clientUnderTest;
64 AsyncRestClient asyncRestClientMock;
68 asyncRestClientMock = mock(AsyncRestClient.class);
69 clientUnderTest = new SdncOnapA1Client(A1ClientHelper.createRic(RIC_1_URL).getConfig(), CONTROLLER_USERNAME,
70 CONTROLLER_PASSWORD, asyncRestClientMock);
74 public void testGetPolicyTypeIdentities() {
75 SdncOnapAdapterInput inputParams = ImmutableSdncOnapAdapterInput.builder() //
76 .nearRtRicId(RIC_1_URL) //
78 String inputJsonString = A1ClientHelper.createInputJsonString(inputParams);
80 List<String> policyTypeIds = Arrays.asList(POLICY_TYPE_1_ID, POLICY_TYPE_2_ID);
81 Mono<String> policyTypeIdsResp =
82 A1ClientHelper.createOutputJsonResponse("policy-type-id-list", policyTypeIds.toString());
83 whenAsyncPostThenReturn(policyTypeIdsResp);
85 Mono<List<String>> returnedMono = clientUnderTest.getPolicyTypeIdentities();
86 verify(asyncRestClientMock).postWithAuthHeader(POLICYTYPES_IDENTITIES_URL, inputJsonString, CONTROLLER_USERNAME,
88 StepVerifier.create(returnedMono).expectNext(policyTypeIds).expectComplete().verify();
92 public void testGetPolicyIdentities() {
93 SdncOnapAdapterInput inputParams = ImmutableSdncOnapAdapterInput.builder() //
94 .nearRtRicId(RIC_1_URL) //
96 String inputJsonStringGetTypeIds = A1ClientHelper.createInputJsonString(inputParams);
97 inputParams = ImmutableSdncOnapAdapterInput.builder() //
98 .nearRtRicId(RIC_1_URL) //
99 .policyTypeId(POLICY_TYPE_1_ID) //
101 String inputJsonStringGetPolicyIdsType1 = A1ClientHelper.createInputJsonString(inputParams);
102 inputParams = ImmutableSdncOnapAdapterInput.builder() //
103 .nearRtRicId(RIC_1_URL) //
104 .policyTypeId(POLICY_TYPE_2_ID) //
106 String inputJsonStringGetPolicyIdsType2 = A1ClientHelper.createInputJsonString(inputParams);
108 List<String> policyTypeIds = Arrays.asList(POLICY_TYPE_1_ID, POLICY_TYPE_2_ID);
109 Mono<String> policyTypeIdsResp =
110 A1ClientHelper.createOutputJsonResponse("policy-type-id-list", policyTypeIds.toString());
111 List<String> policyIdsType1 = Arrays.asList(POLICY_1_ID);
112 Mono<String> policyIdsType1Resp =
113 A1ClientHelper.createOutputJsonResponse("policy-instance-id-list", policyIdsType1.toString());
114 List<String> policyIdsType2 = Arrays.asList(POLICY_2_ID);
115 Mono<String> policyIdsType2Resp =
116 A1ClientHelper.createOutputJsonResponse("policy-instance-id-list", policyIdsType2.toString());
117 whenAsyncPostThenReturn(policyTypeIdsResp).thenReturn(policyIdsType1Resp).thenReturn(policyIdsType2Resp);
119 Mono<List<String>> returnedMono = clientUnderTest.getPolicyIdentities();
120 StepVerifier.create(returnedMono).expectNext(Arrays.asList(POLICY_1_ID, POLICY_2_ID)).expectComplete().verify();
121 verify(asyncRestClientMock).postWithAuthHeader(POLICYTYPES_IDENTITIES_URL, inputJsonStringGetTypeIds,
122 CONTROLLER_USERNAME, CONTROLLER_PASSWORD);
123 verify(asyncRestClientMock).postWithAuthHeader(POLICIES_IDENTITIES_URL, inputJsonStringGetPolicyIdsType1,
124 CONTROLLER_USERNAME, CONTROLLER_PASSWORD);
125 verify(asyncRestClientMock).postWithAuthHeader(POLICIES_IDENTITIES_URL, inputJsonStringGetPolicyIdsType2,
126 CONTROLLER_USERNAME, CONTROLLER_PASSWORD);
130 public void testGetValidPolicyType() {
131 SdncOnapAdapterInput inputParams = ImmutableSdncOnapAdapterInput.builder() //
132 .nearRtRicId(RIC_1_URL) //
133 .policyTypeId(POLICY_TYPE_1_ID) //
135 String inputJsonString = A1ClientHelper.createInputJsonString(inputParams);
137 String policyType = "{\"policySchema\": " + POLICY_TYPE_SCHEMA_VALID + ", \"statusSchema\": {} }";
138 Mono<String> policyTypeResp = A1ClientHelper.createOutputJsonResponse("policy-type", policyType);
139 whenAsyncPostThenReturn(policyTypeResp);
141 Mono<String> returnedMono = clientUnderTest.getPolicyTypeSchema(POLICY_TYPE_1_ID);
142 verify(asyncRestClientMock).postWithAuthHeader(POLICYTYPES_URL, inputJsonString, CONTROLLER_USERNAME,
143 CONTROLLER_PASSWORD);
144 StepVerifier.create(returnedMono).expectNext(POLICY_TYPE_SCHEMA_VALID).expectComplete().verify();
148 public void testGetInvalidPolicyType() {
149 SdncOnapAdapterInput inputParams = ImmutableSdncOnapAdapterInput.builder() //
150 .nearRtRicId(RIC_1_URL) //
151 .policyTypeId(POLICY_TYPE_1_ID) //
153 String inputJsonString = A1ClientHelper.createInputJsonString(inputParams);
155 String policyType = "{\"policySchema\": " + POLICY_TYPE_SCHEMA_INVALID + ", \"statusSchema\": {} }";
156 Mono<String> policyTypeResp = A1ClientHelper.createOutputJsonResponse("policy-type", policyType);
157 whenAsyncPostThenReturn(policyTypeResp);
159 Mono<String> returnedMono = clientUnderTest.getPolicyTypeSchema(POLICY_TYPE_1_ID);
160 verify(asyncRestClientMock).postWithAuthHeader(POLICYTYPES_URL, inputJsonString, CONTROLLER_USERNAME,
161 CONTROLLER_PASSWORD);
162 StepVerifier.create(returnedMono).expectErrorMatches(throwable -> throwable instanceof JSONException).verify();
166 public void testPutPolicy() {
167 SdncOnapAdapterInput inputParams = ImmutableSdncOnapAdapterInput.builder() //
168 .nearRtRicId(RIC_1_URL) //
169 .policyTypeId(POLICY_TYPE_1_ID) //
170 .policyInstanceId(POLICY_1_ID) //
171 .policyInstance(POLICY_JSON_VALID) //
172 .properties(new ArrayList<String>()) //
174 String inputJsonString = A1ClientHelper.createInputJsonString(inputParams);
176 whenAsyncPostThenReturn(Mono.empty());
178 Mono<String> returnedMono = clientUnderTest
179 .putPolicy(A1ClientHelper.createPolicy(RIC_1_URL, POLICY_1_ID, POLICY_JSON_VALID, POLICY_TYPE_1_ID));
180 verify(asyncRestClientMock).postWithAuthHeader(PUT_POLICY_URL, inputJsonString, CONTROLLER_USERNAME,
181 CONTROLLER_PASSWORD);
182 StepVerifier.create(returnedMono).expectComplete().verify();
186 public void testDeletePolicy() {
187 SdncOnapAdapterInput inputParams = ImmutableSdncOnapAdapterInput.builder() //
188 .nearRtRicId(RIC_1_URL) //
189 .policyTypeId(POLICY_TYPE_1_ID) //
190 .policyInstanceId(POLICY_1_ID) //
192 String inputJsonString = A1ClientHelper.createInputJsonString(inputParams);
194 whenAsyncPostThenReturn(Mono.empty());
196 Mono<String> returnedMono = clientUnderTest
197 .deletePolicy(A1ClientHelper.createPolicy(RIC_1_URL, POLICY_1_ID, POLICY_JSON_VALID, POLICY_TYPE_1_ID));
198 verify(asyncRestClientMock).postWithAuthHeader(DELETE_POLICY_URL, inputJsonString, CONTROLLER_USERNAME,
199 CONTROLLER_PASSWORD);
200 StepVerifier.create(returnedMono).expectComplete().verify();
204 public void testDeleteAllPolicies() {
205 SdncOnapAdapterInput inputParams = ImmutableSdncOnapAdapterInput.builder() //
206 .nearRtRicId(RIC_1_URL) //
208 String inputJsonStringGetTypeIds = A1ClientHelper.createInputJsonString(inputParams);
209 inputParams = ImmutableSdncOnapAdapterInput.builder() //
210 .nearRtRicId(RIC_1_URL) //
211 .policyTypeId(POLICY_TYPE_1_ID) //
213 String inputJsonStringGetPolicyIdsType1 = A1ClientHelper.createInputJsonString(inputParams);
214 inputParams = ImmutableSdncOnapAdapterInput.builder() //
215 .nearRtRicId(RIC_1_URL) //
216 .policyTypeId(POLICY_TYPE_2_ID) //
218 String inputJsonStringGetPolicyIdsType2 = A1ClientHelper.createInputJsonString(inputParams);
219 inputParams = ImmutableSdncOnapAdapterInput.builder() //
220 .nearRtRicId(RIC_1_URL) //
221 .policyTypeId(POLICY_TYPE_1_ID) //
222 .policyInstanceId(POLICY_1_ID) //
224 String inputJsonStringDeletePolicy1 = A1ClientHelper.createInputJsonString(inputParams);
225 inputParams = ImmutableSdncOnapAdapterInput.builder() //
226 .nearRtRicId(RIC_1_URL) //
227 .policyTypeId(POLICY_TYPE_2_ID) //
228 .policyInstanceId(POLICY_2_ID) //
230 String inputJsonStringDeletePolicy2 = A1ClientHelper.createInputJsonString(inputParams);
232 List<String> policyTypeIds = Arrays.asList(POLICY_TYPE_1_ID, POLICY_TYPE_2_ID);
233 Mono<String> policyTypeIdsResp =
234 A1ClientHelper.createOutputJsonResponse("policy-type-id-list", policyTypeIds.toString());
235 List<String> policyIdsType1 = Arrays.asList(POLICY_1_ID);
236 Mono<String> policyIdsType1Resp =
237 A1ClientHelper.createOutputJsonResponse("policy-instance-id-list", policyIdsType1.toString());
238 List<String> policyIdsType2 = Arrays.asList(POLICY_2_ID);
239 Mono<String> policyIdsType2Resp =
240 A1ClientHelper.createOutputJsonResponse("policy-instance-id-list", policyIdsType2.toString());
241 whenAsyncPostThenReturn(policyTypeIdsResp).thenReturn(policyIdsType1Resp).thenReturn(Mono.empty())
242 .thenReturn(policyIdsType2Resp).thenReturn(Mono.empty());
244 Flux<String> returnedFlux = clientUnderTest.deleteAllPolicies();
245 StepVerifier.create(returnedFlux).expectComplete().verify();
246 verify(asyncRestClientMock).postWithAuthHeader(POLICYTYPES_IDENTITIES_URL, inputJsonStringGetTypeIds,
247 CONTROLLER_USERNAME, CONTROLLER_PASSWORD);
248 verify(asyncRestClientMock).postWithAuthHeader(POLICIES_IDENTITIES_URL, inputJsonStringGetPolicyIdsType1,
249 CONTROLLER_USERNAME, CONTROLLER_PASSWORD);
250 verify(asyncRestClientMock).postWithAuthHeader(DELETE_POLICY_URL, inputJsonStringDeletePolicy1,
251 CONTROLLER_USERNAME, CONTROLLER_PASSWORD);
252 verify(asyncRestClientMock).postWithAuthHeader(POLICIES_IDENTITIES_URL, inputJsonStringGetPolicyIdsType2,
253 CONTROLLER_USERNAME, CONTROLLER_PASSWORD);
254 verify(asyncRestClientMock).postWithAuthHeader(DELETE_POLICY_URL, inputJsonStringDeletePolicy2,
255 CONTROLLER_USERNAME, CONTROLLER_PASSWORD);
258 private OngoingStubbing<Mono<String>> whenAsyncPostThenReturn(Mono<String> response) {
259 return when(asyncRestClientMock.postWithAuthHeader(anyString(), anyString(), anyString(), anyString()))
260 .thenReturn(response);