Add license header for java files
[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");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at 
7  * 
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  * 
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;
17
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;
34
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;
41
42 import static org.junit.Assert.*;
43
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;
50     @BeforeClass
51     public static void setUp() throws Exception{
52         apiRouteService = ApiRouteService.getInstance();
53         apiRouteComparator = new Comparator<ApiRouteInfo>() {
54             @Override
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());
60                 return 0;
61             }
62         };
63     }
64     @Before
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());
70
71         PowerMockito.replace(PowerMockito.method(RedisAccessWrapper.class, "filterKeys")).with(new InvocationHandler() {
72             @Override
73             public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
74                 return mockJedisPool.getResource().keys((String) args[0]);
75             }
76         });
77     }
78     @Test
79     public void testGetApiRouteInstance_key_not_exist(){
80         try {
81             assertNull(apiRouteService.getApiRouteInstance("msb:routing:api:notexistservice:v1"));
82         } catch (Exception e) {
83             assert false:"throw exception means error occured!"+e.getMessage();
84         }
85     }
86
87     @Test
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);
99         try {
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();
104         }
105     }
106
107     @Test
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);
119         try {
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();
124         }
125     }
126
127     @Test
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);
139         try {
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();
144         }
145     }
146
147     @Test
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);
159         try {
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();
166         }
167     }
168
169     @Test
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);
181         try {
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();
188         }
189     }
190
191     @Test
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")});
202
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")});
212
213         apiRouteService.saveApiRouteService2Redis(apirouteInfo,"msb:routing:api:testapi:v1");
214         apiRouteService.saveApiRouteService2Redis(apirouteInfo2,"msb:routing:api:testapi:v2");
215
216         List<ApiRouteInfo> expected = new ArrayList<>();
217         expected.add(apirouteInfo);
218         expected.add(apirouteInfo2);
219         Collections.sort(expected, apiRouteComparator);
220
221         List<ApiRouteInfo> result = apiRouteService.getMultiApiRouteInstances("msb:routing:api:*");
222
223         Collections.sort(result, apiRouteComparator);
224         assertEquals(expected, result);
225     }
226
227     @Test
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")});
238
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");
250
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());
254     }
255
256     @Test(expected = Exception.class)
257     public void testUpdateApiRouteStatus2Redis_keyNotExist() throws Exception {
258         apiRouteService.updateApiRouteStatus2Redis("msb:routing:api:notexistservice:v1","0");
259     }
260
261     @Test(expected = Exception.class)
262     public void testSaveApiRouteService2Redis_null() throws Exception {
263         apiRouteService.saveApiRouteService2Redis(null,"msb:routing:api:null:v1");
264     }
265
266 }