1 /*******************************************************************************
2 * Copyright 2016-2017 ZTE, Inc. and others.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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;
18 import io.dropwizard.jetty.HttpConnectorFactory;
19 import io.dropwizard.server.SimpleServerFactory;
21 import java.lang.reflect.InvocationHandler;
22 import java.lang.reflect.Method;
24 import org.junit.Assert;
25 import org.junit.Before;
26 import org.junit.BeforeClass;
27 import org.junit.Test;
28 import org.junit.runner.RunWith;
29 import org.mockito.Mockito;
30 import org.mockito.invocation.InvocationOnMock;
31 import org.mockito.stubbing.Answer;
32 import org.onap.msb.apiroute.ApiRouteAppConfig;
33 import org.onap.msb.apiroute.api.ApiRouteInfo;
34 import org.onap.msb.apiroute.api.CustomRouteInfo;
35 import org.onap.msb.apiroute.api.DiscoverInfo;
36 import org.onap.msb.apiroute.api.IuiRouteInfo;
37 import org.onap.msb.apiroute.api.RouteServer;
38 import org.onap.msb.apiroute.wrapper.ApiRouteServiceWrapper;
39 import org.onap.msb.apiroute.wrapper.CustomRouteServiceWrapper;
40 import org.onap.msb.apiroute.wrapper.InitRouteServiceWrapper;
41 import org.onap.msb.apiroute.wrapper.IuiRouteServiceWrapper;
42 import org.onap.msb.apiroute.wrapper.consulextend.Consul;
43 import org.onap.msb.apiroute.wrapper.consulextend.async.ConsulResponseCallback;
44 import org.onap.msb.apiroute.wrapper.consulextend.util.Http;
45 import org.onap.msb.apiroute.wrapper.dao.RedisAccessWrapper;
46 import org.onap.msb.apiroute.wrapper.util.ConfigUtil;
47 import org.onap.msb.apiroute.wrapper.util.JedisUtil;
48 import org.powermock.api.mockito.PowerMockito;
49 import org.powermock.core.classloader.annotations.PowerMockIgnore;
50 import org.powermock.core.classloader.annotations.PrepareForTest;
51 import org.powermock.modules.junit4.PowerMockRunner;
53 import redis.clients.jedis.JedisPool;
54 import redis.clients.jedis.JedisPoolConfig;
56 import com.fasterxml.jackson.core.type.TypeReference;
57 import com.fiftyonred.mock_jedis.MockJedisPool;
59 @RunWith(PowerMockRunner.class)
60 @PrepareForTest({ JedisUtil.class, RedisAccessWrapper.class, ConfigUtil.class,
61 Http.class, InitRouteServiceWrapper.class })
62 @PowerMockIgnore({ "javax.management.*", "javax.net.ssl.*" })
63 public class InitRouteServiceWrapperTest {
64 private static InitRouteServiceWrapper initRouteServiceWrapper;
65 private static Consul consul;
67 @SuppressWarnings("unchecked")
69 public static void setUpBeforeClass() throws Exception {
70 initRouteServiceWrapper = InitRouteServiceWrapper.getInstance();
72 Http http = PowerMockito.mock(Http.class);
77 .asyncGet(Mockito.anyString(),
78 Mockito.any(TypeReference.class),
79 Mockito.any(ConsulResponseCallback.class));
84 .asyncGetDelayHandle(Mockito.anyString(),
85 Mockito.any(TypeReference.class),
86 Mockito.any(ConsulResponseCallback.class));
88 PowerMockito.spy(Http.class);
89 PowerMockito.when(Http.getInstance()).thenReturn(http);
91 consul = Consul.builder().withHostAndPort("127.0.0.1", 8500).build();
95 public void initReidsMock() throws Exception {
96 final JedisPool mockJedisPool = new MockJedisPool(
97 new JedisPoolConfig(), "localhost");
98 PowerMockito.mockStatic(JedisUtil.class);
99 JedisUtil jedisUtil = PowerMockito.mock(JedisUtil.class);
100 PowerMockito.when(jedisUtil.borrowJedisInstance()).thenReturn(
101 mockJedisPool.getResource());
103 PowerMockito.replace(
104 PowerMockito.method(RedisAccessWrapper.class, "filterKeys"))
105 .with(new InvocationHandler() {
107 public Object invoke(Object proxy, Method method,
108 Object[] args) throws Throwable {
109 return mockJedisPool.getResource().keys(
116 public void test_startCheckRedisConnect() {
118 boolean ifRedisConnect = initRouteServiceWrapper
119 .startCheckRedisConnect();
120 Assert.assertEquals(true, ifRedisConnect);
122 } catch (Exception e) {
123 Assert.fail("throw exception means error occured!" + e.getMessage());
129 public void test_runConsulClientApp() {
131 DiscoverInfo discoverInfo = new DiscoverInfo();
132 discoverInfo.setEnabled(true);
133 discoverInfo.setIp("127.0.0.1");
134 discoverInfo.setPort(10081);
136 ApiRouteAppConfig configuration = new ApiRouteAppConfig();
137 configuration.setDiscoverInfo(discoverInfo);
139 PowerMockito.mockStatic(System.class);
140 PowerMockito.when(System.getenv("SDCLIENT_IP")).thenReturn("127.0.0.1");
141 ConfigUtil.getInstance().initDiscoverInfo(configuration);
144 initRouteServiceWrapper.runConsulClientApp();
146 ApiRouteInfo discoverApiService = new ApiRouteInfo();
147 discoverApiService.setServiceName("msdiscover");
148 discoverApiService.setUrl("/api/microservices/v1");
149 discoverApiService.setVersion("v1");
150 discoverApiService.setMetricsUrl("/admin/metrics");
151 discoverApiService.setApiJson("/api/microservices/v1/swagger.json");
152 discoverApiService.setHost("msb");
154 RouteServer[] servers = new RouteServer[1];
155 servers[0] = new RouteServer(discoverInfo.getIp(),
156 String.valueOf(discoverInfo.getPort()));
157 discoverApiService.setServers(servers);
159 ApiRouteInfo db_discoverApiService = ApiRouteServiceWrapper
160 .getInstance().getApiRouteInstance("msdiscover", "v1",
162 Assert.assertEquals(discoverApiService, db_discoverApiService);
164 IuiRouteInfo discoverIUIService = new IuiRouteInfo();
165 discoverIUIService.setServiceName("msdiscover");
166 discoverIUIService.setUrl("/iui/microservices");
167 discoverIUIService.setHost("msb");
168 discoverIUIService.setServers(servers);
172 IuiRouteServiceWrapper.getInstance().getIuiRouteInstance(
173 "msdiscover", "msb", "", "ip"));
175 } catch (Exception e) {
176 assert false : "throw exception means error occured!"
182 public void test_initRouteInfoFromJson() {
185 PowerMockito.mockStatic(System.class);
186 PowerMockito.when(System.getenv("dwApp_server_connector_port"))
188 initRouteServiceWrapper.initRouteInfoFromJson();
190 ApiRouteInfo apiroute = new ApiRouteInfo();
191 apiroute.setServiceName("microservices");
192 apiroute.setUrl("/api/microservices/v1");
193 apiroute.setVersion("v1");
194 apiroute.setMetricsUrl("/admin/metrics");
195 apiroute.setApiJson("/api/microservices/v1/swagger.json");
196 apiroute.setHost("msb");
197 apiroute.setControl("1");
198 apiroute.setStatus("1");
200 RouteServer[] servers = new RouteServer[1];
201 servers[0] = new RouteServer("127.0.0.1", "8068");
202 apiroute.setServers(servers);
204 ApiRouteInfo db_apiService = ApiRouteServiceWrapper
206 .getApiRouteInstance("microservices", "v1", "msb", "", "ip");
207 Assert.assertEquals(apiroute, db_apiService);
209 IuiRouteInfo iuiRoute = new IuiRouteInfo();
210 iuiRoute.setServiceName("microservices");
211 iuiRoute.setUrl("/iui/microservices");
212 iuiRoute.setHost("msb");
213 iuiRoute.setControl("1");
214 iuiRoute.setStatus("1");
215 iuiRoute.setServers(servers);
217 Assert.assertEquals(iuiRoute, IuiRouteServiceWrapper.getInstance()
218 .getIuiRouteInstance("microservices", "msb", "", "ip"));
220 CustomRouteInfo customRoute = new CustomRouteInfo();
221 customRoute.setServiceName("/custom");
222 customRoute.setUrl("/custom");
223 customRoute.setHost("msb");
224 customRoute.setControl("1");
225 customRoute.setStatus("1");
226 RouteServer[] servers2 = new RouteServer[1];
227 servers2[0] = new RouteServer("127.0.0.1", "8066");
228 customRoute.setServers(servers2);
230 Assert.assertEquals(customRoute,
231 CustomRouteServiceWrapper.getInstance()
232 .getCustomRouteInstance("/custom", "msb", "", "ip"));
234 } catch (Exception e) {
235 Assert.fail("throw exception means error occured!" + e.getMessage());
240 public void test_initMetricsConfig() {
241 ApiRouteAppConfig configuration = new ApiRouteAppConfig();
242 SimpleServerFactory simpleServerFactory = new SimpleServerFactory();
243 HttpConnectorFactory httpConnectorFactory = new HttpConnectorFactory();
244 httpConnectorFactory.setPort(8888);
245 simpleServerFactory.setConnector(httpConnectorFactory);
246 simpleServerFactory.setAdminContextPath("/admin");
248 configuration.setServerFactory(simpleServerFactory);
250 initRouteServiceWrapper.initMetricsConfig(configuration);
252 Assert.assertEquals("http://127.0.0.1:8888/admin/metrics", ConfigUtil
253 .getInstance().getMetricsUrl());