Add license header for java files
[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");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at 
7  * 
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  * 
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;
17
18 import io.dropwizard.jetty.HttpConnectorFactory;
19 import io.dropwizard.server.SimpleServerFactory;
20
21 import java.lang.reflect.InvocationHandler;
22 import java.lang.reflect.Method;
23
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;
52
53 import redis.clients.jedis.JedisPool;
54 import redis.clients.jedis.JedisPoolConfig;
55
56 import com.fasterxml.jackson.core.type.TypeReference;
57 import com.fiftyonred.mock_jedis.MockJedisPool;
58
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;
66
67         @SuppressWarnings("unchecked")
68         @BeforeClass
69         public static void setUpBeforeClass() throws Exception {
70                 initRouteServiceWrapper = InitRouteServiceWrapper.getInstance();
71
72                 Http http = PowerMockito.mock(Http.class);
73
74                 PowerMockito
75                                 .doNothing()
76                                 .when(http)
77                                 .asyncGet(Mockito.anyString(),
78                                                 Mockito.any(TypeReference.class),
79                                                 Mockito.any(ConsulResponseCallback.class));
80
81                 PowerMockito
82                                 .doNothing()
83                                 .when(http)
84                                 .asyncGetDelayHandle(Mockito.anyString(),
85                                                 Mockito.any(TypeReference.class),
86                                                 Mockito.any(ConsulResponseCallback.class));
87
88                 PowerMockito.spy(Http.class);
89                 PowerMockito.when(Http.getInstance()).thenReturn(http);
90
91                 consul = Consul.builder().withHostAndPort("127.0.0.1", 8500).build();
92         }
93
94         @Before
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());
102
103                 PowerMockito.replace(
104                                 PowerMockito.method(RedisAccessWrapper.class, "filterKeys"))
105                                 .with(new InvocationHandler() {
106                                         @Override
107                                         public Object invoke(Object proxy, Method method,
108                                                         Object[] args) throws Throwable {
109                                                 return mockJedisPool.getResource().keys(
110                                                                 (String) args[0]);
111                                         }
112                                 });
113         }
114
115         @Test
116         public void test_startCheckRedisConnect() {
117                 try {
118                         boolean ifRedisConnect = initRouteServiceWrapper
119                                         .startCheckRedisConnect();
120                         Assert.assertEquals(true, ifRedisConnect);
121
122                 } catch (Exception e) {
123                         Assert.fail("throw exception means error occured!" + e.getMessage());
124
125                 }
126         }
127
128         @Test
129         public void test_runConsulClientApp() {
130
131                 DiscoverInfo discoverInfo = new DiscoverInfo();
132                 discoverInfo.setEnabled(true);
133                 discoverInfo.setIp("127.0.0.1");
134                 discoverInfo.setPort(10081);
135
136                 ApiRouteAppConfig configuration = new ApiRouteAppConfig();
137                 configuration.setDiscoverInfo(discoverInfo);
138
139                 PowerMockito.mockStatic(System.class);
140                 PowerMockito.when(System.getenv("SDCLIENT_IP")).thenReturn("127.0.0.1");
141                 ConfigUtil.getInstance().initDiscoverInfo(configuration);
142
143                 try {
144                         initRouteServiceWrapper.runConsulClientApp();
145
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");
153
154                         RouteServer[] servers = new RouteServer[1];
155                         servers[0] = new RouteServer(discoverInfo.getIp(),
156                                         String.valueOf(discoverInfo.getPort()));
157                         discoverApiService.setServers(servers);
158
159                         ApiRouteInfo db_discoverApiService = ApiRouteServiceWrapper
160                                         .getInstance().getApiRouteInstance("msdiscover", "v1",
161                                                         "msb", "", "ip");
162                         Assert.assertEquals(discoverApiService, db_discoverApiService);
163
164                         IuiRouteInfo discoverIUIService = new IuiRouteInfo();
165                         discoverIUIService.setServiceName("msdiscover");
166                         discoverIUIService.setUrl("/iui/microservices");
167                         discoverIUIService.setHost("msb");
168                         discoverIUIService.setServers(servers);
169
170                         Assert.assertEquals(
171                                         discoverIUIService,
172                                         IuiRouteServiceWrapper.getInstance().getIuiRouteInstance(
173                                                         "msdiscover", "msb", "", "ip"));
174
175                 } catch (Exception e) {
176                         assert false : "throw exception means error occured!"
177                                         + e.getMessage();
178                 }
179         }
180
181         @Test
182         public void test_initRouteInfoFromJson() {
183                 try {
184
185                         PowerMockito.mockStatic(System.class);
186                         PowerMockito.when(System.getenv("dwApp_server_connector_port"))
187                                         .thenReturn("8068");
188                         initRouteServiceWrapper.initRouteInfoFromJson();
189
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");
199
200                         RouteServer[] servers = new RouteServer[1];
201                         servers[0] = new RouteServer("127.0.0.1", "8068");
202                         apiroute.setServers(servers);
203
204                         ApiRouteInfo db_apiService = ApiRouteServiceWrapper
205                                         .getInstance()
206                                         .getApiRouteInstance("microservices", "v1", "msb", "", "ip");
207                         Assert.assertEquals(apiroute, db_apiService);
208
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);
216
217                         Assert.assertEquals(iuiRoute, IuiRouteServiceWrapper.getInstance()
218                                         .getIuiRouteInstance("microservices", "msb", "", "ip"));
219
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);
229
230                         Assert.assertEquals(customRoute,
231                                         CustomRouteServiceWrapper.getInstance()
232                                                         .getCustomRouteInstance("/custom", "msb", "", "ip"));
233
234                 } catch (Exception e) {
235                         Assert.fail("throw exception means error occured!" + e.getMessage());
236                 }
237         }
238
239         @Test
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");
247
248                 configuration.setServerFactory(simpleServerFactory);
249
250                 initRouteServiceWrapper.initMetricsConfig(configuration);
251
252                 Assert.assertEquals("http://127.0.0.1:8888/admin/metrics", ConfigUtil
253                                 .getInstance().getMetricsUrl());
254         }
255
256 }