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