7b1af1de0d438636f93ddf72bb3d6fcc805c72ce
[dcaegen2/collectors/ves.git] / src / test / java / org / onap / dcae / configuration / CbsConfigurationHandlerTest.java
1 /*
2  * ============LICENSE_START=======================================================
3  * VES Collector
4  * ================================================================================
5  * Copyright (C) 2020 Nokia. All rights reserved.s
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 package org.onap.dcae.configuration;
21
22 import com.google.gson.JsonObject;
23 import com.google.gson.JsonParser;
24 import io.vavr.control.Option;
25 import org.json.JSONObject;
26 import org.junit.Test;
27 import org.junit.runner.RunWith;
28 import org.mockito.ArgumentCaptor;
29 import org.mockito.InjectMocks;
30 import org.mockito.Mock;
31 import org.mockito.Spy;
32 import org.mockito.junit.MockitoJUnitRunner;
33 import org.onap.dcae.configuration.cbs.CbsClientConfigurationProvider;
34 import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.CbsClient;
35 import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.CbsClientConfiguration;
36 import reactor.core.Disposable;
37 import reactor.core.publisher.Mono;
38
39 import java.time.Duration;
40
41 import static org.assertj.core.api.Assertions.assertThat;
42 import static org.assertj.core.api.Assertions.assertThatThrownBy;
43 import static org.mockito.ArgumentMatchers.any;
44 import static org.mockito.Mockito.never;
45 import static org.mockito.Mockito.verify;
46 import static org.mockito.Mockito.when;
47
48 @RunWith(MockitoJUnitRunner.class)
49 public class CbsConfigurationHandlerTest {
50
51     private static final String VES_CONFIG = "{\"collector.port\": 8081}";
52     private static final String VES_CONSUL_CONFIG = String.format("{\"config\":%s}", VES_CONFIG);
53
54     @Mock
55     private CbsClientConfigurationProvider cbsClientConfigurationProvider;
56     @Mock
57     private CbsClientConfiguration cbsClientConfiguration;
58     @Mock
59     private Mono<CbsClient> cbsClient;
60     @Mock
61     private ConfigUpdater configLoader;
62
63     @InjectMocks
64     @Spy
65     private ConfigurationHandler cbsConfigurationHandler;
66
67     @Test
68     public void shouldCreateCbsConfigurationHandler() {
69         // given
70
71         when(cbsConfigurationHandler.createCbsClient(cbsClientConfiguration)).thenReturn(cbsClient);
72         when(cbsClientConfigurationProvider.get()).thenReturn(cbsClientConfiguration);
73
74         // when
75         final Disposable handler = cbsConfigurationHandler.startListen(Duration.ofMinutes(5));
76
77         // then
78         assertThat(handler).isNotNull();
79     }
80
81     @Test
82     public void shouldUpdateAppConfigurationWhenConfigurationIsValid() {
83         // given
84         final JsonObject configuration = createConsulConfiguration(VES_CONSUL_CONFIG);
85
86         // when
87         this.cbsConfigurationHandler.handleConfigurationFromConsul(configuration);
88
89         // then
90         final ArgumentCaptor<Option<JSONObject>> acConfiguration = ArgumentCaptor.forClass(Option.class);
91         verify(configLoader).updateConfig(acConfiguration.capture());
92         assertThat(acConfiguration.getValue().get().toString()).hasToString(createJSONObject(VES_CONFIG));
93     }
94
95     @Test
96     public void shouldReportAnErrorWhenConsulReturnsEmptyConfiguration() {
97         // given
98         final JsonObject configuration = createConsulConfiguration("{}");
99
100         // when
101         assertThatThrownBy(() -> this.cbsConfigurationHandler.handleConfigurationFromConsul(configuration))
102                 .isInstanceOf(IllegalArgumentException.class).hasMessageContaining(String.format("Invalid application configuration: %s ", "{}"));
103
104         // then
105         verify(configLoader, never()).updateConfig(any());
106     }
107
108     private String createJSONObject(String vesConfig) {
109         return new JSONObject(vesConfig).toString();
110     }
111
112     private JsonObject createConsulConfiguration(String vesConsulConfig) {
113         return new JsonParser().parse(vesConsulConfig).getAsJsonObject();
114     }
115
116
117 }