Merge "Added STD sim 2.0.0 tests"
[nonrtric.git] / policy-agent / src / test / java / org / oransc / policyagent / configuration / ApplicationConfigTest.java
index d4f9e2a..5667fd2 100644 (file)
@@ -2,7 +2,7 @@
  * ========================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.assertj.core.api.Assertions.assertThat;
-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 static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-
-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 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 java.util.Arrays;
-import java.util.Properties;
+import java.util.HashMap;
 import java.util.Vector;
 
-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.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;
-import org.oransc.policyagent.utils.LoggingUtils;
-
-import reactor.core.publisher.Flux;
-import reactor.core.publisher.Mono;
-import reactor.test.StepVerifier;
 
-public class ApplicationConfigTest {
+@ExtendWith(MockitoExtension.class)
+class ApplicationConfigTest {
 
-    private ApplicationConfig appConfigUnderTest;
-    CbsClient cbsClient = mock(CbsClient.class);
-
-    public static final ImmutableRicConfig CORRECT_RIC_CONIFG = ImmutableRicConfig.builder() //
+    private static final ImmutableRicConfig RIC_CONFIG_1 = ImmutableRicConfig.builder() //
         .name("ric1") //
-        .baseUrl("http://localhost:8080/") //
-        .managedElementIds(new Vector<String>(Arrays.asList("kista_1", "kista_2"))) //
+        .baseUrl("ric1_url") //
+        .managedElementIds(new Vector<>()) //
+        .controllerName("") //
         .build();
 
-    private static EnvProperties properties() {
-        return ImmutableEnvProperties.builder() //
-            .consulHost("host") //
-            .consulPort(123) //
-            .cbsName("cbsName") //
-            .appName("appName") //
+    ConfigParserResult configParserResult(RicConfig... rics) {
+        return ImmutableConfigParserResult.builder() //
+            .ricConfigs(Arrays.asList(rics)) //
+            .dmaapConsumerTopicUrl("dmaapConsumerTopicUrl") //
+            .dmaapProducerTopicUrl("dmaapProducerTopicUrl") //
+            .controllerConfigs(new HashMap<>()) //
             .build();
     }
 
     @Test
-    public void whenTheConfigurationFits() throws IOException, ServiceException {
+    void gettingNotAddedRicShouldThrowException() {
+        ApplicationConfig appConfigUnderTest = new ApplicationConfig();
 
-        appConfigUnderTest = spy(ApplicationConfig.class);
-        appConfigUnderTest.systemEnvironment = new Properties();
-        // When
-        doReturn(getCorrectJson()).when(appConfigUnderTest).createInputStream(any());
-        appConfigUnderTest.initialize();
+        appConfigUnderTest.setConfiguration(configParserResult(RIC_CONFIG_1));
 
-        // Then
-        verify(appConfigUnderTest, times(1)).loadConfigurationFromFile(any());
+        Exception exception = assertThrows(ServiceException.class, () -> {
+            appConfigUnderTest.getRic("name");
+        });
 
-        Vector<RicConfig> ricConfigs = appConfigUnderTest.getRicConfigs();
-        RicConfig ricConfig = ricConfigs.firstElement();
-        assertThat(ricConfigs).isNotNull();
-        assertThat(ricConfig).isEqualTo(CORRECT_RIC_CONIFG);
+        assertEquals("Could not find ric configuration: name", exception.getMessage());
     }
 
     @Test
-    public void whenFileIsExistsButJsonIsIncorrect() throws IOException, ServiceException {
+    void addRicShouldNotifyAllObserversOfRicAdded() throws Exception {
+        ApplicationConfig appConfigUnderTest = new ApplicationConfig();
 
-        appConfigUnderTest = spy(ApplicationConfig.class);
-        appConfigUnderTest.systemEnvironment = new Properties();
+        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.");
 
-        // When
-        doReturn(getIncorrectJson()).when(appConfigUnderTest).createInputStream(any());
-        appConfigUnderTest.loadConfigurationFromFile(any());
+        assertEquals(RIC_CONFIG_1, appConfigUnderTest.getRic(RIC_CONFIG_1.name()),
+            "Not correct Ric retrieved from configurations.");
 
-        // Then
-        verify(appConfigUnderTest, times(1)).loadConfigurationFromFile(any());
-        Assertions.assertNull(appConfigUnderTest.getRicConfigs());
-    }
+        update = appConfigUnderTest.setConfiguration(configParserResult(RIC_CONFIG_1)).blockFirst();
+        assertNull(update, "Nothing should be updated");
+        assertTrue(appConfigUnderTest.getRicConfigs().contains(RIC_CONFIG_1), "Ric should remain.");
 
-    @Test
-    public void whenPeriodicConfigRefreshNoEnvironmentVariables() {
-
-        appConfigUnderTest = spy(ApplicationConfig.class);
-        appConfigUnderTest.systemEnvironment = new Properties();
-
-        final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(ApplicationConfig.class);
-        Flux<ApplicationConfig> task = appConfigUnderTest.createRefreshTask();
-
-        StepVerifier.create(task).expectSubscription().verifyComplete();
-
-        assertTrue(logAppender.list.toString().contains("$CONSUL_HOST environment has not been defined"));
     }
 
     @Test
-    public void whenPeriodicConfigRefreshNoConsul() {
-        appConfigUnderTest = spy(ApplicationConfig.class);
-        appConfigUnderTest.systemEnvironment = new Properties();
-
-        EnvProperties props = properties();
-        doReturn(Mono.just(props)).when(appConfigUnderTest).getEnvironment(any());
+    void changedRicShouldNotifyAllObserversOfRicChanged() 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());
+        appConfigUnderTest.setConfiguration(configParserResult(RIC_CONFIG_1));
 
-        final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(ApplicationConfig.class);
-        Flux<ApplicationConfig> task = appConfigUnderTest.createRefreshTask();
+        ImmutableRicConfig changedRicConfig = ImmutableRicConfig.builder() //
+            .name("ric1") //
+            .baseUrl("changed_ric1_url") //
+            .managedElementIds(new Vector<>()) //
+            .controllerName("") //
+            .build();
 
-        StepVerifier //
-            .create(task) //
-            .expectSubscription() //
-            .verifyComplete();
+        RicConfigUpdate update = appConfigUnderTest.setConfiguration(configParserResult(changedRicConfig)).blockFirst();
 
-        assertTrue(
-            logAppender.list.toString().contains("Could not refresh application configuration java.io.IOException"));
+        assertEquals(RicConfigUpdate.Type.CHANGED, update.getType());
+        assertEquals(changedRicConfig, appConfigUnderTest.getRic(RIC_CONFIG_1.name()),
+            "Changed Ric not retrieved from configurations.");
     }
 
     @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);
-
-        Flux<JsonObject> json = Flux.just(getJsonRootObject());
-        doReturn(json).when(cbsClient).updates(any(), any(), any());
-
-        Flux<ApplicationConfig> task = appConfigUnderTest.createRefreshTask();
-
-        StepVerifier //
-            .create(task) //
-            .expectSubscription() //
-            .expectNext(appConfigUnderTest) //
-            .verifyComplete();
+    void removedRicShouldNotifyAllObserversOfRicRemoved() {
+        ApplicationConfig appConfigUnderTest = new ApplicationConfig();
+
+        ImmutableRicConfig ricConfig2 = ImmutableRicConfig.builder() //
+            .name("ric2") //
+            .baseUrl("ric2_url") //
+            .managedElementIds(new Vector<>()) //
+            .controllerName("") //
+            .build();
 
-        Assertions.assertNotNull(appConfigUnderTest.getRicConfigs());
-    }
+        appConfigUnderTest.setConfiguration(configParserResult(RIC_CONFIG_1, ricConfig2));
 
-    private JsonObject getJsonRootObject() throws JsonIOException, JsonSyntaxException, IOException {
-        JsonObject rootObject = (new JsonParser()).parse(new InputStreamReader(getCorrectJson())).getAsJsonObject();
-        return rootObject;
-    }
-
-    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)));
-    }
+        RicConfigUpdate update = appConfigUnderTest.setConfiguration(configParserResult(ricConfig2)).blockFirst();
 
-    private static InputStream getIncorrectJson() {
-        String string = "{" + //
-            "    \"config\": {" + //
-            "        \"ric\": {"; //
-        return new ByteArrayInputStream((string.getBytes(StandardCharsets.UTF_8)));
+        assertEquals(RicConfigUpdate.Type.REMOVED, update.getType());
+        assertEquals(1, appConfigUnderTest.getRicConfigs().size(), "Ric not deleted from configurations.");
     }
 
 }