fix powermock issue
[msb/apigateway.git] / apiroute / apiroute-service / src / test / java / org / onap / msb / apiroute / wrapper / service / ApiRouteServiceTest.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.service;
15
16 import static org.junit.Assert.assertEquals;
17 import static org.junit.Assert.assertNotNull;
18 import static org.junit.Assert.assertNull;
19
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;
26
27 import org.junit.Before;
28 import org.junit.BeforeClass;
29 import org.junit.Test;
30 import org.junit.runner.RunWith;
31 import org.onap.msb.apiroute.api.ApiRouteInfo;
32 import org.onap.msb.apiroute.api.RouteServer;
33 import org.onap.msb.apiroute.wrapper.dao.RedisAccessWrapper;
34 import org.onap.msb.apiroute.wrapper.util.JedisUtil;
35 import org.powermock.api.mockito.PowerMockito;
36 import org.powermock.core.classloader.annotations.PowerMockIgnore;
37 import org.powermock.core.classloader.annotations.PrepareForTest;
38 import org.powermock.modules.junit4.PowerMockRunner;
39
40 import com.fiftyonred.mock_jedis.MockJedisPool;
41
42 import redis.clients.jedis.JedisPool;
43 import redis.clients.jedis.JedisPoolConfig;
44
45 @RunWith(PowerMockRunner.class)
46 @PrepareForTest({JedisUtil.class, RedisAccessWrapper.class})
47 @PowerMockIgnore({"javax.management.*", "jdk.internal.reflect.*"})
48 public class ApiRouteServiceTest {
49     private static ApiRouteService apiRouteService = null;
50     private static Comparator<ApiRouteInfo> apiRouteComparator = null;
51
52     @BeforeClass
53     public static void setUp() throws Exception {
54         apiRouteService = ApiRouteService.getInstance();
55         apiRouteComparator = new Comparator<ApiRouteInfo>() {
56             @Override
57             public int compare(ApiRouteInfo o1, ApiRouteInfo o2) {
58                 if (!o1.getServiceName().equals(o2.getServiceName()))
59                     return (o1.getServiceName()).compareTo(o2.getServiceName());
60                 if (!o1.getVersion().equals(o2.getVersion()))
61                     return (o1.getVersion()).compareTo(o2.getVersion());
62                 return 0;
63             }
64         };
65     }
66
67     @Before
68     public void setUpBeforeTest() throws Exception {
69         final JedisPool mockJedisPool = new MockJedisPool(new JedisPoolConfig(), "localhost");
70         PowerMockito.mockStatic(JedisUtil.class);
71         JedisUtil jedisUtil = PowerMockito.mock(JedisUtil.class);
72         PowerMockito.when(jedisUtil.borrowJedisInstance()).thenReturn(mockJedisPool.getResource());
73
74         PowerMockito.replace(PowerMockito.method(RedisAccessWrapper.class, "filterKeys")).with(new InvocationHandler() {
75             @Override
76             public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
77                 return mockJedisPool.getResource().keys((String) args[0]);
78             }
79         });
80     }
81
82     @Test
83     public void testGetApiRouteInstance_key_not_exist() {
84         try {
85             assertNull(apiRouteService.getApiRouteInstance("msb:routing:api:notexistservice:v1"));
86         } catch (Exception e) {
87             assert false : "throw exception means error occured!" + e.getMessage();
88         }
89     }
90
91     @Test
92     public void testGetApiRouteInstance_key_exist() {
93         ApiRouteInfo apirouteInfo = new ApiRouteInfo();
94         apirouteInfo.setServiceName("testapi");
95         apirouteInfo.setVersion("v1");
96         apirouteInfo.setStatus("1");
97         apirouteInfo.setUrl("/api/testapi/v1");
98         apirouteInfo.setUseOwnUpstream("0");
99         apirouteInfo.setVisualRange("0");
100         apirouteInfo.setEnable_ssl(false);
101         RouteServer[] servers = new RouteServer[] {new RouteServer("10.74.148.88", "8080")};
102         apirouteInfo.setServers(servers);
103         try {
104             apiRouteService.saveApiRouteService2Redis(apirouteInfo, "msb:routing:api:testapi:v1");
105             assertEquals(apirouteInfo, apiRouteService.getApiRouteInstance("msb:routing:api:testapi:v1"));
106         } catch (Exception e) {
107             assert false : "throw exception means error occured!" + e.getMessage();
108         }
109     }
110
111     @Test
112     public void testSaveApiRouteService2Redis() {
113         ApiRouteInfo apirouteInfo = new ApiRouteInfo();
114         apirouteInfo.setServiceName("testapi");
115         apirouteInfo.setVersion("v1");
116         apirouteInfo.setStatus("1");
117         apirouteInfo.setUrl("/api/testapi/v1");
118         apirouteInfo.setUseOwnUpstream("0");
119         apirouteInfo.setVisualRange("0");
120         apirouteInfo.setEnable_ssl(true);
121         RouteServer[] servers = new RouteServer[] {new RouteServer("10.74.148.88", "8080")};
122         apirouteInfo.setServers(servers);
123         try {
124             apiRouteService.saveApiRouteService2Redis(apirouteInfo, "msb:routing:api:testapi:v1");
125             assertEquals(apirouteInfo, apiRouteService.getApiRouteInstance("msb:routing:api:testapi:v1"));
126         } catch (Exception e) {
127             assert false : "throw exception means error occured!" + e.getMessage();
128         }
129     }
130
131     @Test
132     public void testSaveApiRouteService2Redis2() {
133         ApiRouteInfo apirouteInfo = new ApiRouteInfo();
134         apirouteInfo.setServiceName("test26msb");
135         apirouteInfo.setVersion("v1");
136         apirouteInfo.setStatus("1");
137         apirouteInfo.setUrl("/api/microservices/v1");
138         apirouteInfo.setUseOwnUpstream("0");
139         apirouteInfo.setVisualRange("0");
140         apirouteInfo.setEnable_ssl(true);
141         RouteServer[] servers = new RouteServer[] {new RouteServer("10.74.151.26", "443")};
142         apirouteInfo.setServers(servers);
143         try {
144             apiRouteService.saveApiRouteService2Redis(apirouteInfo, "msb:routing:api:test26msb:v1");
145             assertEquals(apirouteInfo, apiRouteService.getApiRouteInstance("msb:routing:api:test26msb:v1"));
146         } catch (Exception e) {
147             assert false : "throw exception means error occured!" + e.getMessage();
148         }
149     }
150
151     @Test
152     public void testDeleteApiRouteService2Redis() {
153         ApiRouteInfo apirouteInfo = new ApiRouteInfo();
154         apirouteInfo.setServiceName("testapi");
155         apirouteInfo.setVersion("v1");
156         apirouteInfo.setStatus("1");
157         apirouteInfo.setUrl("/api/testapi/v1");
158         apirouteInfo.setUseOwnUpstream("0");
159         apirouteInfo.setVisualRange("0");
160         apirouteInfo.setEnable_ssl(false);
161         RouteServer[] servers = new RouteServer[] {new RouteServer("10.74.148.88", "8080")};
162         apirouteInfo.setServers(servers);
163         try {
164             apiRouteService.saveApiRouteService2Redis(apirouteInfo, "msb:routing:api:testapi:v1");
165             assertNotNull(apiRouteService.getApiRouteInstance("msb:routing:api:testapi:v1"));
166             apiRouteService.deleteApiRouteService2Redis("msb:routing:api:testapi:v1");
167             assertNull(apiRouteService.getApiRouteInstance("msb:routing:api:testapi:v1"));
168         } catch (Exception e) {
169             assert false : "throw exception means error occured!" + e.getMessage();
170         }
171     }
172
173     @Test
174     public void testUpdateApiRouteStatus2Redis() {
175         ApiRouteInfo apirouteInfo = new ApiRouteInfo();
176         apirouteInfo.setServiceName("testapi");
177         apirouteInfo.setVersion("v1");
178         apirouteInfo.setStatus("1");
179         apirouteInfo.setUrl("/api/testapi/v1");
180         apirouteInfo.setUseOwnUpstream("0");
181         apirouteInfo.setVisualRange("0");
182         apirouteInfo.setEnable_ssl(true);
183         RouteServer[] servers = new RouteServer[] {new RouteServer("10.74.148.88", "8080")};
184         apirouteInfo.setServers(servers);
185         try {
186             apiRouteService.saveApiRouteService2Redis(apirouteInfo, "msb:routing:api:testapi:v1");
187             assertEquals("1", apiRouteService.getApiRouteInstance("msb:routing:api:testapi:v1").getStatus());
188             apiRouteService.updateApiRouteStatus2Redis("msb:routing:api:testapi:v1", "0");
189             assertEquals("0", apiRouteService.getApiRouteInstance("msb:routing:api:testapi:v1").getStatus());
190         } catch (Exception e) {
191             assert false : "throw exception means error occured!" + e.getMessage();
192         }
193     }
194
195     @Test
196     public void testGetMultiApiRouteInstances() throws Exception {
197         ApiRouteInfo apirouteInfo = new ApiRouteInfo();
198         apirouteInfo.setServiceName("testapi");
199         apirouteInfo.setVersion("v1");
200         apirouteInfo.setStatus("1");
201         apirouteInfo.setUrl("/api/testapi/v1");
202         apirouteInfo.setUseOwnUpstream("0");
203         apirouteInfo.setVisualRange("0");
204         apirouteInfo.setEnable_ssl(false);
205         apirouteInfo.setServers(new RouteServer[] {new RouteServer("10.74.148.88", "8080")});
206
207         ApiRouteInfo apirouteInfo2 = new ApiRouteInfo();
208         apirouteInfo2.setServiceName("testapi");
209         apirouteInfo2.setVersion("v2");
210         apirouteInfo2.setStatus("0");
211         apirouteInfo2.setUrl("/api/testapi/v2");
212         apirouteInfo2.setUseOwnUpstream("0");
213         apirouteInfo2.setVisualRange("0");;
214         apirouteInfo.setEnable_ssl(true);
215         apirouteInfo2.setServers(new RouteServer[] {new RouteServer("10.74.148.88", "8088")});
216
217         apiRouteService.saveApiRouteService2Redis(apirouteInfo, "msb:routing:api:testapi:v1");
218         apiRouteService.saveApiRouteService2Redis(apirouteInfo2, "msb:routing:api:testapi:v2");
219
220         List<ApiRouteInfo> expected = new ArrayList<>();
221         expected.add(apirouteInfo);
222         expected.add(apirouteInfo2);
223         Collections.sort(expected, apiRouteComparator);
224
225         List<ApiRouteInfo> result = apiRouteService.getMultiApiRouteInstances("msb:routing:api:*");
226
227         Collections.sort(result, apiRouteComparator);
228         assertEquals(expected, result);
229     }
230
231     @Test
232     public void testDeleteMultiApiRouteInstances() throws Exception {
233         ApiRouteInfo apirouteInfo = new ApiRouteInfo();
234         apirouteInfo.setServiceName("testapi");
235         apirouteInfo.setVersion("v1");
236         apirouteInfo.setStatus("1");
237         apirouteInfo.setUrl("/api/testapi/v1");
238         apirouteInfo.setUseOwnUpstream("0");
239         apirouteInfo.setVisualRange("0");
240         apirouteInfo.setEnable_ssl(false);
241         apirouteInfo.setServers(new RouteServer[] {new RouteServer("10.74.148.88", "8080")});
242
243         ApiRouteInfo apirouteInfo2 = new ApiRouteInfo();
244         apirouteInfo2.setServiceName("testapi");
245         apirouteInfo2.setVersion("v2");
246         apirouteInfo2.setStatus("0");
247         apirouteInfo2.setUrl("/api/testapi/v2");
248         apirouteInfo2.setUseOwnUpstream("0");
249         apirouteInfo2.setVisualRange("0");;
250         apirouteInfo.setEnable_ssl(true);
251         apirouteInfo2.setServers(new RouteServer[] {new RouteServer("10.74.148.88", "8088")});
252         apiRouteService.saveApiRouteService2Redis(apirouteInfo, "msb:routing:api:testapi:v1");
253         apiRouteService.saveApiRouteService2Redis(apirouteInfo2, "msb:routing:api:testapi:v2");
254
255         assertEquals(2, apiRouteService.getMultiApiRouteInstances("msb:routing:api:testapi:*").size());
256         assertEquals(2, apiRouteService.deleteMultiApiRouteService2Redis("msb:routing:api:testapi:*"));
257         assertEquals(0, apiRouteService.getMultiApiRouteInstances("msb:routing:api:testapi:*").size());
258     }
259
260     @Test(expected = Exception.class)
261     public void testUpdateApiRouteStatus2Redis_keyNotExist() throws Exception {
262         apiRouteService.updateApiRouteStatus2Redis("msb:routing:api:notexistservice:v1", "0");
263     }
264
265     @Test(expected = Exception.class)
266     public void testSaveApiRouteService2Redis_null() throws Exception {
267         apiRouteService.saveApiRouteService2Redis(null, "msb:routing:api:null:v1");
268     }
269
270 }