1 package org.onap.msb.apiroute.wrapper.service;
3 import com.fiftyonred.mock_jedis.MockJedisPool;
4 import org.junit.Before;
5 import org.junit.BeforeClass;
7 import org.junit.runner.RunWith;
8 import org.onap.msb.apiroute.api.ApiRouteInfo;
9 import org.onap.msb.apiroute.api.RouteServer;
10 import org.onap.msb.apiroute.wrapper.dao.RedisAccessWrapper;
11 import org.onap.msb.apiroute.wrapper.service.ApiRouteService;
12 import org.onap.msb.apiroute.wrapper.util.JedisUtil;
13 import org.powermock.api.mockito.PowerMockito;
14 import org.powermock.core.classloader.annotations.PowerMockIgnore;
15 import org.powermock.core.classloader.annotations.PrepareForTest;
16 import org.powermock.modules.junit4.PowerMockRunner;
17 import redis.clients.jedis.JedisPool;
18 import redis.clients.jedis.JedisPoolConfig;
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 static org.junit.Assert.*;
29 @RunWith(PowerMockRunner.class)
30 @PrepareForTest({JedisUtil.class,RedisAccessWrapper.class})
31 @PowerMockIgnore( {"javax.management.*"})
32 public class ApiRouteServiceTest {
33 private static ApiRouteService apiRouteService = null;
34 private static Comparator<ApiRouteInfo> apiRouteComparator = null;
36 public static void setUp() throws Exception{
37 apiRouteService = ApiRouteService.getInstance();
38 apiRouteComparator = new Comparator<ApiRouteInfo>() {
40 public int compare(ApiRouteInfo o1, ApiRouteInfo o2) {
41 if (!o1.getServiceName().equals(o2.getServiceName()))
42 return (o1.getServiceName()).compareTo(o2.getServiceName());
43 if (!o1.getVersion().equals(o2.getVersion()))
44 return (o1.getVersion()).compareTo(o2.getVersion());
50 public void setUpBeforeTest() throws Exception {
51 final JedisPool mockJedisPool = new MockJedisPool(new JedisPoolConfig(), "localhost");
52 PowerMockito.mockStatic(JedisUtil.class);
53 JedisUtil jedisUtil=PowerMockito.mock(JedisUtil.class);
54 PowerMockito.when(jedisUtil.borrowJedisInstance()).thenReturn(mockJedisPool.getResource());
56 PowerMockito.replace(PowerMockito.method(RedisAccessWrapper.class, "filterKeys")).with(new InvocationHandler() {
58 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
59 return mockJedisPool.getResource().keys((String) args[0]);
64 public void testGetApiRouteInstance_key_not_exist(){
66 assertNull(apiRouteService.getApiRouteInstance("msb:routing:api:notexistservice:v1"));
67 } catch (Exception e) {
68 assert false:"throw exception means error occured!"+e.getMessage();
73 public void testGetApiRouteInstance_key_exist(){
74 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
75 apirouteInfo.setServiceName("testapi");
76 apirouteInfo.setVersion("v1");
77 apirouteInfo.setStatus("1");
78 apirouteInfo.setUrl("/api/testapi/v1");
79 apirouteInfo.setUseOwnUpstream("0");
80 apirouteInfo.setVisualRange("0");
81 apirouteInfo.setEnable_ssl(false);
82 RouteServer[] servers = new RouteServer[]{new RouteServer("10.74.148.88","8080")};
83 apirouteInfo.setServers(servers);
85 apiRouteService.saveApiRouteService2Redis(apirouteInfo,"msb:routing:api:testapi:v1");
86 assertEquals(apirouteInfo, apiRouteService.getApiRouteInstance("msb:routing:api:testapi:v1"));
87 } catch (Exception e) {
88 assert false:"throw exception means error occured!"+e.getMessage();
93 public void testSaveApiRouteService2Redis(){
94 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
95 apirouteInfo.setServiceName("testapi");
96 apirouteInfo.setVersion("v1");
97 apirouteInfo.setStatus("1");
98 apirouteInfo.setUrl("/api/testapi/v1");
99 apirouteInfo.setUseOwnUpstream("0");
100 apirouteInfo.setVisualRange("0");
101 apirouteInfo.setEnable_ssl(true);
102 RouteServer[] servers = new RouteServer[]{new RouteServer("10.74.148.88","8080")};
103 apirouteInfo.setServers(servers);
105 apiRouteService.saveApiRouteService2Redis(apirouteInfo,"msb:routing:api:testapi:v1");
106 assertEquals(apirouteInfo, apiRouteService.getApiRouteInstance("msb:routing:api:testapi:v1"));
107 } catch (Exception e) {
108 assert false:"throw exception means error occured!"+e.getMessage();
113 public void testSaveApiRouteService2Redis2(){
114 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
115 apirouteInfo.setServiceName("test26msb");
116 apirouteInfo.setVersion("v1");
117 apirouteInfo.setStatus("1");
118 apirouteInfo.setUrl("/api/microservices/v1");
119 apirouteInfo.setUseOwnUpstream("0");
120 apirouteInfo.setVisualRange("0");
121 apirouteInfo.setEnable_ssl(true);
122 RouteServer[] servers = new RouteServer[]{new RouteServer("10.74.151.26","443")};
123 apirouteInfo.setServers(servers);
125 apiRouteService.saveApiRouteService2Redis(apirouteInfo,"msb:routing:api:test26msb:v1");
126 assertEquals(apirouteInfo, apiRouteService.getApiRouteInstance("msb:routing:api:test26msb:v1"));
127 } catch (Exception e) {
128 assert false:"throw exception means error occured!"+e.getMessage();
133 public void testDeleteApiRouteService2Redis(){
134 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
135 apirouteInfo.setServiceName("testapi");
136 apirouteInfo.setVersion("v1");
137 apirouteInfo.setStatus("1");
138 apirouteInfo.setUrl("/api/testapi/v1");
139 apirouteInfo.setUseOwnUpstream("0");
140 apirouteInfo.setVisualRange("0");
141 apirouteInfo.setEnable_ssl(false);
142 RouteServer[] servers = new RouteServer[]{new RouteServer("10.74.148.88","8080")};
143 apirouteInfo.setServers(servers);
145 apiRouteService.saveApiRouteService2Redis(apirouteInfo,"msb:routing:api:testapi:v1");
146 assertNotNull(apiRouteService.getApiRouteInstance("msb:routing:api:testapi:v1"));
147 apiRouteService.deleteApiRouteService2Redis("msb:routing:api:testapi:v1");
148 assertNull(apiRouteService.getApiRouteInstance("msb:routing:api:testapi:v1"));
149 } catch (Exception e) {
150 assert false:"throw exception means error occured!"+e.getMessage();
155 public void testUpdateApiRouteStatus2Redis(){
156 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
157 apirouteInfo.setServiceName("testapi");
158 apirouteInfo.setVersion("v1");
159 apirouteInfo.setStatus("1");
160 apirouteInfo.setUrl("/api/testapi/v1");
161 apirouteInfo.setUseOwnUpstream("0");
162 apirouteInfo.setVisualRange("0");
163 apirouteInfo.setEnable_ssl(true);
164 RouteServer[] servers = new RouteServer[]{new RouteServer("10.74.148.88","8080")};
165 apirouteInfo.setServers(servers);
167 apiRouteService.saveApiRouteService2Redis(apirouteInfo,"msb:routing:api:testapi:v1");
168 assertEquals("1", apiRouteService.getApiRouteInstance("msb:routing:api:testapi:v1").getStatus());
169 apiRouteService.updateApiRouteStatus2Redis("msb:routing:api:testapi:v1","0");
170 assertEquals("0", apiRouteService.getApiRouteInstance("msb:routing:api:testapi:v1").getStatus());
171 } catch (Exception e) {
172 assert false:"throw exception means error occured!"+e.getMessage();
177 public void testGetMultiApiRouteInstances() throws Exception {
178 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
179 apirouteInfo.setServiceName("testapi");
180 apirouteInfo.setVersion("v1");
181 apirouteInfo.setStatus("1");
182 apirouteInfo.setUrl("/api/testapi/v1");
183 apirouteInfo.setUseOwnUpstream("0");
184 apirouteInfo.setVisualRange("0");
185 apirouteInfo.setEnable_ssl(false);
186 apirouteInfo.setServers(new RouteServer[]{new RouteServer("10.74.148.88","8080")});
188 ApiRouteInfo apirouteInfo2 = new ApiRouteInfo();
189 apirouteInfo2.setServiceName("testapi");
190 apirouteInfo2.setVersion("v2");
191 apirouteInfo2.setStatus("0");
192 apirouteInfo2.setUrl("/api/testapi/v2");
193 apirouteInfo2.setUseOwnUpstream("0");
194 apirouteInfo2.setVisualRange("0");;
195 apirouteInfo.setEnable_ssl(true);
196 apirouteInfo2.setServers(new RouteServer[]{new RouteServer("10.74.148.88","8088")});
198 apiRouteService.saveApiRouteService2Redis(apirouteInfo,"msb:routing:api:testapi:v1");
199 apiRouteService.saveApiRouteService2Redis(apirouteInfo2,"msb:routing:api:testapi:v2");
201 List<ApiRouteInfo> expected = new ArrayList<>();
202 expected.add(apirouteInfo);
203 expected.add(apirouteInfo2);
204 Collections.sort(expected, apiRouteComparator);
206 List<ApiRouteInfo> result = apiRouteService.getMultiApiRouteInstances("msb:routing:api:*");
208 Collections.sort(result, apiRouteComparator);
209 assertEquals(expected, result);
213 public void testDeleteMultiApiRouteInstances() throws Exception {
214 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
215 apirouteInfo.setServiceName("testapi");
216 apirouteInfo.setVersion("v1");
217 apirouteInfo.setStatus("1");
218 apirouteInfo.setUrl("/api/testapi/v1");
219 apirouteInfo.setUseOwnUpstream("0");
220 apirouteInfo.setVisualRange("0");
221 apirouteInfo.setEnable_ssl(false);
222 apirouteInfo.setServers(new RouteServer[]{new RouteServer("10.74.148.88","8080")});
224 ApiRouteInfo apirouteInfo2 = new ApiRouteInfo();
225 apirouteInfo2.setServiceName("testapi");
226 apirouteInfo2.setVersion("v2");
227 apirouteInfo2.setStatus("0");
228 apirouteInfo2.setUrl("/api/testapi/v2");
229 apirouteInfo2.setUseOwnUpstream("0");
230 apirouteInfo2.setVisualRange("0");;
231 apirouteInfo.setEnable_ssl(true);
232 apirouteInfo2.setServers(new RouteServer[]{new RouteServer("10.74.148.88","8088")});
233 apiRouteService.saveApiRouteService2Redis(apirouteInfo,"msb:routing:api:testapi:v1");
234 apiRouteService.saveApiRouteService2Redis(apirouteInfo2,"msb:routing:api:testapi:v2");
236 assertEquals(2,apiRouteService.getMultiApiRouteInstances("msb:routing:api:testapi:*").size());
237 assertEquals(2,apiRouteService.deleteMultiApiRouteService2Redis("msb:routing:api:testapi:*"));
238 assertEquals(0,apiRouteService.getMultiApiRouteInstances("msb:routing:api:testapi:*").size());
241 @Test(expected = Exception.class)
242 public void testUpdateApiRouteStatus2Redis_keyNotExist() throws Exception {
243 apiRouteService.updateApiRouteStatus2Redis("msb:routing:api:notexistservice:v1","0");
246 @Test(expected = Exception.class)
247 public void testSaveApiRouteService2Redis_null() throws Exception {
248 apiRouteService.saveApiRouteService2Redis(null,"msb:routing:api:null:v1");