Remove unused method
[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.stream.Collectors;
37
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;
50
51 /**
52  * Creates a mock implementation of the policy controller client API.
53  */
54 @TestConfiguration
55 public class EnrichmentControllerMockConfiguration {
56
57     private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
58
59     private static com.google.gson.Gson gson = new GsonBuilder() //
60         .serializeNulls() //
61         .create(); //
62
63     @Bean
64     public EiProducerApi eiProducerApi() {
65         MockEiProducerApi apiClient = new MockEiProducerApi();
66         return apiClient;
67     }
68
69     class MockEiProducerApi implements EiProducerApi {
70         private final Database database = new Database();
71
72         @Override
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);
77         }
78
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);
83         }
84
85         @Override
86         public ResponseEntity<ProducerRegistrationInfo> getEiProducer(String eiProducerId) {
87             ProducerRegistrationInfo result = database.getEiProducerInstance(eiProducerId);
88             return new ResponseEntity<>(result, HttpStatus.OK);
89         }
90
91         @Override
92         public ResponseEntity<List<JobInfo>> getEiJobsForOneEiProducer(String eiProducerId) {
93             List<JobInfo> result = new ArrayList<>();
94
95             result.addAll(database.getAllEiJobs());
96             return new ResponseEntity<>(result, HttpStatus.OK);
97         }
98
99         @Override
100         public ResponseEntity<ProducerStatusInfo> getEiProducerStatus(String eiProducerId) {
101             ProducerRegistrationInfo result = database.getEiProducerInstance(eiProducerId);
102             return new ResponseEntity<>(result.status, HttpStatus.OK);
103         }
104     }
105
106     class Database {
107
108         Database() {
109
110             List<ProducerEiTypeRegistrationInfo> supported_types = new ArrayList<ProducerEiTypeRegistrationInfo>();
111
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);
116
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);
121
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));
125
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));
128
129             putEiProducerInstance("3-prod", "http://example.com/", "http://example.com/", "http://example.com/",
130                 supported_types, new ProducerStatusInfo(ProducerStatusInfo.OperationalState.ENABLED));
131
132             // Create EiJob instance
133             schema = getStringFromFile("job-1.json");
134             putEiJobInstance("type1", "job1", schema, "owner", "http://example.com/");
135
136             schema = getStringFromFile("job-1.json");
137             putEiJobInstance("type2", "job2", schema, "owner", "http://example.com/");
138         }
139
140         private String getStringFromFile(String path) {
141             try {
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);
147                 return "";
148             }
149         }
150
151         String normalize(String str) {
152             return str.replace('\n', ' ');
153         }
154
155         void putEiJobInstance(String typeId, String instanceId, Object instanceData, String owner, String targetUrl) {
156             JobInfo i = JobInfo.builder() //
157                 .jobData(instanceData) //
158                 .id(instanceId) //
159                 .owner(owner) //
160                 .typeId(typeId) //
161                 .targetUri(targetUrl) //
162                 .build(); //
163             eiJobs.put(instanceId, i);
164         }
165
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) //
172                 .status(status) //
173                 .build(); //
174             eiProducers.put(id, eiProducer);
175         }
176
177         ProducerEiTypeRegistrationInfo getEiTypeInstance(String id, Object data, List<String> producer_ids) {
178             return ProducerEiTypeRegistrationInfo.builder() //
179                 .eiTypeId(id) //
180                 .jobDataSchema(data) //
181                 .build(); //
182         }
183
184         public void deleteEiProducerInstance(String id) {
185             eiProducers.remove(id);
186         }
187
188         public void deleteEiJobInstance(String id) {
189             eiJobs.remove(id);
190         }
191
192         ProducerRegistrationInfo getEiProducerInstance(String id) throws RestClientException {
193             ProducerRegistrationInfo i = eiProducers.get(id);
194             if (i == null) {
195                 throw new RestClientException("Producer not found: " + id);
196             }
197             return i;
198         }
199
200         public Collection<String> getAllEiProducerIds() {
201             return Collections.unmodifiableCollection(eiProducers.keySet());
202         }
203
204         public Collection<ProducerRegistrationInfo> getAllEiProducers() {
205             return eiProducers.values();
206         }
207
208         public List<JobInfo> getAllEiJobs() {
209             return new ArrayList<>(eiJobs.values());
210         }
211
212         private Map<String, ProducerRegistrationInfo> eiProducers = new HashMap<>();
213         private Map<String, JobInfo> eiJobs = new HashMap<>();
214     }
215 }