e7b0e4c33b982e00e1b3a5ca54257a4b38bdf2bb
[msb/apigateway.git] / apiroute / apiroute-service / src / test / java / org / onap / msb / apiroute / wrapper / InitRouteServiceWrapperTest.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;
15
16 import java.lang.reflect.InvocationHandler;
17 import java.lang.reflect.Method;
18
19 import org.junit.Assert;
20 import org.junit.Before;
21 import org.junit.BeforeClass;
22 import org.junit.Test;
23 import org.junit.runner.RunWith;
24 import org.mockito.Mockito;
25 import org.onap.msb.apiroute.ApiRouteAppConfig;
26 import org.onap.msb.apiroute.api.ApiRouteInfo;
27 import org.onap.msb.apiroute.api.CustomRouteInfo;
28 import org.onap.msb.apiroute.api.DiscoverInfo;
29 import org.onap.msb.apiroute.api.IuiRouteInfo;
30 import org.onap.msb.apiroute.api.RouteServer;
31 import org.onap.msb.apiroute.wrapper.consulextend.Consul;
32 import org.onap.msb.apiroute.wrapper.consulextend.async.ConsulResponseCallback;
33 import org.onap.msb.apiroute.wrapper.consulextend.util.Http;
34 import org.onap.msb.apiroute.wrapper.dao.RedisAccessWrapper;
35 import org.onap.msb.apiroute.wrapper.util.ConfigUtil;
36 import org.onap.msb.apiroute.wrapper.util.JedisUtil;
37 import org.powermock.api.mockito.PowerMockito;
38 import org.powermock.core.classloader.annotations.PowerMockIgnore;
39 import org.powermock.core.classloader.annotations.PrepareForTest;
40 import org.powermock.modules.junit4.PowerMockRunner;
41
42 import com.fasterxml.jackson.core.type.TypeReference;
43 import com.fiftyonred.mock_jedis.MockJedisPool;
44
45 import io.dropwizard.jetty.HttpConnectorFactory;
46 import io.dropwizard.server.SimpleServerFactory;
47 import redis.clients.jedis.JedisPool;
48 import redis.clients.jedis.JedisPoolConfig;
49
50 @RunWith(PowerMockRunner.class)
51 @PrepareForTest({JedisUtil.class, RedisAccessWrapper.class, ConfigUtil.class, Http.class,
52                 InitRouteServiceWrapper.class})
53 @PowerMockIgnore({"javax.management.*", "javax.net.ssl.*"})
54 public class InitRouteServiceWrapperTest {
55     private static InitRouteServiceWrapper initRouteServiceWrapper;
56     private static Consul consul;
57
58     @SuppressWarnings("unchecked")
59     @BeforeClass
60     public static void setUpBeforeClass() throws Exception {
61         initRouteServiceWrapper = InitRouteServiceWrapper.getInstance();
62
63         Http http = PowerMockito.mock(Http.class);
64
65         PowerMockito.doNothing().when(http).asyncGet(Mockito.anyString(), Mockito.any(TypeReference.class),
66                         Mockito.any(ConsulResponseCallback.class));
67
68         PowerMockito.doNothing().when(http).asyncGetDelayHandle(Mockito.anyString(), Mockito.any(TypeReference.class),
69                         Mockito.any(ConsulResponseCallback.class));
70
71         PowerMockito.spy(Http.class);
72         PowerMockito.when(Http.getInstance()).thenReturn(http);
73
74         consul = Consul.builder().withHostAndPort("127.0.0.1", 8500).build();
75     }
76
77     @Before
78     public void initReidsMock() throws Exception {
79         final JedisPool mockJedisPool = new MockJedisPool(new JedisPoolConfig(), "localhost");
80         PowerMockito.mockStatic(JedisUtil.class);
81         JedisUtil jedisUtil = PowerMockito.mock(JedisUtil.class);
82         PowerMockito.when(jedisUtil.borrowJedisInstance()).thenReturn(mockJedisPool.getResource());
83
84         PowerMockito.replace(PowerMockito.method(RedisAccessWrapper.class, "filterKeys")).with(new InvocationHandler() {
85             @Override
86             public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
87                 return mockJedisPool.getResource().keys((String) args[0]);
88             }
89         });
90     }
91
92     @Test
93     public void test_startCheckRedisConnect() {
94         try {
95             boolean ifRedisConnect = initRouteServiceWrapper.startCheckRedisConnect();
96             Assert.assertEquals(true, ifRedisConnect);
97
98         } catch (Exception e) {
99             Assert.fail("throw exception means error occured!" + e.getMessage());
100
101         }
102     }
103
104     @Test
105     public void test_runConsulClientApp() {
106
107         DiscoverInfo discoverInfo = new DiscoverInfo();
108         discoverInfo.setEnabled(true);
109         discoverInfo.setIp("127.0.0.1");
110         discoverInfo.setPort(10081);
111
112         ApiRouteAppConfig configuration = new ApiRouteAppConfig();
113         configuration.setDiscoverInfo(discoverInfo);
114
115         PowerMockito.mockStatic(System.class);
116         PowerMockito.when(System.getenv("SDCLIENT_IP")).thenReturn("127.0.0.1");
117         ConfigUtil.getInstance().initDiscoverInfo(configuration);
118
119         try {
120             initRouteServiceWrapper.runConsulClientApp();
121
122             ApiRouteInfo discoverApiService = new ApiRouteInfo();
123             discoverApiService.setServiceName("msdiscover");
124             discoverApiService.setUrl("/api/microservices/v1");
125             discoverApiService.setVersion("v1");
126             discoverApiService.setMetricsUrl("/admin/metrics");
127             discoverApiService.setApiJson("/api/microservices/v1/swagger.json");
128             discoverApiService.setHost("msb");
129
130             RouteServer[] servers = new RouteServer[1];
131             servers[0] = new RouteServer(discoverInfo.getIp(), String.valueOf(discoverInfo.getPort()));
132             discoverApiService.setServers(servers);
133
134             ApiRouteInfo db_discoverApiService = ApiRouteServiceWrapper.getInstance().getApiRouteInstance("msdiscover",
135                             "v1", "msb", "", "ip");
136             Assert.assertEquals(discoverApiService, db_discoverApiService);
137
138             IuiRouteInfo discoverIUIService = new IuiRouteInfo();
139             discoverIUIService.setServiceName("msdiscover");
140             discoverIUIService.setUrl("/iui/microservices");
141             discoverIUIService.setHost("msb");
142             discoverIUIService.setServers(servers);
143
144             Assert.assertEquals(discoverIUIService,
145                             IuiRouteServiceWrapper.getInstance().getIuiRouteInstance("msdiscover", "msb", "", "ip"));
146
147         } catch (Exception e) {
148             assert false : "throw exception means error occured!" + e.getMessage();
149         }
150     }
151
152     @Test
153     public void test_initRouteInfoFromJson() {
154         try {
155
156             PowerMockito.mockStatic(System.class);
157             PowerMockito.when(System.getenv("dwApp_server_connector_port")).thenReturn("8068");
158             initRouteServiceWrapper.initRouteInfoFromJson();
159
160             ApiRouteInfo apiroute = new ApiRouteInfo();
161             apiroute.setServiceName("microservices");
162             apiroute.setUrl("/api/microservices/v1");
163             apiroute.setVersion("v1");
164             apiroute.setMetricsUrl("/admin/metrics");
165             apiroute.setApiJson("/api/microservices/v1/swagger.json");
166             apiroute.setHost("msb");
167             apiroute.setControl("1");
168             apiroute.setStatus("1");
169
170             RouteServer[] servers = new RouteServer[1];
171             servers[0] = new RouteServer("127.0.0.1", "8068");
172             apiroute.setServers(servers);
173
174             ApiRouteInfo db_apiService = ApiRouteServiceWrapper.getInstance().getApiRouteInstance("microservices", "v1",
175                             "msb", "", "ip");
176             Assert.assertEquals(apiroute, db_apiService);
177
178             IuiRouteInfo iuiRoute = new IuiRouteInfo();
179             iuiRoute.setServiceName("microservices");
180             iuiRoute.setUrl("/iui/microservices");
181             iuiRoute.setHost("msb");
182             iuiRoute.setControl("1");
183             iuiRoute.setStatus("1");
184             iuiRoute.setServers(servers);
185
186             Assert.assertEquals(iuiRoute,
187                             IuiRouteServiceWrapper.getInstance().getIuiRouteInstance("microservices", "msb", "", "ip"));
188
189             CustomRouteInfo customRoute = new CustomRouteInfo();
190             customRoute.setServiceName("/custom");
191             customRoute.setUrl("/custom");
192             customRoute.setHost("msb");
193             customRoute.setControl("1");
194             customRoute.setStatus("1");
195             RouteServer[] servers2 = new RouteServer[1];
196             servers2[0] = new RouteServer("127.0.0.1", "8066");
197             customRoute.setServers(servers2);
198
199             Assert.assertEquals(customRoute,
200                             CustomRouteServiceWrapper.getInstance().getCustomRouteInstance("/custom", "msb", "", "ip"));
201
202         } catch (Exception e) {
203             Assert.fail("throw exception means error occured!" + e.getMessage());
204         }
205     }
206
207     @Test
208     public void test_initMetricsConfig() {
209         ApiRouteAppConfig configuration = new ApiRouteAppConfig();
210         SimpleServerFactory simpleServerFactory = new SimpleServerFactory();
211         HttpConnectorFactory httpConnectorFactory = new HttpConnectorFactory();
212         httpConnectorFactory.setPort(8888);
213         simpleServerFactory.setConnector(httpConnectorFactory);
214         simpleServerFactory.setAdminContextPath("/admin");
215
216         configuration.setServerFactory(simpleServerFactory);
217
218         initRouteServiceWrapper.initMetricsConfig(configuration);
219
220         Assert.assertEquals("http://127.0.0.1:8888/admin/metrics", ConfigUtil.getInstance().getMetricsUrl());
221     }
222
223 }