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