Add getJobs and adapt getProducers
[portal/nonrtric-controlpanel.git] / webapp-backend / src / test / java / org / oransc / portal / nonrtric / controlpanel / mock / EnrichmentControllerMockConfiguration.java
1 /*-
2  * ========================LICENSE_START=================================
3  * O-RAN-SC
4  * %%
5  * Copyright (C) 2019 Nordix Foundation
6  * Modifications Copyright (C) 2020 Nordix Foundation
7  * %%
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ========================LICENSE_END===================================
20  */
21 package org.oransc.portal.nonrtric.controlpanel.mock;
22
23 import com.google.gson.GsonBuilder;
24
25 import java.io.BufferedReader;
26 import java.io.InputStream;
27 import java.io.InputStreamReader;
28 import java.lang.invoke.MethodHandles;
29 import java.util.ArrayList;
30 import java.util.Arrays;
31 import java.util.Collection;
32 import java.util.Collections;
33 import java.util.HashMap;
34 import java.util.List;
35 import java.util.Map;
36 import java.util.Optional;
37 import java.util.stream.Collectors;
38
39 import org.oransc.portal.nonrtric.controlpanel.eiproducerapi.EiProducerApi;
40 import org.slf4j.Logger;
41 import org.slf4j.LoggerFactory;
42 import org.springframework.boot.test.context.TestConfiguration;
43 import org.springframework.context.annotation.Bean;
44 import org.springframework.http.HttpStatus;
45 import org.springframework.http.ResponseEntity;
46 import org.springframework.web.client.RestClientException;
47
48 /**
49  * Creates a mock implementation of the policy controller client API.
50  */
51 @TestConfiguration
52 public class EnrichmentControllerMockConfiguration {
53
54     private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
55
56     private static com.google.gson.Gson gson = new GsonBuilder() //
57         .serializeNulls() //
58         .create(); //
59
60     @Bean
61     public EiProducerApi eiProducerApi() {
62         MockEiProducerApi apiClient = new MockEiProducerApi();
63         return apiClient;
64     }
65
66     class MockEiProducerApi implements EiProducerApi {
67         private final Database database = new Database();
68
69         @Override
70         public ResponseEntity<String> getAllEiTypeIds() {
71             List<String> result = new ArrayList<>();
72             result.addAll(database.getAllEiTypeIds());
73             return new ResponseEntity<>(gson.toJson(result), HttpStatus.OK);
74         }
75
76         public ResponseEntity<String> getAllEiTypes() {
77             EiTypes result = new EiTypes();
78             result.addAll(database.getAllEiTypes());
79             return new ResponseEntity<>(gson.toJson(result), HttpStatus.OK);
80         }
81
82         @Override
83         public ResponseEntity<String> getEiType(String eiTypeId) {
84             EiType result = database.getEiTypeInstance(eiTypeId);
85             return new ResponseEntity<>(gson.toJson(result), HttpStatus.OK);
86         }
87
88         @Override
89         public ResponseEntity<String> getAllEiProducerIds() {
90             List<String> result = new ArrayList<>();
91             result.addAll(database.getAllEiProducerIds());
92             return new ResponseEntity<>(gson.toJson(result), HttpStatus.OK);
93         }
94
95         public ResponseEntity<String> getAllEiProducers() {
96             EiProducers result = new EiProducers();
97             result.addAll(database.getAllEiProducers());
98             return new ResponseEntity<>(gson.toJson(result), HttpStatus.OK);
99         }
100
101         @Override
102         public ResponseEntity<String> getEiProducer(String eiProducerId) {
103             EiProducer result = database.getEiProducerInstance(eiProducerId);
104             return new ResponseEntity<>(gson.toJson(result), HttpStatus.OK);
105         }
106
107         @Override
108         public ResponseEntity<String> getEiJobsForOneEiProducer(String eiProducerId) {
109             EiJobs result = new EiJobs();
110             List<EiJob> inst = database.getEiJobsForOneEiProducer(Optional.of(eiProducerId));
111             result.addAll(inst);
112             return new ResponseEntity<>(gson.toJson(result), HttpStatus.OK);
113         }
114
115         @Override
116         public ResponseEntity<String> getEiProducerStatus(String eiProducerId) {
117             EiProducer result = database.getEiProducerInstance(eiProducerId);
118             return new ResponseEntity<>(gson.toJson(result.status()), HttpStatus.OK);
119         }
120
121         public ResponseEntity<String> deleteEiProducerInstance(String eiProducerId) {
122             database.deleteEiProducerInstance(eiProducerId);
123             return new ResponseEntity<>(HttpStatus.OK);
124         }
125
126         public ResponseEntity<String> deleteEiTypeInstance(String eiTypeId) {
127             database.deleteEiTypeInstance(eiTypeId);
128             return new ResponseEntity<>(HttpStatus.OK);
129         }
130
131         public ResponseEntity<String> deleteEiJobInstance(String eiJobId) {
132             database.deleteEiJobInstance(eiJobId);
133             return new ResponseEntity<>(HttpStatus.OK);
134         }
135     }
136
137     class Database {
138
139         Database() {
140
141             List<EiType> supported_types = new ArrayList<EiType>();
142
143             // Create EiType instance
144             String schema = getStringFromFile("ei-type-1.json");
145             EiType eiType1 = putEiTypeInstance("type1", schema, Arrays.asList("prod-1"));
146             supported_types.add(eiType1);
147
148             // Create EiType instance
149             schema = getStringFromFile("ei-type-2.json");
150             EiType eiType2 = putEiTypeInstance("type2", schema, Arrays.asList("prod-1"));
151             supported_types.add(eiType2);
152
153             // Create EiProducer instance
154             putEiProducerInstance("prod-1", "http://example.com/", "http://example.com/", "http://example.com/",
155                 supported_types, new ProducerStatusInfo(ProducerStatusInfo.OperationalState.ENABLED));
156
157             // Create EiJob instance
158             schema = getStringFromFile("job-1.json");
159             putEiJobInstance("type1", "job1", schema, "prod-1", "http://example.com/");
160         }
161
162         private String getStringFromFile(String path) {
163             try {
164                 InputStream inputStream =
165                     MethodHandles.lookup().lookupClass().getClassLoader().getResourceAsStream(path);
166                 return new BufferedReader(new InputStreamReader(inputStream)).lines().collect(Collectors.joining("\n"));
167             } catch (Exception e) {
168                 logger.error("Cannot read file :" + path, e);
169                 return "";
170             }
171         }
172
173         String normalize(String str) {
174             return str.replace('\n', ' ');
175         }
176
177         void putEiJobInstance(String typeId, String instanceId, Object instanceData, String owner, String targetUrl) {
178             EiJob i = ImmutableEiJob.builder() //
179                 .ei_job_data(instanceData) //
180                 .ei_job_identity(instanceId) //
181                 .owner(owner) //
182                 .ei_type_identity(typeId) //
183                 .target_uri(targetUrl) //
184                 .status("ENABLED") //
185                 .build(); //
186             eiJobs.put(instanceId, i);
187         }
188
189         void putEiProducerInstance(String id, String creation_url, String deletion_url, String callback_url,
190             List<EiType> supported_types, ProducerStatusInfo status) {
191             EiProducer eiProducer = ImmutableEiProducer.builder() //
192                 .ei_producer_id(id) //
193                 .ei_job_creation_callback_url(creation_url) //
194                 .ei_job_deletion_callback_url(deletion_url) //
195                 .ei_producer_supervision_callback_url(callback_url) //
196                 .supported_ei_types(supported_types) //
197                 .status(status).build(); //
198             eiProducers.put(id, eiProducer);
199         }
200
201         EiType putEiTypeInstance(String id, Object data, List<String> producer_ids) {
202             EiType i = ImmutableEiType.builder() //
203                 .ei_type_identity(id) //
204                 .ei_job_data_schema(data) //
205                 .ei_producer_ids(producer_ids) //
206                 .build(); //
207             eiTypes.put(id, i);
208             return eiTypes.get(id);
209         }
210
211         public void deleteEiTypeInstance(String id) {
212             eiTypes.remove(id);
213         }
214
215         public void deleteEiProducerInstance(String id) {
216             eiProducers.remove(id);
217         }
218
219         public void deleteEiJobInstance(String id) {
220             eiJobs.remove(id);
221         }
222
223         EiType getEiTypeInstance(String id) throws RestClientException {
224             EiType i = eiTypes.get(id);
225             if (i == null) {
226                 throw new RestClientException("Type not found: " + id);
227             }
228             return i;
229         }
230
231         EiProducer getEiProducerInstance(String id) throws RestClientException {
232             EiProducer i = eiProducers.get(id);
233             if (i == null) {
234                 throw new RestClientException("Producer not found: " + id);
235             }
236             return i;
237         }
238
239         public Collection<String> getAllEiTypeIds() {
240             return Collections.unmodifiableCollection(eiTypes.keySet());
241         }
242
243         public Collection<EiType> getAllEiTypes() {
244             return eiTypes.values();
245         }
246
247         public Collection<String> getAllEiProducerIds() {
248             return Collections.unmodifiableCollection(eiProducers.keySet());
249         }
250
251         public Collection<EiProducer> getAllEiProducers() {
252             return eiProducers.values();
253         }
254
255         public Collection<EiJob> getAllEiJobs() {
256             return eiJobs.values();
257         }
258
259         public List<EiJob> getEiJobsForOneEiProducer(Optional<String> eiProducerId) {
260             List<EiJob> result = new ArrayList<>();
261             for (EiJob i : eiJobs.values()) {
262                 if (eiProducerId.isPresent()) {
263                     if (i.owner().equals(eiProducerId.get())) {
264                         result.add(i);
265                     }
266
267                 } else {
268                     result.add(i);
269                 }
270             }
271             return result;
272         }
273
274         private Map<String, EiType> eiTypes = new HashMap<>();
275         private Map<String, EiProducer> eiProducers = new HashMap<>();
276         private Map<String, EiJob> eiJobs = new HashMap<>();
277
278     }
279
280 }