Modify the Service Addr Query Logic
[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.Ignore;\r
28 import org.junit.Rule;\r
29 import org.junit.Test;\r
30 import org.powermock.api.easymock.PowerMock;\r
31 import org.powermock.core.classloader.annotations.PowerMockIgnore;\r
32 import org.powermock.core.classloader.annotations.PrepareForTest;\r
33 import org.powermock.modules.junit4.rule.PowerMockRule;\r
34 \r
35 @PrepareForTest(MicroServiceConfig.class)\r
36 @PowerMockIgnore({"javax.ws.*"})\r
37 public class MicroServiceConfigTest {\r
38 \r
39     @Rule\r
40     public PowerMockRule powerMockRule = new PowerMockRule();\r
41 \r
42     @Test\r
43     public void getMsbServerAddrTest() {\r
44         System.setProperty(MSB_ADDR, "test:80");\r
45         assertThat("http://test:80", equalTo(getMsbServerAddrWithHttpPrefix()));\r
46         System.clearProperty(MicroServiceConfig.MSB_ADDR);\r
47     }\r
48 \r
49     @Test\r
50     public void getMsbServerIpTest() {\r
51         System.setProperty(MSB_ADDR, "10.54.23.79:80");\r
52         System.setProperty(HOSTNAME, "rule-mgmt");\r
53         PowerMock.mockStaticPartial(MicroServiceConfig.class, "getServiceConfigInfoFromCBS", String.class);\r
54         EasyMock.expect(MicroServiceConfig.getServiceConfigInfoFromCBS(System.getProperty(HOSTNAME)))\r
55                 .andReturn("{\"msb.hostname\": \"10.54.23.79:80\"}").times(2);\r
56         PowerMock.replayAll();\r
57         assertThat("10.54.23.79", equalTo(getMsbIpAndPort()[0]));\r
58         assertThat("80", equalTo(getMsbIpAndPort()[1]));\r
59         System.clearProperty(MicroServiceConfig.HOSTNAME);\r
60         System.clearProperty(MSB_ADDR);\r
61     }\r
62 \r
63     @Test\r
64     public void getServiceIpTest() {\r
65         System.setProperty(HOSTNAME, "127.0.0.1");\r
66         assertThat("127.0.0.1", equalTo(getMicroServiceIpAndPort()[0]));\r
67         assertThat("80", equalTo(getMicroServiceIpAndPort()[1]));\r
68         System.clearProperty(HOSTNAME);\r
69     }\r
70 \r
71     @Test\r
72     public void getConsulAddrInfoTest() {\r
73         System.setProperty(CONSUL_HOST, "127.0.0.1");\r
74         assertThat("http://127.0.0.1:8500/v1/catalog/service/", equalTo(getConsulAddrInfo()));\r
75         System.clearProperty(CONSUL_HOST);\r
76     }\r
77 \r
78     @Test\r
79     public void getConfigBindingServiceAddrInfoTest_consul_not_exist() throws Exception {\r
80         System.setProperty(CONFIG_BINDING_SERVICE, "config_binding_service");\r
81         PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class);\r
82         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
83                 .andThrow(new RuntimeException("Invalid URL."));\r
84 \r
85         PowerMock.replayAll();\r
86 \r
87         assertThat(getServiceAddrInfoFromDcaeConsulByHostName(System.getProperty(CONFIG_BINDING_SERVICE))\r
88                 , is(nullValue()));\r
89 \r
90         PowerMock.verifyAll();\r
91         System.clearProperty(CONFIG_BINDING_SERVICE);\r
92     }\r
93 \r
94     @Test\r
95     public void getServiceAddrInfoFromDcaeConsulByHostName_consul_exists() throws Exception {\r
96         System.setProperty(CONFIG_BINDING_SERVICE, "config_binding_service");\r
97         PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class);\r
98         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
99                 .andReturn("[{\"ServiceAddress\": \"127.0.0.2\", \"ServicePort\": \"8080\"}]");\r
100         System.setProperty(CONSUL_HOST, "127.0.0.1");\r
101 \r
102         PowerMock.replayAll();\r
103 \r
104         assertThat(getServiceAddrInfoFromDcaeConsulByHostName(System.getProperty(CONFIG_BINDING_SERVICE)),\r
105                 equalTo("http://127.0.0.2:8080"));\r
106 \r
107         PowerMock.verifyAll();\r
108 \r
109         System.clearProperty(CONSUL_HOST);\r
110         System.clearProperty(CONFIG_BINDING_SERVICE);\r
111     }\r
112 \r
113     @Test\r
114     public void getConfigBindingServiceAddrInfoTest_consul_exists_propertie_not_exist() throws Exception {\r
115         System.setProperty(CONFIG_BINDING_SERVICE, "config_binding_service");\r
116         PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class);\r
117         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
118                 .andReturn("[{\"ServiceAddress\": \"127.0.0.2\"}]");\r
119         System.setProperty(CONSUL_HOST, "127.0.0.1");\r
120 \r
121         PowerMock.replayAll();\r
122 \r
123         assertThat(getServiceAddrInfoFromDcaeConsulByHostName(System.getProperty(CONFIG_BINDING_SERVICE)),\r
124                 is(nullValue()));\r
125 \r
126         PowerMock.verifyAll();\r
127 \r
128         System.clearProperty(CONSUL_HOST);\r
129         System.clearProperty(CONFIG_BINDING_SERVICE);\r
130     }\r
131 \r
132     @Test\r
133     public void getServiceAddrInfoFromCBS_consul_not_exist() throws Exception {\r
134         PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class);\r
135         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
136                 .andThrow(new RuntimeException("Invalid URL.")).times(2);\r
137 \r
138         PowerMock.replayAll();\r
139 \r
140         assertThat(getServiceConfigInfoFromCBS(HOSTNAME), is(nullValue()));\r
141 \r
142         PowerMock.verifyAll();\r
143     }\r
144 \r
145     @Test\r
146     public void getServiceAddrInfoFromDcaeConsulByHostName_consul_exists_service_not_exist() throws Exception {\r
147         PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class);\r
148         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
149                 .andReturn("[]");\r
150 \r
151         PowerMock.replayAll();\r
152         assertThat(getServiceAddrInfoFromDcaeConsulByHostName(HOSTNAME), is(nullValue()));\r
153         PowerMock.verifyAll();\r
154     }\r
155 \r
156     @Ignore\r
157     public void getMsbAddrInfo_msb_registered() throws Exception {\r
158         System.setProperty(MSB_ADDR, "10.74.5.8:1545");\r
159         System.setProperty(HOSTNAME, "rule-mgmt");\r
160         PowerMock.mockStaticPartial(MicroServiceConfig.class, "getServiceConfigInfoFromCBS", String.class);\r
161         EasyMock.expect(MicroServiceConfig.getServiceConfigInfoFromCBS(System.getProperty(HOSTNAME)))\r
162                 .andReturn("{\"msb.hostname\": \"127.0.0.3:5432\"}");\r
163 \r
164         PowerMock.replayAll();\r
165         String[] msbInfo = getMsbIpAndPort();\r
166         PowerMock.verifyAll();\r
167 \r
168         assertThat(msbInfo[0], equalTo("127.0.0.3"));\r
169         assertThat(msbInfo[1], equalTo("5432"));\r
170 \r
171         System.clearProperty(HOSTNAME);\r
172         System.clearProperty(MSB_ADDR);\r
173     }\r
174 \r
175     @Ignore\r
176     public void getMsbAddrInfo_msb_not_registered() throws Exception {\r
177         System.setProperty(MSB_ADDR, "10.74.5.8:1545");\r
178         System.setProperty(HOSTNAME, "rule-mgmt");\r
179         PowerMock.mockStaticPartial(MicroServiceConfig.class, "getServiceConfigInfoFromCBS", String.class);\r
180         EasyMock.expect(MicroServiceConfig.getServiceConfigInfoFromCBS(System.getProperty(HOSTNAME)))\r
181                 .andReturn("{}");\r
182 \r
183         PowerMock.replayAll();\r
184         String[] msbInfo = getMsbIpAndPort();\r
185         PowerMock.verifyAll();\r
186 \r
187         assertThat(msbInfo[0], equalTo("10.74.5.8"));\r
188         assertThat(msbInfo[1], equalTo("1545"));\r
189 \r
190         System.clearProperty(HOSTNAME);\r
191         System.clearProperty(MSB_ADDR);\r
192     }\r
193 \r
194     @Test\r
195     public void getMicroServiceIpAndPort_service_registered_to_consul() throws Exception {\r
196         System.setProperty(HOSTNAME, "rule-mgmt");\r
197         PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class);\r
198         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
199                 .andReturn("[{\"ServiceAddress\": \"127.0.0.3\", \"ServicePort\": \"5432\"}]");\r
200 \r
201         PowerMock.replayAll();\r
202         String[] msbInfo = getMicroServiceIpAndPort();\r
203         PowerMock.verifyAll();\r
204 \r
205         assertThat(msbInfo[0], equalTo("127.0.0.3"));\r
206         assertThat(msbInfo[1], equalTo("5432"));\r
207 \r
208         System.clearProperty(HOSTNAME);\r
209     }\r
210 \r
211     @Test\r
212     public void getMicroServiceIpAndPort_service_not_registered_to_consul() throws Exception {\r
213         System.setProperty(HOSTNAME, "10.74.5.8:1545");\r
214         PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class);\r
215         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
216                 .andReturn("[]");\r
217 \r
218         PowerMock.replayAll();\r
219         String[] msbInfo = getMicroServiceIpAndPort();\r
220         PowerMock.verifyAll();\r
221 \r
222         assertThat(msbInfo[0], equalTo("10.74.5.8"));\r
223         assertThat(msbInfo[1], equalTo("1545"));\r
224 \r
225         System.clearProperty(HOSTNAME);\r
226     }\r
227 \r
228     @Test\r
229     public void getMicroServiceIpAndPort_service_not_registered_full_addr() throws Exception {\r
230         System.setProperty(HOSTNAME, "http://10.74.5.8:1545");\r
231         PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class);\r
232         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
233                 .andReturn("{}");\r
234 \r
235         PowerMock.replayAll();\r
236         String[] msbInfo = getMicroServiceIpAndPort();\r
237         PowerMock.verifyAll();\r
238 \r
239         assertThat(msbInfo[0], equalTo("10.74.5.8"));\r
240         assertThat(msbInfo[1], equalTo("1545"));\r
241 \r
242         System.clearProperty(MSB_ADDR);\r
243     }\r
244 \r
245     @Test\r
246     public void getMicroServiceIpAndPort_service_not_registered_no_port() throws Exception {\r
247         System.setProperty(HOSTNAME, "http://10.74.5.8");\r
248         PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class);\r
249         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
250                 .andReturn("{}");\r
251 \r
252         PowerMock.replayAll();\r
253         String[] msbInfo = getMicroServiceIpAndPort();\r
254         PowerMock.verifyAll();\r
255 \r
256         assertThat(msbInfo[0], equalTo("10.74.5.8"));\r
257         assertThat(msbInfo[1], equalTo("80"));\r
258 \r
259         System.clearProperty(MSB_ADDR);\r
260     }\r
261 \r
262     @Test\r
263     public void getMicroServiceIpAndPort_service_not_registered_only_ip() throws Exception {\r
264         System.setProperty(HOSTNAME, "10.74.5.8");\r
265         PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class);\r
266         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
267                 .andReturn("{}");\r
268 \r
269         PowerMock.replayAll();\r
270         String[] msbInfo = getMicroServiceIpAndPort();\r
271         PowerMock.verifyAll();\r
272 \r
273         assertThat(msbInfo[0], equalTo("10.74.5.8"));\r
274         assertThat(msbInfo[1], equalTo("80"));\r
275 \r
276         System.clearProperty(MSB_ADDR);\r
277     }\r
278 \r
279     @Test\r
280     public void getMicroServiceIpAndPort_service_not_registered_full_addr_https() throws Exception {\r
281         System.setProperty(HOSTNAME, "https://10.74.5.8:5432");\r
282         PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class);\r
283         PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject())\r
284                 .andReturn("[]");\r
285 \r
286         PowerMock.replayAll();\r
287         String[] msbInfo = getMicroServiceIpAndPort();\r
288         PowerMock.verifyAll();\r
289 \r
290         assertThat(msbInfo[0], equalTo("10.74.5.8"));\r
291         assertThat(msbInfo[1], equalTo("5432"));\r
292 \r
293         System.clearProperty(MSB_ADDR);\r
294     }\r
295 }