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.ApiRouteInfo;
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 ApiRouteServiceTest {
49 private static ApiRouteService apiRouteService = null;
50 private static Comparator<ApiRouteInfo> apiRouteComparator = null;
53 public static void setUp() throws Exception {
54 apiRouteService = ApiRouteService.getInstance();
55 apiRouteComparator = new Comparator<ApiRouteInfo>() {
57 public int compare(ApiRouteInfo o1, ApiRouteInfo o2) {
58 if (!o1.getServiceName().equals(o2.getServiceName()))
59 return (o1.getServiceName()).compareTo(o2.getServiceName());
60 if (!o1.getVersion().equals(o2.getVersion()))
61 return (o1.getVersion()).compareTo(o2.getVersion());
68 public void setUpBeforeTest() throws Exception {
69 final JedisPool mockJedisPool = new MockJedisPool(new JedisPoolConfig(), "localhost");
70 PowerMockito.mockStatic(JedisUtil.class);
71 JedisUtil jedisUtil = PowerMockito.mock(JedisUtil.class);
72 PowerMockito.when(jedisUtil.borrowJedisInstance()).thenReturn(mockJedisPool.getResource());
74 PowerMockito.replace(PowerMockito.method(RedisAccessWrapper.class, "filterKeys")).with(new InvocationHandler() {
76 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
77 return mockJedisPool.getResource().keys((String) args[0]);
83 public void testGetApiRouteInstance_key_not_exist() {
85 assertNull(apiRouteService.getApiRouteInstance("msb:routing:api:notexistservice:v1"));
86 } catch (Exception e) {
87 assert false : "throw exception means error occured!" + e.getMessage();
92 public void testGetApiRouteInstance_key_exist() {
93 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
94 apirouteInfo.setServiceName("testapi");
95 apirouteInfo.setVersion("v1");
96 apirouteInfo.setStatus("1");
97 apirouteInfo.setUrl("/api/testapi/v1");
98 apirouteInfo.setUseOwnUpstream("0");
99 apirouteInfo.setVisualRange("0");
100 apirouteInfo.setEnable_ssl(false);
101 RouteServer[] servers = new RouteServer[] {new RouteServer("10.74.148.88", "8080")};
102 apirouteInfo.setServers(servers);
104 apiRouteService.saveApiRouteService2Redis(apirouteInfo, "msb:routing:api:testapi:v1");
105 assertEquals(apirouteInfo, apiRouteService.getApiRouteInstance("msb:routing:api:testapi:v1"));
106 } catch (Exception e) {
107 assert false : "throw exception means error occured!" + e.getMessage();
112 public void testSaveApiRouteService2Redis() {
113 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
114 apirouteInfo.setServiceName("testapi");
115 apirouteInfo.setVersion("v1");
116 apirouteInfo.setStatus("1");
117 apirouteInfo.setUrl("/api/testapi/v1");
118 apirouteInfo.setUseOwnUpstream("0");
119 apirouteInfo.setVisualRange("0");
120 apirouteInfo.setEnable_ssl(true);
121 RouteServer[] servers = new RouteServer[] {new RouteServer("10.74.148.88", "8080")};
122 apirouteInfo.setServers(servers);
124 apiRouteService.saveApiRouteService2Redis(apirouteInfo, "msb:routing:api:testapi:v1");
125 assertEquals(apirouteInfo, apiRouteService.getApiRouteInstance("msb:routing:api:testapi:v1"));
126 } catch (Exception e) {
127 assert false : "throw exception means error occured!" + e.getMessage();
132 public void testSaveApiRouteService2Redis2() {
133 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
134 apirouteInfo.setServiceName("test26msb");
135 apirouteInfo.setVersion("v1");
136 apirouteInfo.setStatus("1");
137 apirouteInfo.setUrl("/api/microservices/v1");
138 apirouteInfo.setUseOwnUpstream("0");
139 apirouteInfo.setVisualRange("0");
140 apirouteInfo.setEnable_ssl(true);
141 RouteServer[] servers = new RouteServer[] {new RouteServer("10.74.151.26", "443")};
142 apirouteInfo.setServers(servers);
144 apiRouteService.saveApiRouteService2Redis(apirouteInfo, "msb:routing:api:test26msb:v1");
145 assertEquals(apirouteInfo, apiRouteService.getApiRouteInstance("msb:routing:api:test26msb:v1"));
146 } catch (Exception e) {
147 assert false : "throw exception means error occured!" + e.getMessage();
152 public void testDeleteApiRouteService2Redis() {
153 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
154 apirouteInfo.setServiceName("testapi");
155 apirouteInfo.setVersion("v1");
156 apirouteInfo.setStatus("1");
157 apirouteInfo.setUrl("/api/testapi/v1");
158 apirouteInfo.setUseOwnUpstream("0");
159 apirouteInfo.setVisualRange("0");
160 apirouteInfo.setEnable_ssl(false);
161 RouteServer[] servers = new RouteServer[] {new RouteServer("10.74.148.88", "8080")};
162 apirouteInfo.setServers(servers);
164 apiRouteService.saveApiRouteService2Redis(apirouteInfo, "msb:routing:api:testapi:v1");
165 assertNotNull(apiRouteService.getApiRouteInstance("msb:routing:api:testapi:v1"));
166 apiRouteService.deleteApiRouteService2Redis("msb:routing:api:testapi:v1");
167 assertNull(apiRouteService.getApiRouteInstance("msb:routing:api:testapi:v1"));
168 } catch (Exception e) {
169 assert false : "throw exception means error occured!" + e.getMessage();
174 public void testUpdateApiRouteStatus2Redis() {
175 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
176 apirouteInfo.setServiceName("testapi");
177 apirouteInfo.setVersion("v1");
178 apirouteInfo.setStatus("1");
179 apirouteInfo.setUrl("/api/testapi/v1");
180 apirouteInfo.setUseOwnUpstream("0");
181 apirouteInfo.setVisualRange("0");
182 apirouteInfo.setEnable_ssl(true);
183 RouteServer[] servers = new RouteServer[] {new RouteServer("10.74.148.88", "8080")};
184 apirouteInfo.setServers(servers);
186 apiRouteService.saveApiRouteService2Redis(apirouteInfo, "msb:routing:api:testapi:v1");
187 assertEquals("1", apiRouteService.getApiRouteInstance("msb:routing:api:testapi:v1").getStatus());
188 apiRouteService.updateApiRouteStatus2Redis("msb:routing:api:testapi:v1", "0");
189 assertEquals("0", apiRouteService.getApiRouteInstance("msb:routing:api:testapi:v1").getStatus());
190 } catch (Exception e) {
191 assert false : "throw exception means error occured!" + e.getMessage();
196 public void testGetMultiApiRouteInstances() throws Exception {
197 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
198 apirouteInfo.setServiceName("testapi");
199 apirouteInfo.setVersion("v1");
200 apirouteInfo.setStatus("1");
201 apirouteInfo.setUrl("/api/testapi/v1");
202 apirouteInfo.setUseOwnUpstream("0");
203 apirouteInfo.setVisualRange("0");
204 apirouteInfo.setEnable_ssl(false);
205 apirouteInfo.setServers(new RouteServer[] {new RouteServer("10.74.148.88", "8080")});
207 ApiRouteInfo apirouteInfo2 = new ApiRouteInfo();
208 apirouteInfo2.setServiceName("testapi");
209 apirouteInfo2.setVersion("v2");
210 apirouteInfo2.setStatus("0");
211 apirouteInfo2.setUrl("/api/testapi/v2");
212 apirouteInfo2.setUseOwnUpstream("0");
213 apirouteInfo2.setVisualRange("0");;
214 apirouteInfo.setEnable_ssl(true);
215 apirouteInfo2.setServers(new RouteServer[] {new RouteServer("10.74.148.88", "8088")});
217 apiRouteService.saveApiRouteService2Redis(apirouteInfo, "msb:routing:api:testapi:v1");
218 apiRouteService.saveApiRouteService2Redis(apirouteInfo2, "msb:routing:api:testapi:v2");
220 List<ApiRouteInfo> expected = new ArrayList<>();
221 expected.add(apirouteInfo);
222 expected.add(apirouteInfo2);
223 Collections.sort(expected, apiRouteComparator);
225 List<ApiRouteInfo> result = apiRouteService.getMultiApiRouteInstances("msb:routing:api:*");
227 Collections.sort(result, apiRouteComparator);
228 assertEquals(expected, result);
232 public void testDeleteMultiApiRouteInstances() throws Exception {
233 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
234 apirouteInfo.setServiceName("testapi");
235 apirouteInfo.setVersion("v1");
236 apirouteInfo.setStatus("1");
237 apirouteInfo.setUrl("/api/testapi/v1");
238 apirouteInfo.setUseOwnUpstream("0");
239 apirouteInfo.setVisualRange("0");
240 apirouteInfo.setEnable_ssl(false);
241 apirouteInfo.setServers(new RouteServer[] {new RouteServer("10.74.148.88", "8080")});
243 ApiRouteInfo apirouteInfo2 = new ApiRouteInfo();
244 apirouteInfo2.setServiceName("testapi");
245 apirouteInfo2.setVersion("v2");
246 apirouteInfo2.setStatus("0");
247 apirouteInfo2.setUrl("/api/testapi/v2");
248 apirouteInfo2.setUseOwnUpstream("0");
249 apirouteInfo2.setVisualRange("0");;
250 apirouteInfo.setEnable_ssl(true);
251 apirouteInfo2.setServers(new RouteServer[] {new RouteServer("10.74.148.88", "8088")});
252 apiRouteService.saveApiRouteService2Redis(apirouteInfo, "msb:routing:api:testapi:v1");
253 apiRouteService.saveApiRouteService2Redis(apirouteInfo2, "msb:routing:api:testapi:v2");
255 assertEquals(2, apiRouteService.getMultiApiRouteInstances("msb:routing:api:testapi:*").size());
256 assertEquals(2, apiRouteService.deleteMultiApiRouteService2Redis("msb:routing:api:testapi:*"));
257 assertEquals(0, apiRouteService.getMultiApiRouteInstances("msb:routing:api:testapi:*").size());
260 @Test(expected = Exception.class)
261 public void testUpdateApiRouteStatus2Redis_keyNotExist() throws Exception {
262 apiRouteService.updateApiRouteStatus2Redis("msb:routing:api:notexistservice:v1", "0");
265 @Test(expected = Exception.class)
266 public void testSaveApiRouteService2Redis_null() throws Exception {
267 apiRouteService.saveApiRouteService2Redis(null, "msb:routing:api:null:v1");