* ========================LICENSE_START=================================
* O-RAN-SC
* %%
- * Copyright (C) 2019 Nordix Foundation
+ * Copyright (C) 2020 Nordix Foundation
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* limitations under the License.
* ========================LICENSE_END===================================
*/
+
package org.oransc.policyagent.configuration;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
-
-import ch.qos.logback.classic.spi.ILoggingEvent;
-import ch.qos.logback.core.read.ListAppender;
-
-import com.google.common.base.Charsets;
-import com.google.common.io.Resources;
-import com.google.gson.JsonIOException;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-import com.google.gson.JsonSyntaxException;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.URL;
-import java.nio.charset.StandardCharsets;
-import java.util.Properties;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
-import org.junit.Test;
-import org.junit.jupiter.api.Assertions;
-import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.CbsClient;
-import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.EnvProperties;
-import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.ImmutableEnvProperties;
-import org.oransc.policyagent.utils.LoggingUtils;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Properties;
+import java.util.Vector;
-import reactor.core.publisher.Flux;
-import reactor.core.publisher.Mono;
-import reactor.test.StepVerifier;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.oransc.policyagent.configuration.ApplicationConfig.RicConfigUpdate;
+import org.oransc.policyagent.configuration.ApplicationConfigParser.ConfigParserResult;
+import org.oransc.policyagent.exceptions.ServiceException;
+@ExtendWith(MockitoExtension.class)
public class ApplicationConfigTest {
- private ApplicationConfig appConfigUnderTest;
- CbsClient cbsClient = mock(CbsClient.class);
-
- private static EnvProperties properties() {
- return ImmutableEnvProperties.builder() //
- .consulHost("host") //
- .consulPort(123) //
- .cbsName("cbsName") //
- .appName("appName") //
+ private static final ImmutableRicConfig RIC_CONFIG_1 = ImmutableRicConfig.builder() //
+ .name("ric1") //
+ .baseUrl("ric1_url") //
+ .managedElementIds(new Vector<>()) //
+ .controllerName("") //
+ .build();
+
+ ConfigParserResult configParserResult(RicConfig... rics) {
+ return ImmutableConfigParserResult.builder() //
+ .ricConfigs(Arrays.asList(rics)) //
+ .dmaapConsumerConfig(new Properties()) //
+ .dmaapPublisherConfig(new Properties()) //
+ .controllerConfigs(new HashMap<>()) //
.build();
}
@Test
- public void whenPeriodicConfigRefreshNoEnvironmentVariables() {
+ public void gettingNotAddedRicShouldThrowException() {
+ ApplicationConfig appConfigUnderTest = new ApplicationConfig();
- appConfigUnderTest = spy(ApplicationConfig.class);
- appConfigUnderTest.systemEnvironment = new Properties();
+ appConfigUnderTest.setConfiguration(configParserResult(RIC_CONFIG_1));
- final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(ApplicationConfig.class);
- Flux<ApplicationConfig> task = appConfigUnderTest.createRefreshTask();
+ Exception exception = assertThrows(ServiceException.class, () -> {
+ appConfigUnderTest.getRic("name");
+ });
- StepVerifier.create(task).expectSubscription().verifyComplete();
-
- assertTrue(logAppender.list.toString().contains("$CONSUL_HOST environment has not been defined"));
+ assertEquals("Could not find ric configuration: name", exception.getMessage());
}
@Test
- public void whenPeriodicConfigRefreshNoConsul() {
- appConfigUnderTest = spy(ApplicationConfig.class);
- appConfigUnderTest.systemEnvironment = new Properties();
-
- EnvProperties props = properties();
- doReturn(Mono.just(props)).when(appConfigUnderTest).getEnvironment(any());
+ public void addRicShouldNotifyAllObserversOfRicAdded() throws Exception {
+ ApplicationConfig appConfigUnderTest = new ApplicationConfig();
- doReturn(Mono.just(cbsClient)).when(appConfigUnderTest).createCbsClient(props);
- Flux<JsonObject> err = Flux.error(new IOException());
- doReturn(err).when(cbsClient).updates(any(), any(), any());
+ RicConfigUpdate update = appConfigUnderTest.setConfiguration(configParserResult(RIC_CONFIG_1)).blockFirst();
+ assertEquals(RicConfigUpdate.Type.ADDED, update.getType());
+ assertTrue(appConfigUnderTest.getRicConfigs().contains(RIC_CONFIG_1), "Ric not added to configurations.");
- final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(ApplicationConfig.class);
- Flux<ApplicationConfig> task = appConfigUnderTest.createRefreshTask();
+ assertEquals(RIC_CONFIG_1, appConfigUnderTest.getRic(RIC_CONFIG_1.name()),
+ "Not correct Ric retrieved from configurations.");
- StepVerifier //
- .create(task) //
- .expectSubscription() //
- .verifyComplete();
+ update = appConfigUnderTest.setConfiguration(configParserResult(RIC_CONFIG_1)).blockFirst();
+ assertNull(update, "Nothing should be updated");
+ assertTrue(appConfigUnderTest.getRicConfigs().contains(RIC_CONFIG_1), "Ric should remain.");
- assertTrue(
- logAppender.list.toString().contains("Could not refresh application configuration java.io.IOException"));
}
@Test
- public void whenPeriodicConfigRefreshSuccess() throws JsonIOException, JsonSyntaxException, IOException {
- appConfigUnderTest = spy(ApplicationConfig.class);
- appConfigUnderTest.systemEnvironment = new Properties();
-
- EnvProperties props = properties();
- doReturn(Mono.just(props)).when(appConfigUnderTest).getEnvironment(any());
- doReturn(Mono.just(cbsClient)).when(appConfigUnderTest).createCbsClient(props);
+ public void changedRicShouldNotifyAllObserversOfRicChanged() throws Exception {
+ ApplicationConfig appConfigUnderTest = new ApplicationConfig();
- Flux<JsonObject> json = Flux.just(getJsonRootObject());
- doReturn(json).when(cbsClient).updates(any(), any(), any());
+ appConfigUnderTest.setConfiguration(configParserResult(RIC_CONFIG_1));
- Flux<ApplicationConfig> task = appConfigUnderTest.createRefreshTask();
+ ImmutableRicConfig changedRicConfig = ImmutableRicConfig.builder() //
+ .name("ric1") //
+ .baseUrl("changed_ric1_url") //
+ .managedElementIds(new Vector<>()) //
+ .controllerName("") //
+ .build();
- StepVerifier //
- .create(task) //
- .expectSubscription() //
- .expectNext(appConfigUnderTest) //
- .verifyComplete();
+ RicConfigUpdate update = appConfigUnderTest.setConfiguration(configParserResult(changedRicConfig)).blockFirst();
- Assertions.assertNotNull(appConfigUnderTest.getRicConfigs());
+ assertEquals(RicConfigUpdate.Type.CHANGED, update.getType());
+ assertEquals(changedRicConfig, appConfigUnderTest.getRic(RIC_CONFIG_1.name()),
+ "Changed Ric not retrieved from configurations.");
}
- private JsonObject getJsonRootObject() throws JsonIOException, JsonSyntaxException, IOException {
- JsonObject rootObject = (new JsonParser()).parse(new InputStreamReader(getCorrectJson())).getAsJsonObject();
- return rootObject;
- }
+ @Test
+ public void removedRicShouldNotifyAllObserversOfRicRemoved() {
+ ApplicationConfig appConfigUnderTest = new ApplicationConfig();
+
+ ImmutableRicConfig ricConfig2 = ImmutableRicConfig.builder() //
+ .name("ric2") //
+ .baseUrl("ric2_url") //
+ .managedElementIds(new Vector<>()) //
+ .controllerName("") //
+ .build();
+
+ appConfigUnderTest.setConfiguration(configParserResult(RIC_CONFIG_1, ricConfig2));
+
+ RicConfigUpdate update = appConfigUnderTest.setConfiguration(configParserResult(ricConfig2)).blockFirst();
- private static InputStream getCorrectJson() throws IOException {
- URL url = ApplicationConfigParser.class.getClassLoader().getResource("test_application_configuration.json");
- String string = Resources.toString(url, Charsets.UTF_8);
- return new ByteArrayInputStream((string.getBytes(StandardCharsets.UTF_8)));
+ assertEquals(RicConfigUpdate.Type.REMOVED, update.getType());
+ assertEquals(1, appConfigUnderTest.getRicConfigs().size(), "Ric not deleted from configurations.");
}
}