fix powermock issue
[msb/apigateway.git] / apiroute / apiroute-service / src / test / java / org / onap / msb / apiroute / wrapper / ApiRouteServiceWrapperTest.java
1 /*******************************************************************************
2  * Copyright 2016-2017 ZTE, Inc. and others.
3  * 
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
6  * 
7  * http://www.apache.org/licenses/LICENSE-2.0
8  * 
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
12  * the License.
13  ******************************************************************************/
14 package org.onap.msb.apiroute.wrapper;
15
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;
23
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;
41
42 import com.fiftyonred.mock_jedis.MockJedisPool;
43
44 import redis.clients.jedis.JedisPool;
45 import redis.clients.jedis.JedisPoolConfig;
46
47
48 @RunWith(PowerMockRunner.class)
49 @PrepareForTest({JedisUtil.class, RouteUtil.class, RedisAccessWrapper.class})
50 @PowerMockIgnore({"javax.management.*","jdk.internal.reflect.*"})
51 public class ApiRouteServiceWrapperTest {
52     private static ApiRouteServiceWrapper apiRouteServiceWrapper;
53     private static Comparator<ApiRouteInfo> apiRouteComparator = null;
54
55     @BeforeClass
56     public static void setUpBeforeClass() throws Exception {
57         apiRouteServiceWrapper = ApiRouteServiceWrapper.getInstance();
58         apiRouteComparator = new Comparator<ApiRouteInfo>() {
59             @Override
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());
65                 return 0;
66             }
67         };
68
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();
73     }
74
75     @Before
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());
81
82         PowerMockito.replace(PowerMockito.method(RedisAccessWrapper.class, "filterKeys")).with(new InvocationHandler() {
83             @Override
84             public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
85                 return mockJedisPool.getResource().keys((String) args[0]);
86             }
87         });
88     }
89
90
91
92     @Test
93     public void test_getApiRouteInstance_not_exist() {
94         try {
95             apiRouteServiceWrapper.getApiRouteInstance("testForJunit", "v1", "", "", "ip");
96             Assert.fail("should not process to here.");
97         } catch (Exception e) {
98             Assert.assertTrue(e instanceof ExtendedNotFoundException);
99         }
100
101     }
102
103     @Test
104     public void test_getApiRouteInstance() {
105
106         ApiRouteInfo apirouteInfo = buildApiRouteInfo();
107         try {
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());
113         }
114
115     }
116
117
118
119     @Test
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);
127
128         try {
129             apiRouteServiceWrapper.saveApiRouteInstance4Rest(apirouteInfo, "ip");
130             apiRouteServiceWrapper.saveApiRouteInstance4Rest(apirouteInfo2, "ip");
131
132
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);
137
138             Assert.assertEquals(expected, apiRouterList);
139
140         } catch (Exception e) {
141             Assert.fail("throw exception means error occured!" + e.getMessage());
142         }
143
144     }
145
146     @Test
147     public void test_updateApiRouteStatus() {
148         ApiRouteInfo apirouteInfo = buildApiRouteInfo();
149         try {
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());
158         }
159
160     }
161
162
163
164     @Test
165     public void test_deleteApiRoute() {
166         ApiRouteInfo apirouteInfo2 = buildApiRouteInfo2();
167         try {
168             apiRouteServiceWrapper.saveApiRouteInstance4Rest(apirouteInfo2, "ip");
169             ApiRouteInfo dbApirouteInfo = apiRouteServiceWrapper.getApiRouteInstance("testapi2", "null", "", "", "ip");
170             Assert.assertNotNull(dbApirouteInfo);
171
172         } catch (Exception e) {
173             Assert.fail("throw exception means error occured!" + e.getMessage());
174         }
175         try {
176             apiRouteServiceWrapper.deleteApiRoute("testapi2", "null", "", "", "ip");
177             apiRouteServiceWrapper.getApiRouteInstance("testapi2", "", "", "", "ip");
178         } catch (Exception e) {
179             Assert.assertTrue(e instanceof ExtendedNotFoundException);
180         }
181     }
182
183     @Test
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);
188         Arrays.sort(paths);
189         Assert.assertArrayEquals(expecteds_paths, paths);
190     }
191
192     @Test
193     public void test_getAllrouteByJson() {
194         ApiRouteInfo apirouteInfo = buildApiRouteInfo();
195         try {
196             apiRouteServiceWrapper.saveApiRouteInstance4Rest(apirouteInfo, "ip");
197
198             ApiRouteInfo[] apirouteList = {apirouteInfo};
199             String expected_routeJson = JacksonJsonUtil.beanToJson(apirouteList);
200
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:*");
206
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());
211         }
212
213
214     }
215
216
217
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);
229         return apirouteInfo;
230     }
231
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);
243         return apirouteInfo;
244     }
245
246
247 }