Update the logic for MSB addr retrieving
[holmes/common.git] / holmes-actions / src / test / java / org / onap / holmes / common / config / MicroServiceConfigTest.java
1 /**\r
2  * Copyright 2017 ZTE Corporation.\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  *     http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 package org.onap.holmes.common.config;\r
18 \r
19 import static org.hamcrest.core.Is.is;\r
20 import static org.hamcrest.core.IsEqual.equalTo;\r
21 import static org.hamcrest.core.IsNull.nullValue;\r
22 import static org.junit.Assert.assertThat;\r
23 import static org.junit.Assert.assertTrue;\r
24 import static org.onap.holmes.common.config.MicroServiceConfig.*;\r
25 \r
26 import org.easymock.EasyMock;\r
27 import org.junit.Rule;\r
28 import org.junit.Test;\r
29 import org.powermock.api.easymock.PowerMock;\r
30 import org.powermock.core.classloader.annotations.PowerMockIgnore;\r
31 import org.powermock.core.classloader.annotations.PrepareForTest;\r
32 import org.powermock.modules.junit4.rule.PowerMockRule;\r
33 \r
34 @PrepareForTest(MicroServiceConfig.class)\r
35 @PowerMockIgnore({"javax.ws.*"})\r
36 public class MicroServiceConfigTest {\r
37 \r
38     @Rule\r
39     public PowerMockRule powerMockRule = new PowerMockRule();\r
40 \r
41     @Test\r
42     public void getMsbServerAddrTest() {\r
43         System.setProperty(MSB_ADDR, "test:80");\r
44         System.setProperty(HOSTNAME, "rule-mgmt");\r
45         PowerMock.mockStaticPartial(MicroServiceConfig.class, "getServiceAddrInfoFromCBS", String.class);\r
46         EasyMock.expect(MicroServiceConfig.getServiceAddrInfoFromCBS(System.getProperty(HOSTNAME)))\r
47                 .andReturn("{\"msb.hostname\": \"test:80\"}");\r
48         PowerMock.replayAll();\r
49         assertThat("http://test:80", equalTo(getMsbServerAddr()));\r
50         PowerMock.verifyAll();\r
51         System.clearProperty(MicroServiceConfig.HOSTNAME);\r
52         System.clearProperty(MicroServiceConfig.MSB_ADDR);\r
53     }\r
54 \r
55     @Test\r
56     public void getMsbServerIpTest() {\r
57         System.setProperty(MSB_ADDR, "10.54.23.79:80");\r
58         System.setProperty(HOSTNAME, "rule-mgmt");\r
59         PowerMock.mockStaticPartial(MicroServiceConfig.class, "getServiceAddrInfoFromCBS", String.class);\r
60         EasyMock.expect(MicroServiceConfig.getServiceAddrInfoFromCBS(System.getProperty(HOSTNAME)))\r
61                 .andReturn("{\"msb.hostname\": \"10.54.23.79:80\"}").times(2);\r
62         PowerMock.replayAll();\r
63         assertThat("10.54.23.79", equalTo(getMsbAddrInfo()[0]));\r
64         assertThat("80", equalTo(getMsbAddrInfo()[1]));\r
65         System.clearProperty(MicroServiceConfig.HOSTNAME);\r
66         System.clearProperty(MSB_ADDR);\r
67     }\r
68 \r
69     @Test\r
70     public void getServiceIpTest() {\r
71         System.setProperty(HOSTNAME, "127.0.0.1");\r
72         assertThat("127.0.0.1", equalTo(getServiceAddrInfo()[0]));\r
73         assertThat("80", equalTo(getServiceAddrInfo()[1]));\r
74         System.clearProperty(HOSTNAME);\r
75     }\r
76 \r
77     @Test\r
78     public void getConsulAddrInfoTest() {\r
79         System.setProperty(CONSUL_HOST, "127.0.0.1");\r
80         assertThat("127.0.0.1:8500/v1/catalog/service/", equalTo(getConsulAddrInfo()));\r
81         System.clearProperty(CONSUL_HOST);\r
82     }\r
83 \r
84     @Test\r
85     public void getConfigBindingServiceAddrInfoTest_consul_not_exist() throws Exception {\r
86         PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class);\r
87         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
88                 .andThrow(new RuntimeException("Invalid URL."));\r
89 \r
90         PowerMock.replayAll();\r
91 \r
92         assertThat(getConfigBindingServiceAddrInfo(), is(nullValue()));\r
93 \r
94         PowerMock.verifyAll();\r
95     }\r
96 \r
97     @Test\r
98     public void getConfigBindingServiceAddrInfoTest_consul_exists() throws Exception {\r
99         PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class);\r
100         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
101                 .andReturn("[{\"ServiceAddress\": \"127.0.0.2\", \"ServicePort\": \"8080\"}]");\r
102         System.setProperty(CONSUL_HOST, "127.0.0.1");\r
103 \r
104         PowerMock.replayAll();\r
105 \r
106         assertThat(getConfigBindingServiceAddrInfo(), equalTo("127.0.0.2:8080"));\r
107 \r
108         PowerMock.verifyAll();\r
109 \r
110         System.clearProperty(CONSUL_HOST);\r
111     }\r
112 \r
113     @Test\r
114     public void getConfigBindingServiceAddrInfoTest_consul_exists_propertie_not_exist() throws Exception {\r
115         PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class);\r
116         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
117                 .andReturn("[{\"ServiceAddress\": \"127.0.0.2\"}]");\r
118         System.setProperty(CONSUL_HOST, "127.0.0.1");\r
119 \r
120         PowerMock.replayAll();\r
121 \r
122         assertThat(getConfigBindingServiceAddrInfo(), is(nullValue()));\r
123 \r
124         PowerMock.verifyAll();\r
125 \r
126         System.clearProperty(CONSUL_HOST);\r
127     }\r
128 \r
129     @Test\r
130     public void getServiceAddrInfoFromCBS_consul_not_exist() throws Exception {\r
131         PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class);\r
132         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
133                 .andThrow(new RuntimeException("Invalid URL.")).times(2);\r
134 \r
135         PowerMock.replayAll();\r
136 \r
137         assertThat(getServiceAddrInfoFromCBS(HOSTNAME), is(nullValue()));\r
138 \r
139         PowerMock.verifyAll();\r
140     }\r
141 \r
142     @Test\r
143     public void getServiceAddrInfoFromCBS_consul_exists_service_not_exist() throws Exception {\r
144         PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class);\r
145         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
146                 .andReturn("[{\"ServiceAddress\": \"127.0.0.2\", \"ServicePort\": \"8080\"}]");\r
147         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
148                 .andReturn("{}");\r
149 \r
150         PowerMock.replayAll();\r
151         assertThat(getServiceAddrInfoFromCBS(HOSTNAME), is(nullValue()));\r
152         PowerMock.verifyAll();\r
153     }\r
154 \r
155     @Test\r
156     public void getServiceAddrInfoFromCBS_normal() throws Exception {\r
157         System.setProperty(HOSTNAME, "rule-mgmt");\r
158         PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class);\r
159         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
160                 .andReturn("[{\"ServiceAddress\": \"127.0.0.2\", \"ServicePort\": \"8080\"}]");\r
161         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
162                 .andReturn("{\"rule-mgmt\": \"[\\\"127.0.0.3:5432\\\"]\"}");\r
163 \r
164         PowerMock.replayAll();\r
165 \r
166         assertThat(getServiceAddrInfoFromCBS("rule-mgmt"), equalTo("127.0.0.3:5432"));\r
167 \r
168         PowerMock.verifyAll();\r
169 \r
170         System.clearProperty(HOSTNAME);\r
171     }\r
172 \r
173     @Test\r
174     public void getMsbAddrInfo_msb_registered() throws Exception {\r
175         System.setProperty(MSB_ADDR, "10.74.5.8:1545");\r
176         System.setProperty(HOSTNAME, "rule-mgmt");\r
177         PowerMock.mockStaticPartial(MicroServiceConfig.class, "getServiceAddrInfoFromCBS", String.class);\r
178         EasyMock.expect(MicroServiceConfig.getServiceAddrInfoFromCBS(System.getProperty(HOSTNAME)))\r
179                 .andReturn("{\"msb.hostname\": \"127.0.0.3:5432\"}");\r
180 \r
181         PowerMock.replayAll();\r
182         String[] msbInfo = getMsbAddrInfo();\r
183         PowerMock.verifyAll();\r
184 \r
185         assertThat(msbInfo[0], equalTo("127.0.0.3"));\r
186         assertThat(msbInfo[1], equalTo("5432"));\r
187 \r
188         System.clearProperty(HOSTNAME);\r
189         System.clearProperty(MSB_ADDR);\r
190     }\r
191 \r
192     @Test\r
193     public void getMsbAddrInfo_msb_not_registered() throws Exception {\r
194         System.setProperty(MSB_ADDR, "10.74.5.8:1545");\r
195         System.setProperty(HOSTNAME, "rule-mgmt");\r
196         PowerMock.mockStaticPartial(MicroServiceConfig.class, "getServiceAddrInfoFromCBS", String.class);\r
197         EasyMock.expect(MicroServiceConfig.getServiceAddrInfoFromCBS(System.getProperty(HOSTNAME)))\r
198                 .andReturn("{}");\r
199 \r
200         PowerMock.replayAll();\r
201         String[] msbInfo = getMsbAddrInfo();\r
202         PowerMock.verifyAll();\r
203 \r
204         assertThat(msbInfo[0], equalTo("10.74.5.8"));\r
205         assertThat(msbInfo[1], equalTo("1545"));\r
206 \r
207         System.clearProperty(HOSTNAME);\r
208         System.clearProperty(MSB_ADDR);\r
209     }\r
210 \r
211     @Test\r
212     public void getServiceAddrInfo_msb_registered() throws Exception {\r
213         System.setProperty(HOSTNAME, "rule-mgmt");\r
214         PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class);\r
215         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
216                 .andReturn("[{\"ServiceAddress\": \"127.0.0.2\", \"ServicePort\": \"8080\"}]");\r
217         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
218                 .andReturn("{\"rule-mgmt\": \"[\\\"127.0.0.3:5432\\\"]\"}");\r
219 \r
220         PowerMock.replayAll();\r
221         String[] msbInfo = getServiceAddrInfo();\r
222         PowerMock.verifyAll();\r
223 \r
224         assertThat(msbInfo[0], equalTo("127.0.0.3"));\r
225         assertThat(msbInfo[1], equalTo("5432"));\r
226 \r
227         System.clearProperty(HOSTNAME);\r
228     }\r
229 \r
230     @Test\r
231     public void getServiceAddrInfo_msb_not_registered() throws Exception {\r
232         System.setProperty(HOSTNAME, "10.74.5.8:1545");\r
233         PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class);\r
234         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
235                 .andReturn("[{\"ServiceAddress\": \"127.0.0.2\", \"ServicePort\": \"8080\"}]");\r
236         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
237                 .andReturn("{}");\r
238 \r
239         PowerMock.replayAll();\r
240         String[] msbInfo = getServiceAddrInfo();\r
241         PowerMock.verifyAll();\r
242 \r
243         assertThat(msbInfo[0], equalTo("10.74.5.8"));\r
244         assertThat(msbInfo[1], equalTo("1545"));\r
245 \r
246         System.clearProperty(HOSTNAME);\r
247     }\r
248 \r
249     @Test\r
250     public void getServiceAddrInfo_msb_not_registered_full_addr() throws Exception {\r
251         System.setProperty(HOSTNAME, "http://10.74.5.8:1545");\r
252         PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class);\r
253         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
254                 .andReturn("[{\"ServiceAddress\": \"127.0.0.2\", \"ServicePort\": \"8080\"}]");\r
255         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
256                 .andReturn("{}");\r
257 \r
258         PowerMock.replayAll();\r
259         String[] msbInfo = getServiceAddrInfo();\r
260         PowerMock.verifyAll();\r
261 \r
262         assertThat(msbInfo[0], equalTo("10.74.5.8"));\r
263         assertThat(msbInfo[1], equalTo("1545"));\r
264 \r
265         System.clearProperty(MSB_ADDR);\r
266     }\r
267 \r
268     @Test\r
269     public void getServiceAddrInfo_msb_not_registered_no_port() throws Exception {\r
270         System.setProperty(HOSTNAME, "http://10.74.5.8");\r
271         PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class);\r
272         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
273                 .andReturn("[{\"ServiceAddress\": \"127.0.0.2\", \"ServicePort\": \"8080\"}]");\r
274         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
275                 .andReturn("{}");\r
276 \r
277         PowerMock.replayAll();\r
278         String[] msbInfo = getServiceAddrInfo();\r
279         PowerMock.verifyAll();\r
280 \r
281         assertThat(msbInfo[0], equalTo("10.74.5.8"));\r
282         assertThat(msbInfo[1], equalTo("80"));\r
283 \r
284         System.clearProperty(MSB_ADDR);\r
285     }\r
286 \r
287     @Test\r
288     public void getServiceAddrInfo_msb_not_registered_only_ip() throws Exception {\r
289         System.setProperty(HOSTNAME, "10.74.5.8");\r
290         PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class);\r
291         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
292                 .andReturn("[{\"ServiceAddress\": \"127.0.0.2\", \"ServicePort\": \"8080\"}]");\r
293         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
294                 .andReturn("{}");\r
295 \r
296         PowerMock.replayAll();\r
297         String[] msbInfo = getServiceAddrInfo();\r
298         PowerMock.verifyAll();\r
299 \r
300         assertThat(msbInfo[0], equalTo("10.74.5.8"));\r
301         assertThat(msbInfo[1], equalTo("80"));\r
302 \r
303         System.clearProperty(MSB_ADDR);\r
304     }\r
305 \r
306     @Test\r
307     public void getServiceAddrInfo_msb_not_registered_full_addr_https() throws Exception {\r
308         System.setProperty(HOSTNAME, "https://10.74.5.8:5432");\r
309         PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class);\r
310         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
311                 .andReturn("[{\"ServiceAddress\": \"127.0.0.2\", \"ServicePort\": \"8080\"}]");\r
312         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
313                 .andReturn("{}");\r
314 \r
315         PowerMock.replayAll();\r
316         String[] msbInfo = getServiceAddrInfo();\r
317         PowerMock.verifyAll();\r
318 \r
319         assertThat(msbInfo[0], equalTo("10.74.5.8"));\r
320         assertThat(msbInfo[1], equalTo("5432"));\r
321 \r
322         System.clearProperty(MSB_ADDR);\r
323     }\r
324 }