Divide the MSB source codes into two repos
[msb/apigateway.git] / apiroute / apiroute-service / src / test / java / org / onap / msb / apiroute / wrapper / ApiRouteServiceWrapperTest.java
1 /**
2  * Copyright 2016 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;
17
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;
25
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;
45
46 import redis.clients.jedis.JedisPool;
47 import redis.clients.jedis.JedisPoolConfig;
48
49 import com.fiftyonred.mock_jedis.MockJedisPool;
50
51
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;
58     
59     @BeforeClass
60     public static void setUpBeforeClass() throws Exception {
61         apiRouteServiceWrapper=ApiRouteServiceWrapper.getInstance();
62         apiRouteComparator = new Comparator<ApiRouteInfo>() {
63           @Override
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());
69               return 0;
70           }
71       };
72       
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();
77     }
78     
79     @Before
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());
85
86         PowerMockito.replace(PowerMockito.method(RedisAccessWrapper.class, "filterKeys")).with(new InvocationHandler() {
87             @Override
88             public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
89                 return mockJedisPool.getResource().keys((String) args[0]);
90             }
91         });
92     }
93     
94     
95
96     @Test
97     public void test_getApiRouteInstance_not_exist(){
98       try {     
99         apiRouteServiceWrapper.getApiRouteInstance("testForJunit", "v1","","","ip");
100         Assert.fail("should not process to here.");          
101         } 
102         catch(Exception e){
103             Assert.assertTrue(e instanceof ExtendedNotFoundException);
104         }
105        
106     }
107     
108     @Test
109     public void test_getApiRouteInstance(){
110               
111           ApiRouteInfo apirouteInfo = buildApiRouteInfo();
112           try {
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());
118           }
119        
120     }
121     
122     
123     
124     @Test
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);
132       
133       try {
134         apiRouteServiceWrapper.saveApiRouteInstance4Rest(apirouteInfo, "ip");
135         apiRouteServiceWrapper.saveApiRouteInstance4Rest(apirouteInfo2, "ip");
136
137         
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);
142         
143         Assert.assertEquals(expected,apiRouterList);
144         
145       } catch (Exception e) {
146         Assert.fail("throw exception means error occured!" + e.getMessage());
147       }
148       
149     }
150     
151     @Test
152     public void test_updateApiRouteStatus(){
153       ApiRouteInfo apirouteInfo = buildApiRouteInfo();
154       try {
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());
163       }
164       
165     }
166     
167    
168     
169     @Test
170     public void test_deleteApiRoute(){
171       ApiRouteInfo apirouteInfo2 = buildApiRouteInfo2();
172       try {
173           apiRouteServiceWrapper.saveApiRouteInstance4Rest(apirouteInfo2, "ip");
174           ApiRouteInfo dbApirouteInfo=apiRouteServiceWrapper.getApiRouteInstance("testapi2", "null","","","ip");
175           Assert.assertNotNull(dbApirouteInfo);          
176           
177       } catch (Exception e) {
178         Assert.fail("throw exception means error occured!" + e.getMessage());
179       }
180       try {
181         apiRouteServiceWrapper.deleteApiRoute("testapi2", "null","","","ip");
182         apiRouteServiceWrapper.getApiRouteInstance("testapi2", "","","","ip");
183       }
184       catch(Exception e){
185         Assert.assertTrue(e instanceof ExtendedNotFoundException);       
186       }
187     }
188     
189     @Test
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);
194       Arrays.sort(paths);
195       Assert.assertArrayEquals(expecteds_paths, paths);
196     }
197     
198     @Test
199     public void test_getAllrouteByJson(){
200       ApiRouteInfo apirouteInfo = buildApiRouteInfo();
201       try {
202           apiRouteServiceWrapper.saveApiRouteInstance4Rest(apirouteInfo, "ip");
203           
204           ApiRouteInfo[] apirouteList={apirouteInfo};
205           String expected_routeJson=JacksonJsonUtil.beanToJson(apirouteList);
206           
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:*");
211
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());
216       }
217       
218       
219     }
220     
221    
222     
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);
234       return apirouteInfo;
235     }
236     
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);
248       return apirouteInfo;
249     }
250    
251     
252 }