1 /*******************************************************************************
2 * Copyright 2016-2017 ZTE, Inc. and others.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 ******************************************************************************/
16 package org.onap.msb.apiroute.wrapper.service;
18 import com.fiftyonred.mock_jedis.MockJedisPool;
19 import org.junit.Before;
20 import org.junit.BeforeClass;
21 import org.junit.Test;
22 import org.junit.runner.RunWith;
23 import org.onap.msb.apiroute.api.ApiRouteInfo;
24 import org.onap.msb.apiroute.api.RouteServer;
25 import org.onap.msb.apiroute.wrapper.dao.RedisAccessWrapper;
26 import org.onap.msb.apiroute.wrapper.service.ApiRouteService;
27 import org.onap.msb.apiroute.wrapper.util.JedisUtil;
28 import org.powermock.api.mockito.PowerMockito;
29 import org.powermock.core.classloader.annotations.PowerMockIgnore;
30 import org.powermock.core.classloader.annotations.PrepareForTest;
31 import org.powermock.modules.junit4.PowerMockRunner;
32 import redis.clients.jedis.JedisPool;
33 import redis.clients.jedis.JedisPoolConfig;
35 import java.lang.reflect.InvocationHandler;
36 import java.lang.reflect.Method;
37 import java.util.ArrayList;
38 import java.util.Collections;
39 import java.util.Comparator;
40 import java.util.List;
42 import static org.junit.Assert.*;
44 @RunWith(PowerMockRunner.class)
45 @PrepareForTest({JedisUtil.class,RedisAccessWrapper.class})
46 @PowerMockIgnore( {"javax.management.*"})
47 public class ApiRouteServiceTest {
48 private static ApiRouteService apiRouteService = null;
49 private static Comparator<ApiRouteInfo> apiRouteComparator = null;
51 public static void setUp() throws Exception{
52 apiRouteService = ApiRouteService.getInstance();
53 apiRouteComparator = new Comparator<ApiRouteInfo>() {
55 public int compare(ApiRouteInfo o1, ApiRouteInfo o2) {
56 if (!o1.getServiceName().equals(o2.getServiceName()))
57 return (o1.getServiceName()).compareTo(o2.getServiceName());
58 if (!o1.getVersion().equals(o2.getVersion()))
59 return (o1.getVersion()).compareTo(o2.getVersion());
65 public void setUpBeforeTest() throws Exception {
66 final JedisPool mockJedisPool = new MockJedisPool(new JedisPoolConfig(), "localhost");
67 PowerMockito.mockStatic(JedisUtil.class);
68 JedisUtil jedisUtil=PowerMockito.mock(JedisUtil.class);
69 PowerMockito.when(jedisUtil.borrowJedisInstance()).thenReturn(mockJedisPool.getResource());
71 PowerMockito.replace(PowerMockito.method(RedisAccessWrapper.class, "filterKeys")).with(new InvocationHandler() {
73 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
74 return mockJedisPool.getResource().keys((String) args[0]);
79 public void testGetApiRouteInstance_key_not_exist(){
81 assertNull(apiRouteService.getApiRouteInstance("msb:routing:api:notexistservice:v1"));
82 } catch (Exception e) {
83 assert false:"throw exception means error occured!"+e.getMessage();
88 public void testGetApiRouteInstance_key_exist(){
89 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
90 apirouteInfo.setServiceName("testapi");
91 apirouteInfo.setVersion("v1");
92 apirouteInfo.setStatus("1");
93 apirouteInfo.setUrl("/api/testapi/v1");
94 apirouteInfo.setUseOwnUpstream("0");
95 apirouteInfo.setVisualRange("0");
96 apirouteInfo.setEnable_ssl(false);
97 RouteServer[] servers = new RouteServer[]{new RouteServer("10.74.148.88","8080")};
98 apirouteInfo.setServers(servers);
100 apiRouteService.saveApiRouteService2Redis(apirouteInfo,"msb:routing:api:testapi:v1");
101 assertEquals(apirouteInfo, apiRouteService.getApiRouteInstance("msb:routing:api:testapi:v1"));
102 } catch (Exception e) {
103 assert false:"throw exception means error occured!"+e.getMessage();
108 public void testSaveApiRouteService2Redis(){
109 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
110 apirouteInfo.setServiceName("testapi");
111 apirouteInfo.setVersion("v1");
112 apirouteInfo.setStatus("1");
113 apirouteInfo.setUrl("/api/testapi/v1");
114 apirouteInfo.setUseOwnUpstream("0");
115 apirouteInfo.setVisualRange("0");
116 apirouteInfo.setEnable_ssl(true);
117 RouteServer[] servers = new RouteServer[]{new RouteServer("10.74.148.88","8080")};
118 apirouteInfo.setServers(servers);
120 apiRouteService.saveApiRouteService2Redis(apirouteInfo,"msb:routing:api:testapi:v1");
121 assertEquals(apirouteInfo, apiRouteService.getApiRouteInstance("msb:routing:api:testapi:v1"));
122 } catch (Exception e) {
123 assert false:"throw exception means error occured!"+e.getMessage();
128 public void testSaveApiRouteService2Redis2(){
129 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
130 apirouteInfo.setServiceName("test26msb");
131 apirouteInfo.setVersion("v1");
132 apirouteInfo.setStatus("1");
133 apirouteInfo.setUrl("/api/microservices/v1");
134 apirouteInfo.setUseOwnUpstream("0");
135 apirouteInfo.setVisualRange("0");
136 apirouteInfo.setEnable_ssl(true);
137 RouteServer[] servers = new RouteServer[]{new RouteServer("10.74.151.26","443")};
138 apirouteInfo.setServers(servers);
140 apiRouteService.saveApiRouteService2Redis(apirouteInfo,"msb:routing:api:test26msb:v1");
141 assertEquals(apirouteInfo, apiRouteService.getApiRouteInstance("msb:routing:api:test26msb:v1"));
142 } catch (Exception e) {
143 assert false:"throw exception means error occured!"+e.getMessage();
148 public void testDeleteApiRouteService2Redis(){
149 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
150 apirouteInfo.setServiceName("testapi");
151 apirouteInfo.setVersion("v1");
152 apirouteInfo.setStatus("1");
153 apirouteInfo.setUrl("/api/testapi/v1");
154 apirouteInfo.setUseOwnUpstream("0");
155 apirouteInfo.setVisualRange("0");
156 apirouteInfo.setEnable_ssl(false);
157 RouteServer[] servers = new RouteServer[]{new RouteServer("10.74.148.88","8080")};
158 apirouteInfo.setServers(servers);
160 apiRouteService.saveApiRouteService2Redis(apirouteInfo,"msb:routing:api:testapi:v1");
161 assertNotNull(apiRouteService.getApiRouteInstance("msb:routing:api:testapi:v1"));
162 apiRouteService.deleteApiRouteService2Redis("msb:routing:api:testapi:v1");
163 assertNull(apiRouteService.getApiRouteInstance("msb:routing:api:testapi:v1"));
164 } catch (Exception e) {
165 assert false:"throw exception means error occured!"+e.getMessage();
170 public void testUpdateApiRouteStatus2Redis(){
171 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
172 apirouteInfo.setServiceName("testapi");
173 apirouteInfo.setVersion("v1");
174 apirouteInfo.setStatus("1");
175 apirouteInfo.setUrl("/api/testapi/v1");
176 apirouteInfo.setUseOwnUpstream("0");
177 apirouteInfo.setVisualRange("0");
178 apirouteInfo.setEnable_ssl(true);
179 RouteServer[] servers = new RouteServer[]{new RouteServer("10.74.148.88","8080")};
180 apirouteInfo.setServers(servers);
182 apiRouteService.saveApiRouteService2Redis(apirouteInfo,"msb:routing:api:testapi:v1");
183 assertEquals("1", apiRouteService.getApiRouteInstance("msb:routing:api:testapi:v1").getStatus());
184 apiRouteService.updateApiRouteStatus2Redis("msb:routing:api:testapi:v1","0");
185 assertEquals("0", apiRouteService.getApiRouteInstance("msb:routing:api:testapi:v1").getStatus());
186 } catch (Exception e) {
187 assert false:"throw exception means error occured!"+e.getMessage();
192 public void testGetMultiApiRouteInstances() throws Exception {
193 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
194 apirouteInfo.setServiceName("testapi");
195 apirouteInfo.setVersion("v1");
196 apirouteInfo.setStatus("1");
197 apirouteInfo.setUrl("/api/testapi/v1");
198 apirouteInfo.setUseOwnUpstream("0");
199 apirouteInfo.setVisualRange("0");
200 apirouteInfo.setEnable_ssl(false);
201 apirouteInfo.setServers(new RouteServer[]{new RouteServer("10.74.148.88","8080")});
203 ApiRouteInfo apirouteInfo2 = new ApiRouteInfo();
204 apirouteInfo2.setServiceName("testapi");
205 apirouteInfo2.setVersion("v2");
206 apirouteInfo2.setStatus("0");
207 apirouteInfo2.setUrl("/api/testapi/v2");
208 apirouteInfo2.setUseOwnUpstream("0");
209 apirouteInfo2.setVisualRange("0");;
210 apirouteInfo.setEnable_ssl(true);
211 apirouteInfo2.setServers(new RouteServer[]{new RouteServer("10.74.148.88","8088")});
213 apiRouteService.saveApiRouteService2Redis(apirouteInfo,"msb:routing:api:testapi:v1");
214 apiRouteService.saveApiRouteService2Redis(apirouteInfo2,"msb:routing:api:testapi:v2");
216 List<ApiRouteInfo> expected = new ArrayList<>();
217 expected.add(apirouteInfo);
218 expected.add(apirouteInfo2);
219 Collections.sort(expected, apiRouteComparator);
221 List<ApiRouteInfo> result = apiRouteService.getMultiApiRouteInstances("msb:routing:api:*");
223 Collections.sort(result, apiRouteComparator);
224 assertEquals(expected, result);
228 public void testDeleteMultiApiRouteInstances() throws Exception {
229 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
230 apirouteInfo.setServiceName("testapi");
231 apirouteInfo.setVersion("v1");
232 apirouteInfo.setStatus("1");
233 apirouteInfo.setUrl("/api/testapi/v1");
234 apirouteInfo.setUseOwnUpstream("0");
235 apirouteInfo.setVisualRange("0");
236 apirouteInfo.setEnable_ssl(false);
237 apirouteInfo.setServers(new RouteServer[]{new RouteServer("10.74.148.88","8080")});
239 ApiRouteInfo apirouteInfo2 = new ApiRouteInfo();
240 apirouteInfo2.setServiceName("testapi");
241 apirouteInfo2.setVersion("v2");
242 apirouteInfo2.setStatus("0");
243 apirouteInfo2.setUrl("/api/testapi/v2");
244 apirouteInfo2.setUseOwnUpstream("0");
245 apirouteInfo2.setVisualRange("0");;
246 apirouteInfo.setEnable_ssl(true);
247 apirouteInfo2.setServers(new RouteServer[]{new RouteServer("10.74.148.88","8088")});
248 apiRouteService.saveApiRouteService2Redis(apirouteInfo,"msb:routing:api:testapi:v1");
249 apiRouteService.saveApiRouteService2Redis(apirouteInfo2,"msb:routing:api:testapi:v2");
251 assertEquals(2,apiRouteService.getMultiApiRouteInstances("msb:routing:api:testapi:*").size());
252 assertEquals(2,apiRouteService.deleteMultiApiRouteService2Redis("msb:routing:api:testapi:*"));
253 assertEquals(0,apiRouteService.getMultiApiRouteInstances("msb:routing:api:testapi:*").size());
256 @Test(expected = Exception.class)
257 public void testUpdateApiRouteStatus2Redis_keyNotExist() throws Exception {
258 apiRouteService.updateApiRouteStatus2Redis("msb:routing:api:notexistservice:v1","0");
261 @Test(expected = Exception.class)
262 public void testSaveApiRouteService2Redis_null() throws Exception {
263 apiRouteService.saveApiRouteService2Redis(null,"msb:routing:api:null:v1");