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.stream.Collectors;
38 import org.oransc.portal.nonrtric.controlpanel.eiproducerapi.EiProducerApi;
39 import org.oransc.portal.nonrtric.controlpanel.model.JobInfo;
40 import org.oransc.portal.nonrtric.controlpanel.model.ProducerRegistrationInfo;
41 import org.oransc.portal.nonrtric.controlpanel.model.ProducerRegistrationInfo.ProducerEiTypeRegistrationInfo;
42 import org.oransc.portal.nonrtric.controlpanel.model.ProducerStatusInfo;
43 import org.slf4j.Logger;
44 import org.slf4j.LoggerFactory;
45 import org.springframework.boot.test.context.TestConfiguration;
46 import org.springframework.context.annotation.Bean;
47 import org.springframework.http.HttpStatus;
48 import org.springframework.http.ResponseEntity;
49 import org.springframework.web.client.RestClientException;
52 * Creates a mock implementation of the policy controller client API.
55 public class EnrichmentControllerMockConfiguration {
57 private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
59 private static com.google.gson.Gson gson = new GsonBuilder() //
64 public EiProducerApi eiProducerApi() {
65 MockEiProducerApi apiClient = new MockEiProducerApi();
69 class MockEiProducerApi implements EiProducerApi {
70 private final Database database = new Database();
73 public ResponseEntity<String> getAllEiProducerIds() {
74 List<String> result = new ArrayList<>();
75 result.addAll(database.getAllEiProducerIds());
76 return new ResponseEntity<>(gson.toJson(result), HttpStatus.OK);
79 public ResponseEntity<String> getAllEiProducers() {
80 List<ProducerRegistrationInfo> result = new ArrayList<>();
81 result.addAll(database.getAllEiProducers());
82 return new ResponseEntity<>(gson.toJson(result), HttpStatus.OK);
86 public ResponseEntity<ProducerRegistrationInfo> getEiProducer(String eiProducerId) {
87 ProducerRegistrationInfo result = database.getEiProducerInstance(eiProducerId);
88 return new ResponseEntity<>(result, HttpStatus.OK);
92 public ResponseEntity<List<JobInfo>> getEiJobsForOneEiProducer(String eiProducerId) {
93 List<JobInfo> result = new ArrayList<>();
95 result.addAll(database.getAllEiJobs());
96 return new ResponseEntity<>(result, HttpStatus.OK);
100 public ResponseEntity<ProducerStatusInfo> getEiProducerStatus(String eiProducerId) {
101 ProducerRegistrationInfo result = database.getEiProducerInstance(eiProducerId);
102 return new ResponseEntity<>(result.status, HttpStatus.OK);
110 List<ProducerEiTypeRegistrationInfo> supported_types = new ArrayList<ProducerEiTypeRegistrationInfo>();
112 // Create ProducerEiTypeRegistrationInfo instance
113 String schema = getStringFromFile("ei-type-1.json");
114 ProducerEiTypeRegistrationInfo eiType1 = getEiTypeInstance("type1", schema, Arrays.asList("prod-1"));
115 supported_types.add(eiType1);
117 // Create ProducerEiTypeRegistrationInfo instance
118 schema = getStringFromFile("ei-type-2.json");
119 ProducerEiTypeRegistrationInfo eiType2 = getEiTypeInstance("type2", schema, Arrays.asList("prod-1"));
120 supported_types.add(eiType2);
122 // Create ProducerRegistrationInfo instance
123 putEiProducerInstance("prod-1", "http://example.com/", "http://example.com/", "http://example.com/",
124 supported_types, new ProducerStatusInfo(ProducerStatusInfo.OperationalState.ENABLED));
126 putEiProducerInstance("prod-2", "http://example.com/", "http://example.com/", "http://example.com/",
127 Arrays.asList(supported_types.get(0)), new ProducerStatusInfo(ProducerStatusInfo.OperationalState.DISABLED));
129 putEiProducerInstance("3-prod", "http://example.com/", "http://example.com/", "http://example.com/",
130 supported_types, new ProducerStatusInfo(ProducerStatusInfo.OperationalState.ENABLED));
132 // Create EiJob instance
133 schema = getStringFromFile("job-1.json");
134 putEiJobInstance("type1", "job1", schema, "owner", "http://example.com/");
136 schema = getStringFromFile("job-1.json");
137 putEiJobInstance("type2", "job2", schema, "owner", "http://example.com/");
140 private String getStringFromFile(String path) {
142 InputStream inputStream =
143 MethodHandles.lookup().lookupClass().getClassLoader().getResourceAsStream(path);
144 return new BufferedReader(new InputStreamReader(inputStream)).lines().collect(Collectors.joining("\n"));
145 } catch (Exception e) {
146 logger.error("Cannot read file :" + path, e);
151 String normalize(String str) {
152 return str.replace('\n', ' ');
155 void putEiJobInstance(String typeId, String instanceId, Object instanceData, String owner, String targetUrl) {
156 JobInfo i = JobInfo.builder() //
157 .jobData(instanceData) //
161 .targetUri(targetUrl) //
163 eiJobs.put(instanceId, i);
166 void putEiProducerInstance(String id, String creation_url, String deletion_url, String callback_url,
167 List<ProducerEiTypeRegistrationInfo> supported_types, ProducerStatusInfo status) {
168 ProducerRegistrationInfo eiProducer = ProducerRegistrationInfo.builder() //
169 .jobCallbackUrl(creation_url) //
170 .producerSupervisionCallbackUrl(callback_url) //
171 .types(supported_types) //
174 eiProducers.put(id, eiProducer);
177 ProducerEiTypeRegistrationInfo getEiTypeInstance(String id, Object data, List<String> producer_ids) {
178 return ProducerEiTypeRegistrationInfo.builder() //
180 .jobDataSchema(data) //
184 public void deleteEiProducerInstance(String id) {
185 eiProducers.remove(id);
188 public void deleteEiJobInstance(String id) {
192 ProducerRegistrationInfo getEiProducerInstance(String id) throws RestClientException {
193 ProducerRegistrationInfo i = eiProducers.get(id);
195 throw new RestClientException("Producer not found: " + id);
200 public Collection<String> getAllEiProducerIds() {
201 return Collections.unmodifiableCollection(eiProducers.keySet());
204 public Collection<ProducerRegistrationInfo> getAllEiProducers() {
205 return eiProducers.values();
208 public List<JobInfo> getAllEiJobs() {
209 return new ArrayList<>(eiJobs.values());
212 private Map<String, ProducerRegistrationInfo> eiProducers = new HashMap<>();
213 private Map<String, JobInfo> eiJobs = new HashMap<>();