Add license header for java files
[msb/apigateway.git] / apiroute / apiroute-service / src / test / java / org / onap / msb / apiroute / wrapper / service / IuiRouteServiceTest.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.IuiRouteInfo;
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.IuiRouteService;
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 IuiRouteServiceTest {
48     private static IuiRouteService iuiRouteService = null;
49     private static Comparator<IuiRouteInfo> iuiRouteComparator = null;
50     @BeforeClass
51     public static void setUp() throws Exception{
52         iuiRouteService = IuiRouteService.getInstance();
53         iuiRouteComparator = new Comparator<IuiRouteInfo>() {
54             @Override
55             public int compare(IuiRouteInfo o1, IuiRouteInfo o2) {
56                 if (!o1.getServiceName().equals(o2.getServiceName()))
57                     return (o1.getServiceName()).compareTo(o2.getServiceName());
58                 return 0;
59             }
60         };
61     }
62     @Before
63     public void setUpBeforeTest() throws Exception {
64         final JedisPool mockJedisPool = new MockJedisPool(new JedisPoolConfig(), "localhost");
65         PowerMockito.mockStatic(JedisUtil.class);
66         JedisUtil jedisUtil=PowerMockito.mock(JedisUtil.class);
67         PowerMockito.when(jedisUtil.borrowJedisInstance()).thenReturn(mockJedisPool.getResource());
68
69         PowerMockito.replace(PowerMockito.method(RedisAccessWrapper.class, "filterKeys")).with(new InvocationHandler() {
70             @Override
71             public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
72                 return mockJedisPool.getResource().keys((String) args[0]);
73             }
74         });
75     }
76     @Test
77     public void testGetIuiRouteInstance_key_not_exist(){
78         try {
79             assertNull(iuiRouteService.getIuiRouteInstance("msb:routing:iui:notexistservice:v1"));
80         } catch (Exception e) {
81             assert false:"throw exception means error occured!"+e.getMessage();
82         }
83     }
84
85     @Test
86     public void testGetIuiRouteInstance_key_exist(){
87         IuiRouteInfo iuirouteInfo = new IuiRouteInfo();
88         iuirouteInfo.setServiceName("testiui");
89         iuirouteInfo.setStatus("1");
90         iuirouteInfo.setUrl("/iui/testiui");
91         iuirouteInfo.setUseOwnUpstream("0");
92         iuirouteInfo.setVisualRange("0");
93         iuirouteInfo.setEnable_ssl(false);
94         RouteServer[] servers = new RouteServer[]{new RouteServer("10.74.148.88","8080")};
95         iuirouteInfo.setServers(servers);
96         try {
97             iuiRouteService.saveIuiRouteService2Redis(iuirouteInfo,"msb:routing:iui:testiui");
98             assertEquals(iuirouteInfo, iuiRouteService.getIuiRouteInstance("msb:routing:iui:testiui"));
99         } catch (Exception e) {
100             assert false:"throw exception means error occured!"+e.getMessage();
101         }
102     }
103
104     @Test
105     public void testSaveIuiRouteService2Redis(){
106         IuiRouteInfo iuirouteInfo = new IuiRouteInfo();
107         iuirouteInfo.setServiceName("testiui");
108         iuirouteInfo.setStatus("1");
109         iuirouteInfo.setUrl("/iui/testiui/v1");
110         iuirouteInfo.setUseOwnUpstream("0");
111         iuirouteInfo.setVisualRange("0");
112         iuirouteInfo.setEnable_ssl(true);
113         RouteServer[] servers = new RouteServer[]{new RouteServer("10.74.148.88","8080")};
114         iuirouteInfo.setServers(servers);
115         try {
116             iuiRouteService.saveIuiRouteService2Redis(iuirouteInfo,"msb:routing:iui:testiui");
117             assertEquals(iuirouteInfo, iuiRouteService.getIuiRouteInstance("msb:routing:iui:testiui"));
118         } catch (Exception e) {
119             assert false:"throw exception means error occured!"+e.getMessage();
120         }
121     }
122
123     @Test
124     public void testDeleteIuiRouteService2Redis(){
125         IuiRouteInfo iuirouteInfo = new IuiRouteInfo();
126         iuirouteInfo.setServiceName("testiui");
127         iuirouteInfo.setStatus("1");
128         iuirouteInfo.setUrl("/iui/testiui/v1");
129         iuirouteInfo.setUseOwnUpstream("0");
130         iuirouteInfo.setVisualRange("0");
131         iuirouteInfo.setEnable_ssl(false);
132         RouteServer[] servers = new RouteServer[]{new RouteServer("10.74.148.88","8080")};
133         iuirouteInfo.setServers(servers);
134         try {
135             iuiRouteService.saveIuiRouteService2Redis(iuirouteInfo,"msb:routing:iui:testiui");
136             assertNotNull(iuiRouteService.getIuiRouteInstance("msb:routing:iui:testiui"));
137             iuiRouteService.deleteIuiRouteService2Redis("msb:routing:iui:testiui");
138             assertNull(iuiRouteService.getIuiRouteInstance("msb:routing:iui:testiui"));
139         } catch (Exception e) {
140             assert false:"throw exception means error occured!"+e.getMessage();
141         }
142     }
143
144     @Test
145     public void testUpdateIuiRouteStatus2Redis(){
146         IuiRouteInfo iuirouteInfo = new IuiRouteInfo();
147         iuirouteInfo.setServiceName("testiui");
148         iuirouteInfo.setStatus("1");
149         iuirouteInfo.setUrl("/iui/testiui/v1");
150         iuirouteInfo.setUseOwnUpstream("0");
151         iuirouteInfo.setVisualRange("0");
152         iuirouteInfo.setEnable_ssl(true);
153         RouteServer[] servers = new RouteServer[]{new RouteServer("10.74.148.88","8080")};
154         iuirouteInfo.setServers(servers);
155         try {
156             iuiRouteService.saveIuiRouteService2Redis(iuirouteInfo,"msb:routing:iui:testiui");
157             assertEquals("1", iuiRouteService.getIuiRouteInstance("msb:routing:iui:testiui").getStatus());
158             iuiRouteService.updateIuiRouteStatus2Redis("msb:routing:iui:testiui","0");
159             assertEquals("0", iuiRouteService.getIuiRouteInstance("msb:routing:iui:testiui").getStatus());
160         } catch (Exception e) {
161             assert false:"throw exception means error occured!"+e.getMessage();
162         }
163     }
164
165     @Test
166     public void testGetMultiIuiRouteInstances() throws Exception {
167         IuiRouteInfo iuirouteInfo = new IuiRouteInfo();
168         iuirouteInfo.setServiceName("testiui");
169         iuirouteInfo.setStatus("1");
170         iuirouteInfo.setUrl("/iui/testiui");
171         iuirouteInfo.setUseOwnUpstream("0");
172         iuirouteInfo.setVisualRange("0");
173         iuirouteInfo.setEnable_ssl(false);
174         iuirouteInfo.setServers(new RouteServer[]{new RouteServer("10.74.148.88","8080")});
175
176         IuiRouteInfo iuirouteInfo2 = new IuiRouteInfo();
177         iuirouteInfo2.setServiceName("testiui2");
178         iuirouteInfo2.setStatus("0");
179         iuirouteInfo2.setUrl("/iui/testiui2");
180         iuirouteInfo2.setUseOwnUpstream("0");
181         iuirouteInfo2.setVisualRange("0");;
182         iuirouteInfo.setEnable_ssl(true);
183         iuirouteInfo2.setServers(new RouteServer[]{new RouteServer("10.74.148.88","8088")});
184
185         iuiRouteService.saveIuiRouteService2Redis(iuirouteInfo,"msb:routing:iui:testiui");
186         iuiRouteService.saveIuiRouteService2Redis(iuirouteInfo2,"msb:routing:iui:testiui2");
187
188         List<IuiRouteInfo> expected = new ArrayList<>();
189         expected.add(iuirouteInfo);
190         expected.add(iuirouteInfo2);
191         Collections.sort(expected, iuiRouteComparator);
192
193         List<IuiRouteInfo> result = iuiRouteService.getMultiIuiRouteInstances("msb:routing:iui:*");
194
195         Collections.sort(result, iuiRouteComparator);
196         assertEquals(expected, result);
197     }
198
199     @Test
200     public void testDeleteMultiIuiRouteInstances() throws Exception {
201         IuiRouteInfo iuirouteInfo = new IuiRouteInfo();
202         iuirouteInfo.setServiceName("testiui");
203         iuirouteInfo.setStatus("1");
204         iuirouteInfo.setUrl("/iui/testiui");
205         iuirouteInfo.setUseOwnUpstream("0");
206         iuirouteInfo.setVisualRange("0");
207         iuirouteInfo.setEnable_ssl(false);
208         iuirouteInfo.setServers(new RouteServer[]{new RouteServer("10.74.148.88","8080")});
209
210         IuiRouteInfo iuirouteInfo2 = new IuiRouteInfo();
211         iuirouteInfo2.setServiceName("testiui2");
212         iuirouteInfo2.setStatus("0");
213         iuirouteInfo2.setUrl("/iui/testiui2");
214         iuirouteInfo2.setUseOwnUpstream("0");
215         iuirouteInfo2.setVisualRange("0");;
216         iuirouteInfo.setEnable_ssl(true);
217         iuirouteInfo2.setServers(new RouteServer[]{new RouteServer("10.74.148.88","8088")});
218         iuiRouteService.saveIuiRouteService2Redis(iuirouteInfo,"msb:routing:iui:testiui");
219         iuiRouteService.saveIuiRouteService2Redis(iuirouteInfo2,"msb:routing:iui:testiui2");
220
221         assertEquals(2,iuiRouteService.getMultiIuiRouteInstances("msb:routing:iui:*").size());
222         assertEquals(2,iuiRouteService.deleteMultiIuiRouteService2Redis("msb:routing:iui:*"));
223         assertEquals(0,iuiRouteService.getMultiIuiRouteInstances("msb:routing:iui:*").size());
224     }
225
226     @Test(expected = Exception.class)
227     public void testUpdateIuiRouteStatus2Redis_keyNotExist() throws Exception {
228         iuiRouteService.updateIuiRouteStatus2Redis("msb:routing:iui:notexistservice","0");
229     }
230
231     @Test(expected = Exception.class)
232     public void testSaveIuiRouteService2Redis_null() throws Exception {
233         iuiRouteService.saveIuiRouteService2Redis(null,"msb:routing:iui:null");
234     }
235
236 }