1 /*******************************************************************************
2 * Copyright 2016-2017 ZTE, Inc. and others.
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5 * in compliance with the License. You may obtain a copy of the License at
7 * http://www.apache.org/licenses/LICENSE-2.0
9 * Unless required by applicable law or agreed to in writing, software distributed under the License
10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11 * or implied. See the License for the specific language governing permissions and limitations under
13 ******************************************************************************/
14 package org.onap.msb.apiroute.wrapper.service;
16 import static org.junit.Assert.assertEquals;
17 import static org.junit.Assert.assertFalse;
18 import static org.junit.Assert.assertNull;
19 import static org.junit.Assert.assertTrue;
20 import static org.powermock.api.mockito.PowerMockito.when;
22 import java.lang.reflect.InvocationHandler;
23 import java.lang.reflect.Method;
24 import java.util.ArrayList;
25 import java.util.Collections;
26 import java.util.Comparator;
27 import java.util.HashSet;
28 import java.util.List;
31 import org.junit.Before;
32 import org.junit.BeforeClass;
33 import org.junit.Test;
34 import org.junit.runner.RunWith;
35 import org.onap.msb.apiroute.api.MicroServiceFullInfo;
36 import org.onap.msb.apiroute.api.Node;
37 import org.onap.msb.apiroute.wrapper.dao.RedisAccessWrapper;
38 import org.onap.msb.apiroute.wrapper.util.JedisUtil;
39 import org.onap.msb.apiroute.wrapper.util.MicroServiceUtil;
40 import org.powermock.api.mockito.PowerMockito;
41 import org.powermock.core.classloader.annotations.PowerMockIgnore;
42 import org.powermock.core.classloader.annotations.PrepareForTest;
43 import org.powermock.modules.junit4.PowerMockRunner;
45 import com.fiftyonred.mock_jedis.MockJedisPool;
47 import redis.clients.jedis.JedisPool;
48 import redis.clients.jedis.JedisPoolConfig;
50 @RunWith(PowerMockRunner.class)
51 @PrepareForTest({JedisUtil.class, RedisAccessWrapper.class})
52 @PowerMockIgnore({"javax.management.*"})
53 public class MicroServiceFullServiceTest {
54 private static MicroServiceFullService microServiceFullService = null;
55 private static Comparator<MicroServiceFullInfo> serviceComparator = null;
58 public static void setUp() throws Exception {
59 microServiceFullService = MicroServiceFullService.getInstance();
60 serviceComparator = new Comparator<MicroServiceFullInfo>() {
62 public int compare(MicroServiceFullInfo o1, MicroServiceFullInfo o2) {
63 if (!o1.getServiceName().equals(o2.getServiceName()))
64 return (o1.getServiceName()).compareTo(o2.getServiceName());
65 if (!o1.getVersion().equals(o2.getVersion()))
66 return (o1.getVersion()).compareTo(o2.getVersion());
73 public void setUpBeforeTest() throws Exception {
74 final JedisPool mockJedisPool = new MockJedisPool(new JedisPoolConfig(), "localhost");
75 PowerMockito.mockStatic(JedisUtil.class);
76 JedisUtil jedisUtil = PowerMockito.mock(JedisUtil.class);
77 when(jedisUtil.borrowJedisInstance()).thenReturn(mockJedisPool.getResource());
79 PowerMockito.replace(PowerMockito.method(RedisAccessWrapper.class, "filterKeys")).with(new InvocationHandler() {
81 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
82 return mockJedisPool.getResource().keys((String) args[0]);
88 public void testExistsMicroServiceInstance_notExist() {
90 assertFalse(microServiceFullService.existsMicroServiceInstance("notExist", "v1"));
91 } catch (Exception e) {
92 assert false : "throw exception means error occured!" + e.getMessage();
97 public void testExistsMicroServiceInstance_Exist() {
98 MicroServiceFullInfo microServiceFullInfo = new MicroServiceFullInfo();
99 microServiceFullInfo.setServiceName("testService");
100 microServiceFullInfo.setVersion("v1");
101 microServiceFullInfo.setStatus("1");
102 microServiceFullInfo.setUrl("/testService/v1");
103 microServiceFullInfo.setVisualRange("0");
104 microServiceFullInfo.setProtocol("http");
105 microServiceFullInfo.setEnable_ssl(false);
106 Set<Node> nodeSet = new HashSet<>();
107 nodeSet.add(new Node("10.74.148.88", "8080"));
108 microServiceFullInfo.setNodes(nodeSet);
110 assertFalse(microServiceFullService.existsMicroServiceInstance("testService", "v1"));
111 microServiceFullService.saveMicroServiceInfo2Redis(microServiceFullInfo);
112 assertTrue(microServiceFullService.existsMicroServiceInstance("testService", "v1"));
113 } catch (Exception e) {
114 assert false : "throw exception means error occured!" + e.getMessage();
120 public void testSaveMicroServiceInfo2Redis() {
121 MicroServiceFullInfo microServiceFullInfo = new MicroServiceFullInfo();
122 microServiceFullInfo.setServiceName("testService");
123 microServiceFullInfo.setVersion("v1");
124 microServiceFullInfo.setStatus("1");
125 microServiceFullInfo.setUrl("/testService/v1");
126 microServiceFullInfo.setVisualRange("0");
127 microServiceFullInfo.setProtocol("http");
128 microServiceFullInfo.setEnable_ssl(false);
129 Set<Node> nodeSet = new HashSet<>();
130 nodeSet.add(new Node("10.74.148.88", "8080"));
131 microServiceFullInfo.setNodes(nodeSet);
133 microServiceFullService.saveMicroServiceInfo2Redis(microServiceFullInfo);
134 MicroServiceFullInfo actual = microServiceFullService.getMicroServiceInstance("testService", "v1");
135 assertEquals(microServiceFullInfo, actual);
136 } catch (Exception e) {
138 assert false : "throw exception means error occured!" + e.getMessage();
143 public void testDeleteMicroService() {
144 MicroServiceFullInfo microServiceFullInfo = new MicroServiceFullInfo();
145 microServiceFullInfo.setServiceName("testService");
146 microServiceFullInfo.setVersion("v1");
147 microServiceFullInfo.setStatus("1");
148 microServiceFullInfo.setUrl("/testService/v1");
149 microServiceFullInfo.setVisualRange("0");
150 microServiceFullInfo.setProtocol("http");
151 microServiceFullInfo.setEnable_ssl(false);
152 Set<Node> nodeSet = new HashSet<>();
153 nodeSet.add(new Node("10.74.148.88", "8080"));
154 microServiceFullInfo.setNodes(nodeSet);
156 microServiceFullService.saveMicroServiceInfo2Redis(microServiceFullInfo);
157 assertTrue(microServiceFullService.existsMicroServiceInstance("testService", "v1"));
158 microServiceFullService.deleteMicroService("testService", "v1");
159 assertFalse(microServiceFullService.existsMicroServiceInstance("testService", "v1"));
160 } catch (Exception e) {
161 assert false : "throw exception means error occured!" + e.getMessage();
167 public void testUpdateMicroServiceStatus() {
168 MicroServiceFullInfo microServiceFullInfo = new MicroServiceFullInfo();
169 microServiceFullInfo.setServiceName("testService");
170 microServiceFullInfo.setVersion("v1");
171 microServiceFullInfo.setStatus("1");
172 microServiceFullInfo.setUrl("/testService/v1");
173 microServiceFullInfo.setVisualRange("0");
174 microServiceFullInfo.setProtocol("http");
175 microServiceFullInfo.setEnable_ssl(false);
176 Set<Node> nodeSet = new HashSet<>();
177 nodeSet.add(new Node("10.74.148.88", "8080"));
178 microServiceFullInfo.setNodes(nodeSet);
180 microServiceFullService.saveMicroServiceInfo2Redis(microServiceFullInfo);
181 assertEquals("1", microServiceFullService.getMicroServiceInstance("testService", "v1").getStatus());
182 microServiceFullService.updateMicroServiceStatus("testService", "v1", "0");
183 assertEquals("0", microServiceFullService.getMicroServiceInstance("testService", "v1").getStatus());
184 } catch (Exception e) {
185 assert false : "throw exception means error occured!" + e.getMessage();
190 public void testGetAllMicroServiceKey() {
191 MicroServiceFullInfo microServiceFullInfo = new MicroServiceFullInfo();
192 microServiceFullInfo.setServiceName("testService");
193 microServiceFullInfo.setVersion("v1");
194 microServiceFullInfo.setStatus("1");
195 microServiceFullInfo.setUrl("/testService/v1");
196 microServiceFullInfo.setVisualRange("0");
197 microServiceFullInfo.setProtocol("http");
198 microServiceFullInfo.setEnable_ssl(false);
199 Set<Node> nodeSet = new HashSet<>();
200 nodeSet.add(new Node("10.74.148.88", "8080"));
201 microServiceFullInfo.setNodes(nodeSet);
203 MicroServiceFullInfo microServiceFullInfo2 = new MicroServiceFullInfo();
204 microServiceFullInfo2.setServiceName("testService2");
205 microServiceFullInfo2.setVersion("");
206 microServiceFullInfo2.setStatus("1");
207 microServiceFullInfo2.setUrl("/testService2");
208 microServiceFullInfo2.setVisualRange("0");
209 microServiceFullInfo2.setProtocol("http");
210 microServiceFullInfo2.setEnable_ssl(false);
211 Set<Node> nodeSet2 = new HashSet<>();
212 nodeSet2.add(new Node("10.74.148.88", "8081"));
213 microServiceFullInfo2.setNodes(nodeSet2);
215 MicroServiceFullInfo microServiceFullInfo3 = new MicroServiceFullInfo();
216 microServiceFullInfo3.setServiceName("testService");
217 microServiceFullInfo3.setVersion("v2");
218 microServiceFullInfo3.setStatus("1");
219 microServiceFullInfo3.setUrl("/testService/v2");
220 microServiceFullInfo3.setVisualRange("0");
221 microServiceFullInfo3.setProtocol("http");
222 microServiceFullInfo3.setEnable_ssl(false);
223 Set<Node> nodeSet3 = new HashSet<>();
224 nodeSet3.add(new Node("10.74.148.89", "8080"));
225 microServiceFullInfo3.setNodes(nodeSet3);
228 microServiceFullService.saveMicroServiceInfo2Redis(microServiceFullInfo);
229 microServiceFullService.saveMicroServiceInfo2Redis(microServiceFullInfo2);
230 microServiceFullService.saveMicroServiceInfo2Redis(microServiceFullInfo3);
232 Set<String> result = microServiceFullService.getAllMicroServiceKey();
233 final Set<String> expected = new HashSet<String>();
234 expected.add("testService");
235 expected.add("testService2");
237 assertEquals(expected, result);
238 } catch (Exception e) {
239 assert false : "throw exception means error occured!" + e.getMessage();
245 public void testGetAllVersionsOfTheService() {
246 MicroServiceFullInfo microServiceFullInfo = new MicroServiceFullInfo();
247 microServiceFullInfo.setServiceName("testService");
248 microServiceFullInfo.setVersion("v1");
249 microServiceFullInfo.setStatus("1");
250 microServiceFullInfo.setUrl("/testService/v1");
251 microServiceFullInfo.setVisualRange("0");
252 microServiceFullInfo.setProtocol("http");
253 microServiceFullInfo.setEnable_ssl(false);
254 Set<Node> nodeSet = new HashSet<>();
255 nodeSet.add(new Node("10.74.148.88", "8080"));
256 microServiceFullInfo.setNodes(nodeSet);
258 MicroServiceFullInfo microServiceFullInfo2 = new MicroServiceFullInfo();
259 microServiceFullInfo2.setServiceName("testService2");
260 microServiceFullInfo2.setVersion("");
261 microServiceFullInfo2.setStatus("1");
262 microServiceFullInfo2.setUrl("/testService2");
263 microServiceFullInfo2.setVisualRange("0");
264 microServiceFullInfo2.setProtocol("http");
265 microServiceFullInfo2.setEnable_ssl(false);
266 Set<Node> nodeSet2 = new HashSet<>();
267 nodeSet2.add(new Node("10.74.148.88", "8081"));
268 microServiceFullInfo2.setNodes(nodeSet2);
270 MicroServiceFullInfo microServiceFullInfo3 = new MicroServiceFullInfo();
271 microServiceFullInfo3.setServiceName("testService");
272 microServiceFullInfo3.setVersion("v2");
273 microServiceFullInfo3.setStatus("1");
274 microServiceFullInfo3.setUrl("/testService/v2");
275 microServiceFullInfo3.setVisualRange("0");
276 microServiceFullInfo3.setProtocol("http");
277 microServiceFullInfo3.setEnable_ssl(false);
278 Set<Node> nodeSet3 = new HashSet<>();
279 nodeSet3.add(new Node("10.74.148.89", "8080"));
280 microServiceFullInfo3.setNodes(nodeSet3);
283 microServiceFullService.saveMicroServiceInfo2Redis(microServiceFullInfo);
284 microServiceFullService.saveMicroServiceInfo2Redis(microServiceFullInfo3);
285 microServiceFullService.saveMicroServiceInfo2Redis(microServiceFullInfo2);
288 List<MicroServiceFullInfo> result = microServiceFullService.getAllVersionsOfTheService("testService");
290 List<MicroServiceFullInfo> expected = new ArrayList<>();
291 expected.add(microServiceFullInfo);
292 expected.add(microServiceFullInfo3);
294 Collections.sort(expected, serviceComparator);
295 Collections.sort(result, serviceComparator);
296 assertEquals(expected, result);
297 } catch (Exception e) {
298 assert false : "throw exception means error occured!" + e.getMessage();
304 public void testGetAllMicroServicesInstances() {
305 MicroServiceFullInfo microServiceFullInfo = new MicroServiceFullInfo();
306 microServiceFullInfo.setServiceName("testService");
307 microServiceFullInfo.setVersion("v1");
308 microServiceFullInfo.setStatus("1");
309 microServiceFullInfo.setUrl("/testService/v1");
310 microServiceFullInfo.setVisualRange("0");
311 microServiceFullInfo.setProtocol("http");
312 microServiceFullInfo.setEnable_ssl(false);
313 Set<Node> nodeSet = new HashSet<>();
314 nodeSet.add(new Node("10.74.148.88", "8080"));
315 microServiceFullInfo.setNodes(nodeSet);
317 MicroServiceFullInfo microServiceFullInfo2 = new MicroServiceFullInfo();
318 microServiceFullInfo2.setServiceName("testService2");
319 microServiceFullInfo2.setVersion("");
320 microServiceFullInfo2.setStatus("1");
321 microServiceFullInfo2.setUrl("/testService/v1");
322 microServiceFullInfo2.setVisualRange("0");
323 microServiceFullInfo2.setProtocol("http");
324 microServiceFullInfo2.setEnable_ssl(true);
325 Set<Node> nodeSet2 = new HashSet<>();
326 nodeSet2.add(new Node("10.74.148.89", "8080"));
327 microServiceFullInfo2.setNodes(nodeSet2);
330 microServiceFullService.saveMicroServiceInfo2Redis(microServiceFullInfo);
331 microServiceFullService.saveMicroServiceInfo2Redis(microServiceFullInfo2);
333 List<MicroServiceFullInfo> expected = new ArrayList<MicroServiceFullInfo>();
334 expected.add(microServiceFullInfo);
335 expected.add(microServiceFullInfo2);
336 List<MicroServiceFullInfo> result = microServiceFullService.getAllMicroServiceInstances();
337 Collections.sort(expected, serviceComparator);
338 Collections.sort(result, serviceComparator);
339 assertEquals(expected, result);
340 } catch (Exception e) {
342 assert false : "throw exception means error occured!" + e.getMessage();
348 public void testDeleteMultiMicroService() {
349 MicroServiceFullInfo microServiceFullInfo = new MicroServiceFullInfo();
350 microServiceFullInfo.setServiceName("testService");
351 microServiceFullInfo.setVersion("v1");
352 microServiceFullInfo.setStatus("1");
353 microServiceFullInfo.setUrl("/testService/v1");
354 microServiceFullInfo.setVisualRange("0");
355 microServiceFullInfo.setProtocol("http");
356 microServiceFullInfo.setEnable_ssl(false);
357 Set<Node> nodeSet = new HashSet<>();
358 nodeSet.add(new Node("10.74.148.88", "8080"));
359 microServiceFullInfo.setNodes(nodeSet);
362 MicroServiceFullInfo microServiceFullInfo3 = new MicroServiceFullInfo();
363 microServiceFullInfo3.setServiceName("testService");
364 microServiceFullInfo3.setVersion("v2");
365 microServiceFullInfo3.setStatus("1");
366 microServiceFullInfo3.setUrl("/testService/v2");
367 microServiceFullInfo3.setVisualRange("0");
368 microServiceFullInfo3.setProtocol("http");
369 microServiceFullInfo3.setEnable_ssl(false);
370 Set<Node> nodeSet3 = new HashSet<>();
371 nodeSet3.add(new Node("10.74.148.89", "8080"));
372 microServiceFullInfo3.setNodes(nodeSet3);
375 microServiceFullService.saveMicroServiceInfo2Redis(microServiceFullInfo);
376 microServiceFullService.saveMicroServiceInfo2Redis(microServiceFullInfo3);
377 // two versions of testservice exist
378 assertEquals(2, microServiceFullService.getAllVersionsOfTheService("testService").size());
379 // delete all versions of testservice
380 long size = microServiceFullService
381 .deleteMultiMicroService(MicroServiceUtil.getPrefixedKey("testService", "*"));
382 // after delete,no version exist
383 assertEquals(0, microServiceFullService.getAllVersionsOfTheService("testService").size());
384 } catch (Exception e) {
385 assert false : "throw exception means error occured!" + e.getMessage();
390 public void tesGetMicroServiceInstance_notExist() {
392 assertNull(microServiceFullService.getMicroServiceInstance("notExist", "v1"));
393 } catch (Exception e) {
394 assert false : "throw exception means error occured!" + e.getMessage();
400 public void tesExistsGetUpdateDeleteMicroServiceStatus_versionNull() {
401 MicroServiceFullInfo microServiceFullInfo = new MicroServiceFullInfo();
402 microServiceFullInfo.setServiceName("testService");
403 microServiceFullInfo.setVersion("");
404 microServiceFullInfo.setStatus("1");
405 microServiceFullInfo.setUrl("/testService/v1");
406 microServiceFullInfo.setVisualRange("0");
407 microServiceFullInfo.setProtocol("http");
408 microServiceFullInfo.setEnable_ssl(false);
409 Set<Node> nodeSet = new HashSet<>();
410 nodeSet.add(new Node("10.74.148.88", "8080"));
411 microServiceFullInfo.setNodes(nodeSet);
414 assertFalse(microServiceFullService.existsMicroServiceInstance("testService", "null"));
415 microServiceFullService.saveMicroServiceInfo2Redis(microServiceFullInfo);
416 assertEquals("1", microServiceFullService.getMicroServiceInstance("testService", "null").getStatus());
417 microServiceFullService.updateMicroServiceStatus("testService", "null", "0");
418 assertEquals("0", microServiceFullService.getMicroServiceInstance("testService", "null").getStatus());
419 microServiceFullService.deleteMicroService("testService", "null");
420 assertFalse(microServiceFullService.existsMicroServiceInstance("testService", "null"));
423 // test String "null"
424 assertFalse(microServiceFullService.existsMicroServiceInstance("testService", null));
425 microServiceFullService.saveMicroServiceInfo2Redis(microServiceFullInfo);
426 assertEquals("1", microServiceFullService.getMicroServiceInstance("testService", null).getStatus());
427 microServiceFullService.updateMicroServiceStatus("testService", null, "0");
428 assertEquals("0", microServiceFullService.getMicroServiceInstance("testService", null).getStatus());
429 microServiceFullService.deleteMicroService("testService", null);
430 assertFalse(microServiceFullService.existsMicroServiceInstance("testService", null));
431 } catch (Exception e) {
432 assert false : "throw exception means error occured!" + e.getMessage();
436 @Test(expected = Exception.class)
437 public void tesSaveMicroService_null() throws Exception {
438 microServiceFullService.saveMicroServiceInfo2Redis(null);