2 * ========================LICENSE_START=================================
5 * Copyright (C) 2019 Nordix Foundation
6 * Modifications Copyright (C) 2020 Nordix Foundation
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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===================================
21 package org.oransc.portal.nonrtric.controlpanel.mock;
23 import com.google.gson.GsonBuilder;
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;
36 import java.util.Optional;
37 import java.util.stream.Collectors;
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;
49 * Creates a mock implementation of the policy controller client API.
52 public class EnrichmentControllerMockConfiguration {
54 private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
56 private static com.google.gson.Gson gson = new GsonBuilder() //
61 public EiProducerApi eiProducerApi() {
62 MockEiProducerApi apiClient = new MockEiProducerApi();
66 class MockEiProducerApi implements EiProducerApi {
67 private final Database database = new Database();
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);
76 public ResponseEntity<String> getAllEiTypes() {
77 EiTypes result = new EiTypes();
78 result.addAll(database.getAllEiTypes());
79 return new ResponseEntity<>(gson.toJson(result), HttpStatus.OK);
83 public ResponseEntity<String> getEiType(String eiTypeId) {
84 EiType result = database.getEiTypeInstance(eiTypeId);
85 return new ResponseEntity<>(gson.toJson(result), HttpStatus.OK);
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);
95 public ResponseEntity<String> getAllEiProducers() {
96 EiProducers result = new EiProducers();
97 result.addAll(database.getAllEiProducers());
98 return new ResponseEntity<>(gson.toJson(result), HttpStatus.OK);
102 public ResponseEntity<String> getEiProducer(String eiProducerId) {
103 EiProducer result = database.getEiProducerInstance(eiProducerId);
104 return new ResponseEntity<>(gson.toJson(result), HttpStatus.OK);
108 public ResponseEntity<String> getEiJobsForOneEiProducer(String eiProducerId) {
109 EiJobs result = new EiJobs();
110 List<EiJob> inst = database.getEiJobsForOneEiProducer(Optional.of(eiProducerId));
112 return new ResponseEntity<>(gson.toJson(result), HttpStatus.OK);
116 public ResponseEntity<String> getEiProducerStatus(String eiProducerId) {
117 EiProducer result = database.getEiProducerInstance(eiProducerId);
118 return new ResponseEntity<>(gson.toJson(result.status()), HttpStatus.OK);
121 public ResponseEntity<String> deleteEiProducerInstance(String eiProducerId) {
122 database.deleteEiProducerInstance(eiProducerId);
123 return new ResponseEntity<>(HttpStatus.OK);
126 public ResponseEntity<String> deleteEiTypeInstance(String eiTypeId) {
127 database.deleteEiTypeInstance(eiTypeId);
128 return new ResponseEntity<>(HttpStatus.OK);
131 public ResponseEntity<String> deleteEiJobInstance(String eiJobId) {
132 database.deleteEiJobInstance(eiJobId);
133 return new ResponseEntity<>(HttpStatus.OK);
141 List<EiType> supported_types = new ArrayList<EiType>();
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);
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);
153 // Create EiProducer instance
154 putEiProducerInstance("prod-1", "http://example.com/", "http://example.com/", "http://example.com/",
155 supported_types, "ENABLED");
157 // Create EiJob instance
158 schema = getStringFromFile("job-1.json");
159 putEiJobInstance("type1", "job1", schema, "prod-1", "http://example.com/");
162 private String getStringFromFile(String path) {
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);
173 String normalize(String str) {
174 return str.replace('\n', ' ');
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) //
182 .ei_type_identity(typeId) //
183 .target_uri(targetUrl) //
184 .status("ENABLED") //
186 eiJobs.put(instanceId, i);
189 void putEiProducerInstance(String id, String creation_url, String deletion_url, String callback_url,
190 List<EiType> supported_types, String 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);
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) //
208 return eiTypes.get(id);
211 public void deleteEiTypeInstance(String id) {
215 public void deleteEiProducerInstance(String id) {
216 eiProducers.remove(id);
219 public void deleteEiJobInstance(String id) {
223 EiType getEiTypeInstance(String id) throws RestClientException {
224 EiType i = eiTypes.get(id);
226 throw new RestClientException("Type not found: " + id);
231 EiProducer getEiProducerInstance(String id) throws RestClientException {
232 EiProducer i = eiProducers.get(id);
234 throw new RestClientException("Producer not found: " + id);
239 public Collection<String> getAllEiTypeIds() {
240 return Collections.unmodifiableCollection(eiTypes.keySet());
243 public Collection<EiType> getAllEiTypes() {
244 return eiTypes.values();
247 public Collection<String> getAllEiProducerIds() {
248 return Collections.unmodifiableCollection(eiProducers.keySet());
251 public Collection<EiProducer> getAllEiProducers() {
252 return eiProducers.values();
255 public Collection<EiJob> getAllEiJobs() {
256 return eiJobs.values();
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())) {
274 private Map<String, EiType> eiTypes = new HashMap<>();
275 private Map<String, EiProducer> eiProducers = new HashMap<>();
276 private Map<String, EiJob> eiJobs = new HashMap<>();