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;
16 import java.lang.reflect.InvocationHandler;
17 import java.lang.reflect.Method;
18 import java.util.ArrayList;
19 import java.util.Arrays;
20 import java.util.Collections;
21 import java.util.Comparator;
22 import java.util.List;
24 import org.junit.Assert;
25 import org.junit.Before;
26 import org.junit.BeforeClass;
27 import org.junit.Test;
28 import org.junit.runner.RunWith;
29 import org.onap.msb.apiroute.api.ApiRouteInfo;
30 import org.onap.msb.apiroute.api.RouteServer;
31 import org.onap.msb.apiroute.api.exception.ExtendedNotFoundException;
32 import org.onap.msb.apiroute.wrapper.dao.RedisAccessWrapper;
33 import org.onap.msb.apiroute.wrapper.util.ConfigUtil;
34 import org.onap.msb.apiroute.wrapper.util.JacksonJsonUtil;
35 import org.onap.msb.apiroute.wrapper.util.JedisUtil;
36 import org.onap.msb.apiroute.wrapper.util.RouteUtil;
37 import org.powermock.api.mockito.PowerMockito;
38 import org.powermock.core.classloader.annotations.PowerMockIgnore;
39 import org.powermock.core.classloader.annotations.PrepareForTest;
40 import org.powermock.modules.junit4.PowerMockRunner;
42 import com.fiftyonred.mock_jedis.MockJedisPool;
44 import redis.clients.jedis.JedisPool;
45 import redis.clients.jedis.JedisPoolConfig;
48 @RunWith(PowerMockRunner.class)
49 @PrepareForTest({JedisUtil.class, RouteUtil.class, RedisAccessWrapper.class})
50 @PowerMockIgnore({"javax.management.*"})
51 public class ApiRouteServiceWrapperTest {
52 private static ApiRouteServiceWrapper apiRouteServiceWrapper;
53 private static Comparator<ApiRouteInfo> apiRouteComparator = null;
56 public static void setUpBeforeClass() throws Exception {
57 apiRouteServiceWrapper = ApiRouteServiceWrapper.getInstance();
58 apiRouteComparator = new Comparator<ApiRouteInfo>() {
60 public int compare(ApiRouteInfo o1, ApiRouteInfo o2) {
61 if (!o1.getServiceName().equals(o2.getServiceName()))
62 return (o1.getServiceName()).compareTo(o2.getServiceName());
63 if (!o1.getVersion().equals(o2.getVersion()))
64 return (o1.getVersion()).compareTo(o2.getVersion());
69 PowerMockito.mockStatic(System.class);
70 PowerMockito.when(System.getenv("ROUTE_WAY")).thenReturn(null);
71 PowerMockito.when(System.getenv("ROUTE_WAY")).thenReturn("ip|domain");
72 ConfigUtil.getInstance().initRouteWay();
76 public void setUpBeforeTest() throws Exception {
77 final JedisPool mockJedisPool = new MockJedisPool(new JedisPoolConfig(), "localhost");
78 PowerMockito.mockStatic(JedisUtil.class);
79 JedisUtil jedisUtil = PowerMockito.mock(JedisUtil.class);
80 PowerMockito.when(jedisUtil.borrowJedisInstance()).thenReturn(mockJedisPool.getResource());
82 PowerMockito.replace(PowerMockito.method(RedisAccessWrapper.class, "filterKeys")).with(new InvocationHandler() {
84 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
85 return mockJedisPool.getResource().keys((String) args[0]);
93 public void test_getApiRouteInstance_not_exist() {
95 apiRouteServiceWrapper.getApiRouteInstance("testForJunit", "v1", "", "", "ip");
96 Assert.fail("should not process to here.");
97 } catch (Exception e) {
98 Assert.assertTrue(e instanceof ExtendedNotFoundException);
104 public void test_getApiRouteInstance() {
106 ApiRouteInfo apirouteInfo = buildApiRouteInfo();
108 apiRouteServiceWrapper.saveApiRouteInstance4Rest(apirouteInfo, "ip");
109 ApiRouteInfo dbApirouteInfo = apiRouteServiceWrapper.getApiRouteInstance("testapi", "v1", "", "", "ip");
110 Assert.assertEquals(apirouteInfo, dbApirouteInfo);
111 } catch (Exception e) {
112 Assert.fail("throw exception means error occured!" + e.getMessage());
120 public void test_getAllApiRouteInstances() {
121 ApiRouteInfo apirouteInfo = buildApiRouteInfo();
122 ApiRouteInfo apirouteInfo2 = buildApiRouteInfo2();
123 List<ApiRouteInfo> expected = new ArrayList<>();
124 expected.add(apirouteInfo);
125 expected.add(apirouteInfo2);
126 Collections.sort(expected, apiRouteComparator);
129 apiRouteServiceWrapper.saveApiRouteInstance4Rest(apirouteInfo, "ip");
130 apiRouteServiceWrapper.saveApiRouteInstance4Rest(apirouteInfo2, "ip");
133 PowerMockito.mockStatic(RouteUtil.class);
134 PowerMockito.when(RouteUtil.getMutiRedisKey(RouteUtil.APIROUTE, "ip")).thenReturn("msb:routing:api:*");
135 List<ApiRouteInfo> apiRouterList = apiRouteServiceWrapper.getAllApiRouteInstances("ip");
136 Collections.sort(apiRouterList, apiRouteComparator);
138 Assert.assertEquals(expected, apiRouterList);
140 } catch (Exception e) {
141 Assert.fail("throw exception means error occured!" + e.getMessage());
147 public void test_updateApiRouteStatus() {
148 ApiRouteInfo apirouteInfo = buildApiRouteInfo();
150 apiRouteServiceWrapper.saveApiRouteInstance4Rest(apirouteInfo, "ip");
151 ApiRouteInfo dbApirouteInfo = apiRouteServiceWrapper.getApiRouteInstance("testapi", "v1", "", "", "ip");
152 Assert.assertEquals("1", dbApirouteInfo.getStatus());
153 apiRouteServiceWrapper.updateApiRouteStatus("testapi", "v1", "", "", "0", "ip");
154 dbApirouteInfo = apiRouteServiceWrapper.getApiRouteInstance("testapi", "v1", "", "", "ip");
155 Assert.assertEquals("0", dbApirouteInfo.getStatus());
156 } catch (Exception e) {
157 Assert.fail("throw exception means error occured!" + e.getMessage());
165 public void test_deleteApiRoute() {
166 ApiRouteInfo apirouteInfo2 = buildApiRouteInfo2();
168 apiRouteServiceWrapper.saveApiRouteInstance4Rest(apirouteInfo2, "ip");
169 ApiRouteInfo dbApirouteInfo = apiRouteServiceWrapper.getApiRouteInstance("testapi2", "null", "", "", "ip");
170 Assert.assertNotNull(dbApirouteInfo);
172 } catch (Exception e) {
173 Assert.fail("throw exception means error occured!" + e.getMessage());
176 apiRouteServiceWrapper.deleteApiRoute("testapi2", "null", "", "", "ip");
177 apiRouteServiceWrapper.getApiRouteInstance("testapi2", "", "", "", "ip");
178 } catch (Exception e) {
179 Assert.assertTrue(e instanceof ExtendedNotFoundException);
184 public void test_getAllApiDocs() {
185 String[] paths = apiRouteServiceWrapper.getAllApiDocs();
186 String[] expecteds_paths = {"api-doc1.json", "api-doc2.json"};
187 Arrays.sort(expecteds_paths);
189 Assert.assertArrayEquals(expecteds_paths, paths);
193 public void test_getAllrouteByJson() {
194 ApiRouteInfo apirouteInfo = buildApiRouteInfo();
196 apiRouteServiceWrapper.saveApiRouteInstance4Rest(apirouteInfo, "ip");
198 ApiRouteInfo[] apirouteList = {apirouteInfo};
199 String expected_routeJson = JacksonJsonUtil.beanToJson(apirouteList);
201 PowerMockito.mockStatic(RouteUtil.class);
202 PowerMockito.when(RouteUtil.getMutiRedisKey(RouteUtil.APIROUTE, "ip")).thenReturn("msb:routing:api:*");
203 PowerMockito.when(RouteUtil.getMutiRedisKey(RouteUtil.IUIROUTE, "ip")).thenReturn("msb:routing:iui:*");
204 PowerMockito.when(RouteUtil.getMutiRedisKey(RouteUtil.CUSTOMROUTE, "ip"))
205 .thenReturn("msb:routing:custom:*");
207 String allrouteJson = apiRouteServiceWrapper.getAllrouteByJson("ip");
208 Assert.assertEquals(expected_routeJson, allrouteJson);
209 } catch (Exception e) {
210 Assert.fail("throw exception means error occured!" + e.getMessage());
218 private ApiRouteInfo buildApiRouteInfo() {
219 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
220 apirouteInfo.setServiceName("testapi");
221 apirouteInfo.setVersion("v1");
222 apirouteInfo.setStatus("1");
223 apirouteInfo.setUrl("/api/testapi/v1");
224 apirouteInfo.setUseOwnUpstream("0");
225 apirouteInfo.setVisualRange("0");
226 apirouteInfo.setEnable_ssl(false);
227 RouteServer[] servers = new RouteServer[] {new RouteServer("10.74.148.88", "8080")};
228 apirouteInfo.setServers(servers);
232 private ApiRouteInfo buildApiRouteInfo2() {
233 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
234 apirouteInfo.setServiceName("testapi2");
235 apirouteInfo.setVersion("");
236 apirouteInfo.setStatus("1");
237 apirouteInfo.setUrl("/api/testapi2/v1");
238 apirouteInfo.setUseOwnUpstream("0");
239 apirouteInfo.setVisualRange("1");
240 apirouteInfo.setEnable_ssl(true);
241 RouteServer[] servers = new RouteServer[] {new RouteServer("10.74.148.89", "8080")};
242 apirouteInfo.setServers(servers);