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