e5aa34f8004bb61441e8202e9ca669f2e20a155b
[nonrtric/plt/a1policymanagementservice.git] / add-src / test / java / org / onap / ccsdk / oran / a1policymanagementservice / clients / A1MediatorAdapterITest.java
1 /*-
2  * ========================LICENSE_START=================================
3  * O-RAN-SC
4  * %%
5  *  Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
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.onap.ccsdk.oran.a1policymanagementservice.clients;
22
23 import static org.assertj.core.api.Assertions.assertThat;
24 import static org.junit.jupiter.api.Assertions.assertEquals;
25 import static org.mockito.ArgumentMatchers.anyString;
26 import static org.mockito.ArgumentMatchers.eq;
27 import static org.mockito.Mockito.mock;
28 import static org.mockito.Mockito.verify;
29 import static org.mockito.Mockito.when;
30
31 import java.time.Instant;
32 import java.util.Arrays;
33 import java.util.List;
34 import java.util.Vector;
35 import org.json.JSONException;
36 import org.json.JSONObject;
37 import org.junit.jupiter.api.BeforeEach;
38 import org.junit.jupiter.api.DisplayName;
39 import org.junit.jupiter.api.Test;
40 import org.junit.jupiter.api.extension.ExtendWith;
41 import org.mockito.ArgumentCaptor;
42 import org.mockito.junit.jupiter.MockitoExtension;
43 import org.onap.ccsdk.oran.a1policymanagementservice.configuration.RicConfig;
44 import org.onap.ccsdk.oran.a1policymanagementservice.repository.Policy;
45 import org.onap.ccsdk.oran.a1policymanagementservice.repository.PolicyType;
46 import org.onap.ccsdk.oran.a1policymanagementservice.repository.Ric;
47 import reactor.core.publisher.Flux;
48 import reactor.core.publisher.Mono;
49 import reactor.test.StepVerifier;
50
51 @ExtendWith(MockitoExtension.class)
52 class A1MediatorAdapterITest {
53
54
55     private static final String RIC_URL = "https://ric.com";
56
57     private static final String RIC_BASE_URL = RIC_URL + "/A1-P/v2";
58
59     private static final String POLICYTYPES_IDENTITIES_URL = RIC_BASE_URL + "/policytypes";
60     private static final String POLICIES = "/policies";
61     private static final String POLICYTYPES_URL = RIC_BASE_URL + "/policytypes/";
62     private static final String POLICY_TYPE_1_ID = "type1";
63     private static final String POLICY_TYPE_2_ID = "type2";
64     private static final String POLICY_TYPE_SCHEMA_VALID = "{\"type\":\"type1\"}";
65     private static final String POLICY_TYPE_SCHEMA_INVALID = "\"type\":\"type1\"}";
66     private static final String POLICY_1_ID = "policy1";
67     private static final String POLICY_2_ID = "policy2";
68     private static final String POLICY_JSON_VALID = "{\"policyId\":\"policy1\"}";
69
70     A1MediatorAdapterI clientUnderTest;
71
72     AsyncRestClient asyncRestClientMock;
73
74     @BeforeEach
75     void init() {
76         RicConfig ricConfig = RicConfig.builder() //
77                 .ricId("name") //
78                 .baseUrl(RIC_URL) //
79                 .build();
80         asyncRestClientMock = mock(AsyncRestClient.class);
81         clientUnderTest = new A1MediatorAdapterI(ricConfig, asyncRestClientMock);
82     }
83
84     @Test
85     @DisplayName("test Get Policy Type Identities")
86     void testGetPolicyTypeIdentities() {
87         List<String> policyTypeIds = Arrays.asList(POLICY_TYPE_1_ID, POLICY_TYPE_2_ID);
88         Mono<String> policyTypeIdsResp = Mono.just(policyTypeIds.toString());
89         when(asyncRestClientMock.get(anyString())).thenReturn(policyTypeIdsResp);
90
91         Mono<List<String>> returnedMono = clientUnderTest.getPolicyTypeIdentities();
92         verify(asyncRestClientMock).get(POLICYTYPES_IDENTITIES_URL);
93         StepVerifier.create(returnedMono).expectNext(policyTypeIds).expectComplete().verify();
94     }
95
96     @Test
97     @DisplayName("test Get Policy Identities")
98     void testGetPolicyIdentities() {
99         Mono<String> policyTypeIdsResp = Mono.just(Arrays.asList(POLICY_TYPE_1_ID, POLICY_TYPE_2_ID).toString());
100         Mono<String> policyIdsType1Resp = Mono.just(Arrays.asList(POLICY_1_ID).toString());
101         Mono<String> policyIdsType2Resp = Mono.just(Arrays.asList(POLICY_2_ID).toString());
102         when(asyncRestClientMock.get(anyString())).thenReturn(policyTypeIdsResp).thenReturn(policyIdsType1Resp)
103                 .thenReturn(policyIdsType2Resp);
104
105         List<String> returned = clientUnderTest.getPolicyIdentities().block();
106
107         assertEquals(2, returned.size(), "");
108         verify(asyncRestClientMock).get(POLICYTYPES_IDENTITIES_URL);
109         verify(asyncRestClientMock).get(POLICYTYPES_URL + POLICY_TYPE_1_ID + POLICIES);
110         verify(asyncRestClientMock).get(POLICYTYPES_URL + POLICY_TYPE_2_ID + POLICIES);
111     }
112
113     @Test
114     @DisplayName("test Get Valid PolicyType")
115     void testGetValidPolicyType() {
116         String policyType = "{\"create_schema\": " + POLICY_TYPE_SCHEMA_VALID + "}";
117         Mono<String> policyTypeResp = Mono.just(policyType);
118
119         when(asyncRestClientMock.get(anyString())).thenReturn(policyTypeResp);
120
121         Mono<String> returnedMono = clientUnderTest.getPolicyTypeSchema(POLICY_TYPE_1_ID);
122         verify(asyncRestClientMock).get(POLICYTYPES_URL + POLICY_TYPE_1_ID);
123         StepVerifier.create(returnedMono).expectNext(getCreateSchema(policyType, POLICY_TYPE_1_ID)).expectComplete()
124                 .verify();
125     }
126
127     @Test
128     @DisplayName("test Get In Valid Policy Type Json")
129     void testGetInValidPolicyTypeJson() {
130         String policyType = "{\"create_schema\": " + POLICY_TYPE_SCHEMA_INVALID + "}";
131         Mono<String> policyTypeResp = Mono.just(policyType);
132
133         when(asyncRestClientMock.get(anyString())).thenReturn(policyTypeResp);
134
135         Mono<String> returnedMono = clientUnderTest.getPolicyTypeSchema(POLICY_TYPE_1_ID);
136         verify(asyncRestClientMock).get(POLICYTYPES_URL + POLICY_TYPE_1_ID);
137         StepVerifier.create(returnedMono).expectErrorMatches(throwable -> throwable instanceof JSONException).verify();
138     }
139
140     @Test
141     @DisplayName("test Get Policy Type Without CreateS chema")
142     void testGetPolicyTypeWithoutCreateSchema() {
143         Mono<String> policyTypeResp = Mono.just(POLICY_TYPE_SCHEMA_VALID);
144
145         when(asyncRestClientMock.get(anyString())).thenReturn(policyTypeResp);
146
147         Mono<String> returnedMono = clientUnderTest.getPolicyTypeSchema(POLICY_TYPE_1_ID);
148         verify(asyncRestClientMock).get(POLICYTYPES_URL + POLICY_TYPE_1_ID);
149         StepVerifier.create(returnedMono).expectErrorMatches(throwable -> throwable instanceof Exception).verify();
150     }
151
152     @Test
153     @DisplayName("test Put Policy")
154     void testPutPolicy() {
155         when(asyncRestClientMock.put(anyString(), anyString())).thenReturn(Mono.empty());
156
157         clientUnderTest
158                 .putPolicy(createPolicy(RIC_URL, POLICY_1_ID, POLICY_JSON_VALID, POLICY_TYPE_1_ID))
159                 .block();
160
161         ArgumentCaptor<String> urlCaptor = ArgumentCaptor.forClass(String.class);
162         verify(asyncRestClientMock).put(urlCaptor.capture(), eq(POLICY_JSON_VALID));
163         String actualUrl = urlCaptor.getValue();
164         String expUrl = POLICYTYPES_URL + POLICY_TYPE_1_ID + POLICIES + "/" + POLICY_1_ID;
165         assertThat(actualUrl).contains(expUrl);
166     }
167
168     @Test
169     @DisplayName("test Delete Policy")
170     void testDeletePolicy() {
171         when(asyncRestClientMock.delete(anyString())).thenReturn(Mono.empty());
172
173         Mono<String> returnedMono = clientUnderTest
174                 .deletePolicy(createPolicy(RIC_URL, POLICY_1_ID, POLICY_JSON_VALID, POLICY_TYPE_1_ID));
175         verify(asyncRestClientMock).delete(POLICYTYPES_URL + POLICY_TYPE_1_ID + POLICIES + "/" + POLICY_1_ID);
176         StepVerifier.create(returnedMono).expectComplete().verify();
177     }
178
179     @Test
180     @DisplayName("test Delete All Policies")
181     void testDeleteAllPolicies() {
182         Mono<String> policyTypeIdsResp = Mono.just(Arrays.asList(POLICY_TYPE_1_ID, POLICY_TYPE_2_ID).toString());
183         Mono<String> policyIdsType1Resp = Mono.just(Arrays.asList(POLICY_1_ID).toString());
184         Mono<String> policyIdsType2Resp = Mono.just(Arrays.asList(POLICY_2_ID).toString());
185         when(asyncRestClientMock.get(anyString())).thenReturn(policyTypeIdsResp).thenReturn(policyIdsType1Resp)
186                 .thenReturn(policyIdsType2Resp);
187         when(asyncRestClientMock.delete(anyString())).thenReturn(Mono.empty());
188
189         Flux<String> returnedFlux = clientUnderTest.deleteAllPolicies();
190         StepVerifier.create(returnedFlux).expectComplete().verify();
191         verify(asyncRestClientMock).get(POLICYTYPES_IDENTITIES_URL);
192         verify(asyncRestClientMock).get(POLICYTYPES_URL + POLICY_TYPE_1_ID + POLICIES);
193         verify(asyncRestClientMock).delete(POLICYTYPES_URL + POLICY_TYPE_1_ID + POLICIES + "/" + POLICY_1_ID);
194         verify(asyncRestClientMock).get(POLICYTYPES_URL + POLICY_TYPE_2_ID + POLICIES);
195         verify(asyncRestClientMock).delete(POLICYTYPES_URL + POLICY_TYPE_2_ID + POLICIES + "/" + POLICY_2_ID);
196     }
197
198     private String getCreateSchema(String policyType, String policyTypeId) {
199         JSONObject obj = new JSONObject(policyType);
200         JSONObject schemaObj = obj.getJSONObject("create_schema");
201         schemaObj.put("title", policyTypeId);
202         return schemaObj.toString();
203     }
204
205     private static Ric createRic(String url) {
206         RicConfig cfg = RicConfig.builder().ricId("ric") //
207                 .baseUrl(url) //
208                 .managedElementIds(new Vector<String>(Arrays.asList("kista_1", "kista_2"))) //
209                 .build();
210         return new Ric(cfg);
211     }
212
213     private static Policy createPolicy(String nearRtRicUrl, String policyId, String json, String type) {
214         String callbackUrl = "https://test.com";
215         return Policy.builder() //
216                 .id(policyId) //
217                 .json(json) //
218                 .ownerServiceId("service") //
219                 .ric(createRic(nearRtRicUrl)) //
220                 .type(createPolicyType(type)) //
221                 .lastModified(Instant.now()) //
222                 .isTransient(false) //
223                 .statusNotificationUri(callbackUrl) //
224                 .build();
225     }
226
227     private static PolicyType createPolicyType(String name) {
228         return PolicyType.builder().id(name).schema("schema").build();
229     }
230 }