Improved java class documentation
[nonrtric.git] / policy-agent / src / test / java / org / oransc / policyagent / clients / SdncOnapA1ClientTest.java
1 /*-
2  * ========================LICENSE_START=================================
3  * O-RAN-SC
4  * %%
5  * Copyright (C) 2020 Nordix Foundation
6  * %%
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
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
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===================================
19  */
20
21 package org.oransc.policyagent.clients;
22
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;
27
28 import java.util.ArrayList;
29 import java.util.Arrays;
30 import java.util.List;
31
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;
38
39 import reactor.core.publisher.Flux;
40 import reactor.core.publisher.Mono;
41 import reactor.test.StepVerifier;
42
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";
53
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\"}}";
61
62     SdncOnapA1Client clientUnderTest;
63
64     AsyncRestClient asyncRestClientMock;
65
66     @BeforeEach
67     public void init() {
68         asyncRestClientMock = mock(AsyncRestClient.class);
69         clientUnderTest = new SdncOnapA1Client(A1ClientHelper.createRic(RIC_1_URL).getConfig(), CONTROLLER_USERNAME,
70             CONTROLLER_PASSWORD, asyncRestClientMock);
71     }
72
73     @Test
74     public void testGetPolicyTypeIdentities() {
75         SdncOnapA1Client.SdncOnapAdapterInput inputParams = ImmutableSdncOnapAdapterInput.builder() //
76             .nearRtRicId(RIC_1_URL) //
77             .build();
78         String inputJsonString = A1ClientHelper.createInputJsonString(inputParams);
79
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);
84
85         Mono<List<String>> returnedMono = clientUnderTest.getPolicyTypeIdentities();
86         verify(asyncRestClientMock).postWithAuthHeader(POLICYTYPES_IDENTITIES_URL, inputJsonString, CONTROLLER_USERNAME,
87             CONTROLLER_PASSWORD);
88         StepVerifier.create(returnedMono).expectNext(policyTypeIds).expectComplete().verify();
89     }
90
91     @Test
92     public void testGetPolicyIdentities() {
93         SdncOnapA1Client.SdncOnapAdapterInput inputParams = ImmutableSdncOnapAdapterInput.builder() //
94             .nearRtRicId(RIC_1_URL) //
95             .build();
96         String inputJsonStringGetTypeIds = A1ClientHelper.createInputJsonString(inputParams);
97         inputParams = ImmutableSdncOnapAdapterInput.builder() //
98             .nearRtRicId(RIC_1_URL) //
99             .policyTypeId(POLICY_TYPE_1_ID) //
100             .build();
101         String inputJsonStringGetPolicyIdsType1 = A1ClientHelper.createInputJsonString(inputParams);
102         inputParams = ImmutableSdncOnapAdapterInput.builder() //
103             .nearRtRicId(RIC_1_URL) //
104             .policyTypeId(POLICY_TYPE_2_ID) //
105             .build();
106         String inputJsonStringGetPolicyIdsType2 = A1ClientHelper.createInputJsonString(inputParams);
107
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);
118
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);
127     }
128
129     @Test
130     public void testGetValidPolicyType() {
131         SdncOnapA1Client.SdncOnapAdapterInput inputParams = ImmutableSdncOnapAdapterInput.builder() //
132             .nearRtRicId(RIC_1_URL) //
133             .policyTypeId(POLICY_TYPE_1_ID) //
134             .build();
135         String inputJsonString = A1ClientHelper.createInputJsonString(inputParams);
136
137         String policyType = "{\"policySchema\": " + POLICY_TYPE_SCHEMA_VALID + ", \"statusSchema\": {} }";
138         Mono<String> policyTypeResp = A1ClientHelper.createOutputJsonResponse("policy-type", policyType);
139         whenAsyncPostThenReturn(policyTypeResp);
140
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();
145     }
146
147     @Test
148     public void testGetInvalidPolicyType() {
149         SdncOnapA1Client.SdncOnapAdapterInput inputParams = ImmutableSdncOnapAdapterInput.builder() //
150             .nearRtRicId(RIC_1_URL) //
151             .policyTypeId(POLICY_TYPE_1_ID) //
152             .build();
153         String inputJsonString = A1ClientHelper.createInputJsonString(inputParams);
154
155         String policyType = "{\"policySchema\": " + POLICY_TYPE_SCHEMA_INVALID + ", \"statusSchema\": {} }";
156         Mono<String> policyTypeResp = A1ClientHelper.createOutputJsonResponse("policy-type", policyType);
157         whenAsyncPostThenReturn(policyTypeResp);
158
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();
163     }
164
165     @Test
166     public void testPutPolicy() {
167         SdncOnapA1Client.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>()) //
173             .build();
174         String inputJsonString = A1ClientHelper.createInputJsonString(inputParams);
175
176         whenAsyncPostThenReturn(Mono.empty());
177
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();
183     }
184
185     @Test
186     public void testDeletePolicy() {
187         SdncOnapA1Client.SdncOnapAdapterInput inputParams = ImmutableSdncOnapAdapterInput.builder() //
188             .nearRtRicId(RIC_1_URL) //
189             .policyTypeId(POLICY_TYPE_1_ID) //
190             .policyInstanceId(POLICY_1_ID) //
191             .build();
192         String inputJsonString = A1ClientHelper.createInputJsonString(inputParams);
193
194         whenAsyncPostThenReturn(Mono.empty());
195
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();
201     }
202
203     @Test
204     public void testDeleteAllPolicies() {
205         SdncOnapA1Client.SdncOnapAdapterInput inputParams = ImmutableSdncOnapAdapterInput.builder() //
206             .nearRtRicId(RIC_1_URL) //
207             .build();
208         String inputJsonStringGetTypeIds = A1ClientHelper.createInputJsonString(inputParams);
209         inputParams = ImmutableSdncOnapAdapterInput.builder() //
210             .nearRtRicId(RIC_1_URL) //
211             .policyTypeId(POLICY_TYPE_1_ID) //
212             .build();
213         String inputJsonStringGetPolicyIdsType1 = A1ClientHelper.createInputJsonString(inputParams);
214         inputParams = ImmutableSdncOnapAdapterInput.builder() //
215             .nearRtRicId(RIC_1_URL) //
216             .policyTypeId(POLICY_TYPE_2_ID) //
217             .build();
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) //
223             .build();
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) //
229             .build();
230         String inputJsonStringDeletePolicy2 = A1ClientHelper.createInputJsonString(inputParams);
231
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());
243
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);
256     }
257
258     private OngoingStubbing<Mono<String>> whenAsyncPostThenReturn(Mono<String> response) {
259         return when(asyncRestClientMock.postWithAuthHeader(anyString(), anyString(), anyString(), anyString()))
260             .thenReturn(response);
261     }
262 }