2 * Copyright 2016 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.
16 package org.onap.msb.apiroute.wrapper;
18 import java.lang.reflect.InvocationHandler;
19 import java.lang.reflect.Method;
20 import java.util.ArrayList;
21 import java.util.Arrays;
22 import java.util.Collections;
23 import java.util.Comparator;
24 import java.util.List;
26 import org.junit.Assert;
27 import org.junit.Before;
28 import org.junit.BeforeClass;
29 import org.junit.Ignore;
30 import org.junit.Test;
31 import org.junit.runner.RunWith;
32 import org.onap.msb.apiroute.api.ApiRouteInfo;
33 import org.onap.msb.apiroute.api.RouteServer;
34 import org.onap.msb.apiroute.api.exception.ExtendedNotFoundException;
35 import org.onap.msb.apiroute.wrapper.ApiRouteServiceWrapper;
36 import org.onap.msb.apiroute.wrapper.dao.RedisAccessWrapper;
37 import org.onap.msb.apiroute.wrapper.util.ConfigUtil;
38 import org.onap.msb.apiroute.wrapper.util.JacksonJsonUtil;
39 import org.onap.msb.apiroute.wrapper.util.JedisUtil;
40 import org.onap.msb.apiroute.wrapper.util.RouteUtil;
41 import org.powermock.api.mockito.PowerMockito;
42 import org.powermock.core.classloader.annotations.PowerMockIgnore;
43 import org.powermock.core.classloader.annotations.PrepareForTest;
44 import org.powermock.modules.junit4.PowerMockRunner;
46 import redis.clients.jedis.JedisPool;
47 import redis.clients.jedis.JedisPoolConfig;
49 import com.fiftyonred.mock_jedis.MockJedisPool;
52 @RunWith(PowerMockRunner.class)
53 @PrepareForTest({JedisUtil.class,RouteUtil.class,RedisAccessWrapper.class})
54 @PowerMockIgnore( {"javax.management.*"})
55 public class ApiRouteServiceWrapperTest {
56 private static ApiRouteServiceWrapper apiRouteServiceWrapper;
57 private static Comparator<ApiRouteInfo> apiRouteComparator = null;
60 public static void setUpBeforeClass() throws Exception {
61 apiRouteServiceWrapper=ApiRouteServiceWrapper.getInstance();
62 apiRouteComparator = new Comparator<ApiRouteInfo>() {
64 public int compare(ApiRouteInfo o1, ApiRouteInfo o2) {
65 if (!o1.getServiceName().equals(o2.getServiceName()))
66 return (o1.getServiceName()).compareTo(o2.getServiceName());
67 if (!o1.getVersion().equals(o2.getVersion()))
68 return (o1.getVersion()).compareTo(o2.getVersion());
73 PowerMockito.mockStatic(System.class);
74 PowerMockito.when(System.getenv("ROUTE_WAY")).thenReturn(null);
75 PowerMockito.when(System.getenv("ROUTE_WAY")).thenReturn("ip|domain");
76 ConfigUtil.getInstance().initRouteWay();
80 public void setUpBeforeTest() throws Exception {
81 final JedisPool mockJedisPool = new MockJedisPool(new JedisPoolConfig(), "localhost");
82 PowerMockito.mockStatic(JedisUtil.class);
83 JedisUtil jedisUtil=PowerMockito.mock(JedisUtil.class);
84 PowerMockito.when(jedisUtil.borrowJedisInstance()).thenReturn(mockJedisPool.getResource());
86 PowerMockito.replace(PowerMockito.method(RedisAccessWrapper.class, "filterKeys")).with(new InvocationHandler() {
88 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
89 return mockJedisPool.getResource().keys((String) args[0]);
97 public void test_getApiRouteInstance_not_exist(){
99 apiRouteServiceWrapper.getApiRouteInstance("testForJunit", "v1","","","ip");
100 Assert.fail("should not process to here.");
103 Assert.assertTrue(e instanceof ExtendedNotFoundException);
109 public void test_getApiRouteInstance(){
111 ApiRouteInfo apirouteInfo = buildApiRouteInfo();
113 apiRouteServiceWrapper.saveApiRouteInstance4Rest(apirouteInfo, "ip");
114 ApiRouteInfo dbApirouteInfo=apiRouteServiceWrapper.getApiRouteInstance("testapi", "v1", "", "", "ip");
115 Assert.assertEquals(apirouteInfo,dbApirouteInfo );
116 } catch (Exception e) {
117 Assert.fail("throw exception means error occured!" + e.getMessage());
125 public void test_getAllApiRouteInstances(){
126 ApiRouteInfo apirouteInfo = buildApiRouteInfo();
127 ApiRouteInfo apirouteInfo2 = buildApiRouteInfo2();
128 List<ApiRouteInfo> expected = new ArrayList<>();
129 expected.add(apirouteInfo);
130 expected.add(apirouteInfo2);
131 Collections.sort(expected, apiRouteComparator);
134 apiRouteServiceWrapper.saveApiRouteInstance4Rest(apirouteInfo, "ip");
135 apiRouteServiceWrapper.saveApiRouteInstance4Rest(apirouteInfo2, "ip");
138 PowerMockito.mockStatic(RouteUtil.class);
139 PowerMockito.when(RouteUtil.getMutiRedisKey(RouteUtil.APIROUTE, "ip")).thenReturn("msb:routing:api:*");
140 List<ApiRouteInfo> apiRouterList=apiRouteServiceWrapper.getAllApiRouteInstances("ip");
141 Collections.sort(apiRouterList, apiRouteComparator);
143 Assert.assertEquals(expected,apiRouterList);
145 } catch (Exception e) {
146 Assert.fail("throw exception means error occured!" + e.getMessage());
152 public void test_updateApiRouteStatus(){
153 ApiRouteInfo apirouteInfo = buildApiRouteInfo();
155 apiRouteServiceWrapper.saveApiRouteInstance4Rest(apirouteInfo, "ip");
156 ApiRouteInfo dbApirouteInfo=apiRouteServiceWrapper.getApiRouteInstance("testapi", "v1", "", "", "ip");
157 Assert.assertEquals("1",dbApirouteInfo.getStatus() );
158 apiRouteServiceWrapper.updateApiRouteStatus("testapi","v1","","","0", "ip");
159 dbApirouteInfo=apiRouteServiceWrapper.getApiRouteInstance("testapi", "v1", "", "", "ip");
160 Assert.assertEquals("0",dbApirouteInfo.getStatus() );
161 } catch (Exception e) {
162 Assert.fail("throw exception means error occured!" + e.getMessage());
170 public void test_deleteApiRoute(){
171 ApiRouteInfo apirouteInfo2 = buildApiRouteInfo2();
173 apiRouteServiceWrapper.saveApiRouteInstance4Rest(apirouteInfo2, "ip");
174 ApiRouteInfo dbApirouteInfo=apiRouteServiceWrapper.getApiRouteInstance("testapi2", "null","","","ip");
175 Assert.assertNotNull(dbApirouteInfo);
177 } catch (Exception e) {
178 Assert.fail("throw exception means error occured!" + e.getMessage());
181 apiRouteServiceWrapper.deleteApiRoute("testapi2", "null","","","ip");
182 apiRouteServiceWrapper.getApiRouteInstance("testapi2", "","","","ip");
185 Assert.assertTrue(e instanceof ExtendedNotFoundException);
190 public void test_getAllApiDocs(){
191 String[] paths=apiRouteServiceWrapper.getAllApiDocs();
192 String[] expecteds_paths={"api-doc1.json","api-doc2.json"};
193 Arrays.sort(expecteds_paths);
195 Assert.assertArrayEquals(expecteds_paths, paths);
199 public void test_getAllrouteByJson(){
200 ApiRouteInfo apirouteInfo = buildApiRouteInfo();
202 apiRouteServiceWrapper.saveApiRouteInstance4Rest(apirouteInfo, "ip");
204 ApiRouteInfo[] apirouteList={apirouteInfo};
205 String expected_routeJson=JacksonJsonUtil.beanToJson(apirouteList);
207 PowerMockito.mockStatic(RouteUtil.class);
208 PowerMockito.when(RouteUtil.getMutiRedisKey(RouteUtil.APIROUTE, "ip")).thenReturn("msb:routing:api:*");
209 PowerMockito.when(RouteUtil.getMutiRedisKey(RouteUtil.IUIROUTE, "ip")).thenReturn("msb:routing:iui:*");
210 PowerMockito.when(RouteUtil.getMutiRedisKey(RouteUtil.CUSTOMROUTE, "ip")).thenReturn("msb:routing:custom:*");
212 String allrouteJson= apiRouteServiceWrapper.getAllrouteByJson("ip");
213 Assert.assertEquals(expected_routeJson, allrouteJson);
214 } catch (Exception e) {
215 Assert.fail("throw exception means error occured!" + e.getMessage());
223 private ApiRouteInfo buildApiRouteInfo(){
224 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
225 apirouteInfo.setServiceName("testapi");
226 apirouteInfo.setVersion("v1");
227 apirouteInfo.setStatus("1");
228 apirouteInfo.setUrl("/api/testapi/v1");
229 apirouteInfo.setUseOwnUpstream("0");
230 apirouteInfo.setVisualRange("0");
231 apirouteInfo.setEnable_ssl(false);
232 RouteServer[] servers = new RouteServer[]{new RouteServer("10.74.148.88","8080")};
233 apirouteInfo.setServers(servers);
237 private ApiRouteInfo buildApiRouteInfo2(){
238 ApiRouteInfo apirouteInfo = new ApiRouteInfo();
239 apirouteInfo.setServiceName("testapi2");
240 apirouteInfo.setVersion("");
241 apirouteInfo.setStatus("1");
242 apirouteInfo.setUrl("/api/testapi2/v1");
243 apirouteInfo.setUseOwnUpstream("0");
244 apirouteInfo.setVisualRange("1");
245 apirouteInfo.setEnable_ssl(true);
246 RouteServer[] servers = new RouteServer[]{new RouteServer("10.74.148.89","8080")};
247 apirouteInfo.setServers(servers);