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.assertNotNull;
18 import static org.junit.Assert.assertNull;
20 import java.lang.reflect.InvocationHandler;
21 import java.lang.reflect.Method;
22 import java.util.ArrayList;
23 import java.util.Collections;
24 import java.util.Comparator;
25 import java.util.List;
27 import org.junit.Before;
28 import org.junit.BeforeClass;
29 import org.junit.Test;
30 import org.junit.runner.RunWith;
31 import org.onap.msb.apiroute.api.IuiRouteInfo;
32 import org.onap.msb.apiroute.api.RouteServer;
33 import org.onap.msb.apiroute.wrapper.dao.RedisAccessWrapper;
34 import org.onap.msb.apiroute.wrapper.util.JedisUtil;
35 import org.powermock.api.mockito.PowerMockito;
36 import org.powermock.core.classloader.annotations.PowerMockIgnore;
37 import org.powermock.core.classloader.annotations.PrepareForTest;
38 import org.powermock.modules.junit4.PowerMockRunner;
40 import com.fiftyonred.mock_jedis.MockJedisPool;
42 import redis.clients.jedis.JedisPool;
43 import redis.clients.jedis.JedisPoolConfig;
45 @RunWith(PowerMockRunner.class)
46 @PrepareForTest({JedisUtil.class, RedisAccessWrapper.class})
47 @PowerMockIgnore({"javax.management.*", "jdk.internal.reflect.*"})
48 public class IuiRouteServiceTest {
49 private static IuiRouteService iuiRouteService = null;
50 private static Comparator<IuiRouteInfo> iuiRouteComparator = null;
53 public static void setUp() throws Exception {
54 iuiRouteService = IuiRouteService.getInstance();
55 iuiRouteComparator = new Comparator<IuiRouteInfo>() {
57 public int compare(IuiRouteInfo o1, IuiRouteInfo o2) {
58 if (!o1.getServiceName().equals(o2.getServiceName()))
59 return (o1.getServiceName()).compareTo(o2.getServiceName());
66 public void setUpBeforeTest() throws Exception {
67 final JedisPool mockJedisPool = new MockJedisPool(new JedisPoolConfig(), "localhost");
68 PowerMockito.mockStatic(JedisUtil.class);
69 JedisUtil jedisUtil = PowerMockito.mock(JedisUtil.class);
70 PowerMockito.when(jedisUtil.borrowJedisInstance()).thenReturn(mockJedisPool.getResource());
72 PowerMockito.replace(PowerMockito.method(RedisAccessWrapper.class, "filterKeys")).with(new InvocationHandler() {
74 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
75 return mockJedisPool.getResource().keys((String) args[0]);
81 public void testGetIuiRouteInstance_key_not_exist() {
83 assertNull(iuiRouteService.getIuiRouteInstance("msb:routing:iui:notexistservice:v1"));
84 } catch (Exception e) {
85 assert false : "throw exception means error occured!" + e.getMessage();
90 public void testGetIuiRouteInstance_key_exist() {
91 IuiRouteInfo iuirouteInfo = new IuiRouteInfo();
92 iuirouteInfo.setServiceName("testiui");
93 iuirouteInfo.setStatus("1");
94 iuirouteInfo.setUrl("/iui/testiui");
95 iuirouteInfo.setUseOwnUpstream("0");
96 iuirouteInfo.setVisualRange("0");
97 iuirouteInfo.setEnable_ssl(false);
98 RouteServer[] servers = new RouteServer[] {new RouteServer("10.74.148.88", "8080")};
99 iuirouteInfo.setServers(servers);
101 iuiRouteService.saveIuiRouteService2Redis(iuirouteInfo, "msb:routing:iui:testiui");
102 assertEquals(iuirouteInfo, iuiRouteService.getIuiRouteInstance("msb:routing:iui:testiui"));
103 } catch (Exception e) {
104 assert false : "throw exception means error occured!" + e.getMessage();
109 public void testSaveIuiRouteService2Redis() {
110 IuiRouteInfo iuirouteInfo = new IuiRouteInfo();
111 iuirouteInfo.setServiceName("testiui");
112 iuirouteInfo.setStatus("1");
113 iuirouteInfo.setUrl("/iui/testiui/v1");
114 iuirouteInfo.setUseOwnUpstream("0");
115 iuirouteInfo.setVisualRange("0");
116 iuirouteInfo.setEnable_ssl(true);
117 RouteServer[] servers = new RouteServer[] {new RouteServer("10.74.148.88", "8080")};
118 iuirouteInfo.setServers(servers);
120 iuiRouteService.saveIuiRouteService2Redis(iuirouteInfo, "msb:routing:iui:testiui");
121 assertEquals(iuirouteInfo, iuiRouteService.getIuiRouteInstance("msb:routing:iui:testiui"));
122 } catch (Exception e) {
123 assert false : "throw exception means error occured!" + e.getMessage();
128 public void testDeleteIuiRouteService2Redis() {
129 IuiRouteInfo iuirouteInfo = new IuiRouteInfo();
130 iuirouteInfo.setServiceName("testiui");
131 iuirouteInfo.setStatus("1");
132 iuirouteInfo.setUrl("/iui/testiui/v1");
133 iuirouteInfo.setUseOwnUpstream("0");
134 iuirouteInfo.setVisualRange("0");
135 iuirouteInfo.setEnable_ssl(false);
136 RouteServer[] servers = new RouteServer[] {new RouteServer("10.74.148.88", "8080")};
137 iuirouteInfo.setServers(servers);
139 iuiRouteService.saveIuiRouteService2Redis(iuirouteInfo, "msb:routing:iui:testiui");
140 assertNotNull(iuiRouteService.getIuiRouteInstance("msb:routing:iui:testiui"));
141 iuiRouteService.deleteIuiRouteService2Redis("msb:routing:iui:testiui");
142 assertNull(iuiRouteService.getIuiRouteInstance("msb:routing:iui:testiui"));
143 } catch (Exception e) {
144 assert false : "throw exception means error occured!" + e.getMessage();
149 public void testUpdateIuiRouteStatus2Redis() {
150 IuiRouteInfo iuirouteInfo = new IuiRouteInfo();
151 iuirouteInfo.setServiceName("testiui");
152 iuirouteInfo.setStatus("1");
153 iuirouteInfo.setUrl("/iui/testiui/v1");
154 iuirouteInfo.setUseOwnUpstream("0");
155 iuirouteInfo.setVisualRange("0");
156 iuirouteInfo.setEnable_ssl(true);
157 RouteServer[] servers = new RouteServer[] {new RouteServer("10.74.148.88", "8080")};
158 iuirouteInfo.setServers(servers);
160 iuiRouteService.saveIuiRouteService2Redis(iuirouteInfo, "msb:routing:iui:testiui");
161 assertEquals("1", iuiRouteService.getIuiRouteInstance("msb:routing:iui:testiui").getStatus());
162 iuiRouteService.updateIuiRouteStatus2Redis("msb:routing:iui:testiui", "0");
163 assertEquals("0", iuiRouteService.getIuiRouteInstance("msb:routing:iui:testiui").getStatus());
164 } catch (Exception e) {
165 assert false : "throw exception means error occured!" + e.getMessage();
170 public void testGetMultiIuiRouteInstances() throws Exception {
171 IuiRouteInfo iuirouteInfo = new IuiRouteInfo();
172 iuirouteInfo.setServiceName("testiui");
173 iuirouteInfo.setStatus("1");
174 iuirouteInfo.setUrl("/iui/testiui");
175 iuirouteInfo.setUseOwnUpstream("0");
176 iuirouteInfo.setVisualRange("0");
177 iuirouteInfo.setEnable_ssl(false);
178 iuirouteInfo.setServers(new RouteServer[] {new RouteServer("10.74.148.88", "8080")});
180 IuiRouteInfo iuirouteInfo2 = new IuiRouteInfo();
181 iuirouteInfo2.setServiceName("testiui2");
182 iuirouteInfo2.setStatus("0");
183 iuirouteInfo2.setUrl("/iui/testiui2");
184 iuirouteInfo2.setUseOwnUpstream("0");
185 iuirouteInfo2.setVisualRange("0");;
186 iuirouteInfo.setEnable_ssl(true);
187 iuirouteInfo2.setServers(new RouteServer[] {new RouteServer("10.74.148.88", "8088")});
189 iuiRouteService.saveIuiRouteService2Redis(iuirouteInfo, "msb:routing:iui:testiui");
190 iuiRouteService.saveIuiRouteService2Redis(iuirouteInfo2, "msb:routing:iui:testiui2");
192 List<IuiRouteInfo> expected = new ArrayList<>();
193 expected.add(iuirouteInfo);
194 expected.add(iuirouteInfo2);
195 Collections.sort(expected, iuiRouteComparator);
197 List<IuiRouteInfo> result = iuiRouteService.getMultiIuiRouteInstances("msb:routing:iui:*");
199 Collections.sort(result, iuiRouteComparator);
200 assertEquals(expected, result);
204 public void testDeleteMultiIuiRouteInstances() throws Exception {
205 IuiRouteInfo iuirouteInfo = new IuiRouteInfo();
206 iuirouteInfo.setServiceName("testiui");
207 iuirouteInfo.setStatus("1");
208 iuirouteInfo.setUrl("/iui/testiui");
209 iuirouteInfo.setUseOwnUpstream("0");
210 iuirouteInfo.setVisualRange("0");
211 iuirouteInfo.setEnable_ssl(false);
212 iuirouteInfo.setServers(new RouteServer[] {new RouteServer("10.74.148.88", "8080")});
214 IuiRouteInfo iuirouteInfo2 = new IuiRouteInfo();
215 iuirouteInfo2.setServiceName("testiui2");
216 iuirouteInfo2.setStatus("0");
217 iuirouteInfo2.setUrl("/iui/testiui2");
218 iuirouteInfo2.setUseOwnUpstream("0");
219 iuirouteInfo2.setVisualRange("0");;
220 iuirouteInfo.setEnable_ssl(true);
221 iuirouteInfo2.setServers(new RouteServer[] {new RouteServer("10.74.148.88", "8088")});
222 iuiRouteService.saveIuiRouteService2Redis(iuirouteInfo, "msb:routing:iui:testiui");
223 iuiRouteService.saveIuiRouteService2Redis(iuirouteInfo2, "msb:routing:iui:testiui2");
225 assertEquals(2, iuiRouteService.getMultiIuiRouteInstances("msb:routing:iui:*").size());
226 assertEquals(2, iuiRouteService.deleteMultiIuiRouteService2Redis("msb:routing:iui:*"));
227 assertEquals(0, iuiRouteService.getMultiIuiRouteInstances("msb:routing:iui:*").size());
230 @Test(expected = Exception.class)
231 public void testUpdateIuiRouteStatus2Redis_keyNotExist() throws Exception {
232 iuiRouteService.updateIuiRouteStatus2Redis("msb:routing:iui:notexistservice", "0");
235 @Test(expected = Exception.class)
236 public void testSaveIuiRouteService2Redis_null() throws Exception {
237 iuiRouteService.saveIuiRouteService2Redis(null, "msb:routing:iui:null");