1 /*******************************************************************************
2 * Copyright 2016-2017 ZTE, Inc. and others.
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
7 * http://www.apache.org/licenses/LICENSE-2.0
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
13 ******************************************************************************/
14 package org.onap.msb.apiroute.wrapper;
16 import java.lang.reflect.InvocationHandler;
17 import java.lang.reflect.Method;
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;
42 import com.fasterxml.jackson.core.type.TypeReference;
43 import com.fiftyonred.mock_jedis.MockJedisPool;
45 import io.dropwizard.jetty.HttpConnectorFactory;
46 import io.dropwizard.server.SimpleServerFactory;
47 import redis.clients.jedis.JedisPool;
48 import redis.clients.jedis.JedisPoolConfig;
50 @RunWith(PowerMockRunner.class)
51 @PrepareForTest({JedisUtil.class, RedisAccessWrapper.class, ConfigUtil.class, Http.class,
52 InitRouteServiceWrapper.class})
53 @PowerMockIgnore({"javax.management.*", "javax.net.ssl.*", "jdk.internal.reflect.*"})
54 public class InitRouteServiceWrapperTest {
55 private static InitRouteServiceWrapper initRouteServiceWrapper;
56 private static Consul consul;
58 @SuppressWarnings("unchecked")
60 public static void setUpBeforeClass() throws Exception {
61 initRouteServiceWrapper = InitRouteServiceWrapper.getInstance();
63 Http http = PowerMockito.mock(Http.class);
65 PowerMockito.doNothing().when(http).asyncGet(Mockito.anyString(), Mockito.any(TypeReference.class),
66 Mockito.any(ConsulResponseCallback.class));
68 PowerMockito.doNothing().when(http).asyncGetDelayHandle(Mockito.anyString(), Mockito.any(TypeReference.class),
69 Mockito.any(ConsulResponseCallback.class));
71 PowerMockito.spy(Http.class);
72 PowerMockito.when(Http.getInstance()).thenReturn(http);
74 consul = Consul.builder().withHostAndPort("127.0.0.1", 8500).build();
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());
84 PowerMockito.replace(PowerMockito.method(RedisAccessWrapper.class, "filterKeys")).with(new InvocationHandler() {
86 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
87 return mockJedisPool.getResource().keys((String) args[0]);
93 public void test_startCheckRedisConnect() {
95 boolean ifRedisConnect = initRouteServiceWrapper.startCheckRedisConnect();
96 Assert.assertEquals(true, ifRedisConnect);
98 } catch (Exception e) {
99 Assert.fail("throw exception means error occured!" + e.getMessage());
105 public void test_runConsulClientApp() {
107 DiscoverInfo discoverInfo = new DiscoverInfo();
108 discoverInfo.setEnabled(true);
109 discoverInfo.setIp("127.0.0.1");
110 discoverInfo.setPort(10081);
112 ApiRouteAppConfig configuration = new ApiRouteAppConfig();
113 configuration.setDiscoverInfo(discoverInfo);
115 PowerMockito.mockStatic(System.class);
116 PowerMockito.when(System.getenv("SDCLIENT_IP")).thenReturn("127.0.0.1");
117 ConfigUtil.getInstance().initDiscoverInfo(configuration);
120 initRouteServiceWrapper.runConsulClientApp();
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");
130 RouteServer[] servers = new RouteServer[1];
131 servers[0] = new RouteServer(discoverInfo.getIp(), String.valueOf(discoverInfo.getPort()));
132 discoverApiService.setServers(servers);
134 ApiRouteInfo db_discoverApiService = ApiRouteServiceWrapper.getInstance().getApiRouteInstance("msdiscover",
135 "v1", "msb", "", "ip");
136 Assert.assertEquals(discoverApiService, db_discoverApiService);
138 IuiRouteInfo discoverIUIService = new IuiRouteInfo();
139 discoverIUIService.setServiceName("msdiscover");
140 discoverIUIService.setUrl("/iui/microservices");
141 discoverIUIService.setHost("msb");
142 discoverIUIService.setServers(servers);
144 Assert.assertEquals(discoverIUIService,
145 IuiRouteServiceWrapper.getInstance().getIuiRouteInstance("msdiscover", "msb", "", "ip"));
147 } catch (Exception e) {
148 assert false : "throw exception means error occured!" + e.getMessage();
153 public void test_initRouteInfoFromJson() {
156 PowerMockito.mockStatic(System.class);
157 PowerMockito.when(System.getenv("dwApp_server_connector_port")).thenReturn("8068");
158 initRouteServiceWrapper.initRouteInfoFromJson();
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");
170 RouteServer[] servers = new RouteServer[1];
171 servers[0] = new RouteServer("127.0.0.1", "8068");
172 apiroute.setServers(servers);
174 ApiRouteInfo db_apiService = ApiRouteServiceWrapper.getInstance().getApiRouteInstance("microservices", "v1",
176 Assert.assertEquals(apiroute, db_apiService);
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);
186 Assert.assertEquals(iuiRoute,
187 IuiRouteServiceWrapper.getInstance().getIuiRouteInstance("microservices", "msb", "", "ip"));
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);
199 Assert.assertEquals(customRoute,
200 CustomRouteServiceWrapper.getInstance().getCustomRouteInstance("/custom", "msb", "", "ip"));
202 } catch (Exception e) {
203 Assert.fail("throw exception means error occured!" + e.getMessage());
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");
216 configuration.setServerFactory(simpleServerFactory);
218 initRouteServiceWrapper.initMetricsConfig(configuration);
220 Assert.assertEquals("http://127.0.0.1:8888/admin/metrics", ConfigUtil.getInstance().getMetricsUrl());