712cdb2ce6f81d9d60ea4d510d6fc2188729fd6a
[so.git] / status-control / src / test / java / org / openecomp / mso / HealthCheckUtilsTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * OPENECOMP - MSO
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.mso;
22
23
24 import org.openecomp.mso.logger.MsoLogger;
25 import org.openecomp.mso.properties.MsoJavaProperties;
26 import org.openecomp.mso.requestsdb.RequestsDatabase;
27 import org.apache.http.HttpStatus;
28 import org.apache.http.HttpVersion;
29 import org.apache.http.client.methods.CloseableHttpResponse;
30 import org.apache.http.client.methods.HttpGet;
31 import org.apache.http.client.methods.HttpUriRequest;
32 import org.apache.http.impl.client.CloseableHttpClient;
33 import org.apache.http.message.BasicStatusLine;
34 import org.junit.BeforeClass;
35 import org.junit.Test;
36 import org.mockito.Mockito;
37
38 import java.lang.reflect.InvocationTargetException;
39 import java.lang.reflect.Method;
40
41 import static org.junit.Assert.assertFalse;
42 import static org.junit.Assert.assertTrue;
43 import static org.mockito.Matchers.any;
44
45 /**
46  */
47 public class HealthCheckUtilsTest {
48
49     private static HealthCheckUtils utils;
50     private static String port = "8080";
51     private static String ip1 = "localhost";
52     private static String ip2 = "192.3.2.1";
53     private static String iptest = "test/";
54     private static String apihUrl1 = "/api/healthcheck";
55     private static String apihUrl2 = "/api/healthcheck2";
56     private static String bpmnUrl1 = "/bpmn/healthcheck";
57     private static String raUrl1 = "/tenants/healthcheck";
58     private static String raUrl2 = "/vnf/healthcheck";
59     private static String raUrl3 = "/sdnc/healthcheck";
60     private static MsoJavaProperties properties;
61     private static String sslEnable = "false";
62     private static CloseableHttpClient client;
63     private static CloseableHttpResponse nokRes, okRes;
64
65     @BeforeClass
66     public static final void prepareMockvalues() {
67         utils = Mockito.mock(HealthCheckUtils.class);
68         client = Mockito.mock(CloseableHttpClient.class);
69         nokRes = Mockito.mock(CloseableHttpResponse.class);
70         okRes = Mockito.mock(CloseableHttpResponse.class);
71         Mockito.when(nokRes.getStatusLine()).thenReturn(new BasicStatusLine(HttpVersion.HTTP_1_1, HttpStatus.SC_SERVICE_UNAVAILABLE, "FINE!"));;
72         Mockito.when(okRes.getStatusLine()).thenReturn(new BasicStatusLine(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "FINE!"));
73
74         properties = new MsoJavaProperties();
75         properties.setProperty("server-port", port);
76         properties.setProperty("ssl-enable", sslEnable);
77         properties.setProperty("apih-load-balancer", ip1);
78         properties.setProperty("apih-healthcheck-urn",apihUrl1 + "," + apihUrl2);
79         properties.setProperty("camunda-load-balancer",ip1);
80         properties.setProperty("camunda-healthcheck-urn",bpmnUrl1);
81         properties.setProperty("jra-load-balancer",ip1);
82         properties.setProperty("jra-healthcheck-urn",raUrl1 + "," + raUrl2 + "," + raUrl3);
83         properties.setProperty("apih-nodehealthcheck-urn", apihUrl1);
84         properties.setProperty("camunda-nodehealthcheck-urn", bpmnUrl1);
85         properties.setProperty("jra-nodehealthcheck-urn", raUrl1);
86
87         Mockito.when(utils.loadTopologyProperties()).thenReturn(properties);
88         Mockito.when(utils.verifyNodeHealthCheck(HealthCheckUtils.NodeType.APIH, null)).thenCallRealMethod();
89         Mockito.when(utils.verifyNodeHealthCheck(HealthCheckUtils.NodeType.RA, null)).thenCallRealMethod();
90         Mockito.when(utils.verifyGlobalHealthCheck(true, null)).thenCallRealMethod();
91         Mockito.when(utils.verifyGlobalHealthCheck(false, null)).thenCallRealMethod();
92
93         Mockito.when(utils.getFinalUrl (ip1, port, raUrl1, sslEnable)).thenCallRealMethod();
94         Mockito.when(utils.getFinalUrl (ip1, port, raUrl1, null)).thenCallRealMethod();
95         Mockito.when(utils.getFinalUrl (ip1, port, raUrl1, "true")).thenCallRealMethod();
96         Mockito.when(utils.getFinalUrl (ip1, port, raUrl1, "otherValue")).thenCallRealMethod();
97         Mockito.when(utils.getFinalUrl (ip1, port, raUrl1, "True")).thenCallRealMethod();
98         Mockito.when(utils.getFinalUrl (ip1, port, raUrl1, "TRUE")).thenCallRealMethod();
99         Mockito.when(utils.getFinalUrl (ip1, null, raUrl1, null)).thenCallRealMethod();
100         Mockito.when(utils.getFinalUrl (iptest, null, raUrl1, null)).thenCallRealMethod();
101
102         System.setProperty("jboss.qualified.host.name", ip1);
103     }
104
105     @Test
106     public final void testVerifyNodeHealthCheck () {
107         Mockito.when (utils.verifyLocalHealth(ip1, port, apihUrl1, sslEnable, null)).thenReturn(true);
108         Mockito.when (utils.verifyLocalHealth(ip1, port, apihUrl2, sslEnable, null)).thenReturn(true);
109         Mockito.when (utils.verifyLocalHealth(ip2, port, apihUrl2, sslEnable, null)).thenReturn(true);
110         Mockito.when (utils.verifyLocalHealth(ip2, port, apihUrl1, sslEnable, null)).thenReturn(false);
111         Mockito.when (utils.verifyLocalHealth(ip1, port, raUrl1, sslEnable, null)).thenReturn(true);
112         Mockito.when (utils.verifyLocalHealth(ip1, port, raUrl2, sslEnable, null)).thenReturn(false);
113         Mockito.when (utils.verifyLocalHealth(ip1, port, raUrl3, sslEnable, null)).thenReturn(true);
114
115         assertTrue (utils.verifyNodeHealthCheck (HealthCheckUtils.NodeType.APIH, null));
116         assertFalse (utils.verifyNodeHealthCheck (HealthCheckUtils.NodeType.RA, null));
117
118         Mockito.when (utils.verifyLocalHealth(ip1, port, apihUrl1, sslEnable, null)).thenReturn(false);
119         Mockito.when (utils.verifyLocalHealth(ip1, port, raUrl2, sslEnable, null)).thenReturn(true);
120         assertFalse (utils.verifyNodeHealthCheck (HealthCheckUtils.NodeType.APIH, null));
121         assertTrue (utils.verifyNodeHealthCheck (HealthCheckUtils.NodeType.RA, null));
122
123         Mockito.when (utils.verifyLocalHealth(ip2, port, apihUrl1, sslEnable, null)).thenReturn(true);
124         assertFalse (utils.verifyNodeHealthCheck (HealthCheckUtils.NodeType.APIH, null));
125         assertTrue (utils.verifyNodeHealthCheck (HealthCheckUtils.NodeType.RA, null));
126
127     }
128
129     @Test
130     public final void testVerifyGlobalHealthCheckBPMN () {
131
132         // healthcheck of bpmn returns false
133         Mockito.when(utils.verifyLocalHealth(ip1, null, bpmnUrl1, null, null)).thenReturn(false);
134         Mockito.when(utils.verifyLocalHealth(ip1, null, apihUrl1, null, null)).thenReturn(true);
135         Mockito.when(utils.verifyLocalHealth(ip1, null, raUrl1, null, null)).thenReturn(true);
136
137         // verify BPMN healthcheck
138         assertFalse(utils.verifyGlobalHealthCheck (true, null));
139
140         // do not verify BPMN healthcheck
141         assertTrue(utils.verifyGlobalHealthCheck (false, null));
142
143         Mockito.when(utils.verifyLocalHealth(ip1, null, bpmnUrl1, null, null)).thenReturn(true);
144         assertTrue(utils.verifyGlobalHealthCheck (true, null));
145     }
146
147     @Test
148     public final void testVerifyGlobalHealthCheckAPIH () {
149
150         Mockito.when(utils.verifyLocalHealth(ip1, null, apihUrl1, null, null)).thenReturn(true);
151         Mockito.when(utils.verifyLocalHealth(ip1, null, raUrl1, null, null)).thenReturn(true);
152         Mockito.when(utils.verifyLocalHealth(ip1, null, bpmnUrl1, null, null)).thenReturn(true);
153         assertTrue(utils.verifyGlobalHealthCheck (true, null));
154
155         Mockito.when(utils.verifyLocalHealth(ip1, null, apihUrl1, null, null)).thenReturn(false);
156         assertFalse(utils.verifyGlobalHealthCheck (true, null));
157     }
158
159     @Test
160     public final void testVerifyGlobalHealthCheckRA () {
161         // all health check apis returns true
162         Mockito.when(utils.verifyLocalHealth(ip1, null, apihUrl1, null, null)).thenReturn(true);
163         Mockito.when(utils.verifyLocalHealth(ip1, null, raUrl1, null, null)).thenReturn(true);
164         Mockito.when(utils.verifyLocalHealth(ip1, null, bpmnUrl1, null, null)).thenReturn(true);
165         assertTrue(utils.verifyGlobalHealthCheck (true, null));
166
167
168         // 3rd ra api return false; others return true
169         Mockito.when(utils.verifyLocalHealth(ip1, null, raUrl1, null, null)).thenReturn(false);
170         assertFalse(utils.verifyGlobalHealthCheck (true, null));
171     }
172
173     @Test
174     public final void testGetFinalUrl () {
175         String finalUrl1 = utils.getFinalUrl (ip1, port, raUrl1, sslEnable);
176         assertTrue (finalUrl1.equals ("http://" + ip1 + ":" + port + raUrl1));
177
178         String finalUrl2 = utils.getFinalUrl (ip1, port, raUrl1, "true");
179         assertTrue (finalUrl2.equals ("https://" + ip1 + ":" + port + raUrl1));
180
181         String finalUrl3 = utils.getFinalUrl (ip1, port, raUrl1, null);
182         assertTrue (finalUrl3.equals ("http://" + ip1 + ":" + port + raUrl1));
183
184         String finalUrl4 = utils.getFinalUrl (ip1, port, raUrl1, "otherValue");
185         assertTrue (finalUrl4.equals ("http://" + ip1 + ":" + port + raUrl1));
186
187         String finalUrl5 = utils.getFinalUrl (ip1, port, raUrl1, "True");
188         assertTrue (finalUrl5.equals ("https://" + ip1 + ":" + port + raUrl1));
189
190         String finalUrl6 = utils.getFinalUrl (ip1, port, raUrl1, "TRUE");
191         assertTrue (finalUrl6.equals ("https://" + ip1 + ":" + port + raUrl1));
192
193         String finalUrl7 = utils.getFinalUrl (ip1, null, raUrl1, null);
194         assertTrue (finalUrl7.equals (ip1 + raUrl1));
195
196         String finalUrl8 = utils.getFinalUrl (iptest, null, raUrl1, null);
197         assertTrue (finalUrl8.equals ("test" + raUrl1));
198     }
199
200     @Test
201     public final void testVerifyLocalHealth() {
202         HealthCheckUtils tempUtil = Mockito.mock(HealthCheckUtils.class);
203
204         Mockito.when(tempUtil.verifyLocalHealth(ip1, port, apihUrl1, sslEnable, null)).thenCallRealMethod ();
205         Mockito.when(tempUtil.getFinalUrl (ip1, port, apihUrl1, sslEnable)).thenCallRealMethod ();
206         Mockito.when(tempUtil.getHttpClient()).thenReturn (client);
207
208         try {
209             Mockito.when (client.execute (any(HttpUriRequest.class))).thenReturn (okRes);
210             Boolean res1 = (Boolean)invokeProtectedMethod(tempUtil, "verifyLocalHealth", ip1, port, apihUrl1, sslEnable, null);
211             assertTrue(res1);
212
213             Mockito.when (client.execute (any(HttpUriRequest.class))).thenReturn (nokRes);
214             Boolean res2 = (Boolean)invokeProtectedMethod(tempUtil, "verifyLocalHealth", ip1, port, apihUrl1, sslEnable, null);
215             assertFalse(res2);
216
217         } catch (Exception e) {
218             e.printStackTrace ();
219         }
220
221     }
222
223
224     @Test
225     public final void NullityCheck () {
226         Mockito.when(utils.verifyLocalHealth(ip1, null, bpmnUrl1, null, null)).thenReturn(true);
227         Mockito.when(utils.verifyLocalHealth(ip1, null, apihUrl1, null, null)).thenReturn(true);
228         Mockito.when(utils.verifyLocalHealth(ip1, null, raUrl1, null, null)).thenReturn(true);
229
230         assertTrue (utils.verifyGlobalHealthCheck (true, null));
231
232         // mising server-port parameter
233         MsoJavaProperties newProperties1 = new MsoJavaProperties();
234         Mockito.when(utils.loadTopologyProperties()).thenReturn(newProperties1);
235
236         newProperties1.setProperty("apih-load-balancer", ip1);
237         newProperties1.setProperty("apih-nodehealthcheck-urn",apihUrl1);
238         newProperties1.setProperty("camunda-load-balancer",ip1);
239         newProperties1.setProperty("camunda-nodehealthcheck-urn",bpmnUrl1);
240         newProperties1.setProperty("jra-load-balancer",ip1);
241         newProperties1.setProperty("jra-nodehealthcheck-urn",raUrl1);
242
243         assertFalse (utils.verifyGlobalHealthCheck (true, null));
244
245         // mising apih-server-list parameter
246         MsoJavaProperties newProperties2 = new MsoJavaProperties();
247         Mockito.when(utils.loadTopologyProperties()).thenReturn(newProperties2);
248
249         newProperties2.setProperty("server-port", port);
250         newProperties1.setProperty("apih-nodehealthcheck-urn",apihUrl1);
251         newProperties1.setProperty("camunda-load-balancer",ip1);
252         newProperties1.setProperty("camunda-nodehealthcheck-urn",bpmnUrl1);
253         newProperties1.setProperty("jra-load-balancer",ip1);
254         newProperties1.setProperty("jra-nodehealthcheck-urn",raUrl1);
255
256         assertFalse (utils.verifyGlobalHealthCheck (true, null));
257
258         // mising jra-healthcheck-urn parameter
259         MsoJavaProperties newProperties3 = new MsoJavaProperties();
260         Mockito.when(utils.loadTopologyProperties()).thenReturn(newProperties3);
261
262         newProperties3.setProperty("server-port", port);
263         newProperties1.setProperty("apih-load-balancer", ip1);
264         newProperties1.setProperty("apih-nodehealthcheck-urn",apihUrl1);
265         newProperties1.setProperty("camunda-load-balancer",ip1);
266         newProperties1.setProperty("camunda-nodehealthcheck-urn",bpmnUrl1);
267         newProperties1.setProperty("jra-load-balancer",ip1);
268         newProperties3.setProperty("jra-server-list",ip1);
269
270         assertFalse (utils.verifyGlobalHealthCheck (true, null));
271
272         Mockito.when(utils.loadTopologyProperties()).thenReturn(properties);
273     }
274
275     // User reflection to invoke to avoid change the publicity of the method
276     private static Object invokeProtectedMethod (HealthCheckUtils tempUtil, String methodName, String arg1, String arg2, String arg3, String arg4, String arg5) {
277         Method method;
278         try {
279             method = HealthCheckUtils.class.getDeclaredMethod(methodName, String.class, String.class, String.class, String.class, String.class);
280             method.setAccessible(true);
281             return  method.invoke(tempUtil, arg1, arg2, arg3, arg4, arg5);
282         } catch (NoSuchMethodException e) {
283             // TODO Auto-generated catch block
284             e.printStackTrace();
285         } catch (SecurityException e) {
286             // TODO Auto-generated catch block
287             e.printStackTrace();
288         } catch (IllegalAccessException e) {
289             // TODO Auto-generated catch block
290             e.printStackTrace();
291         } catch (IllegalArgumentException e) {
292             // TODO Auto-generated catch block
293             e.printStackTrace();
294         } catch (InvocationTargetException e) {
295             // TODO Auto-generated catch block
296             e.printStackTrace();
297         }
298         return null;
299     }
300 }