From 636b5946ed5f9475d13cf4c942a2d9d35d1a5cbd Mon Sep 17 00:00:00 2001 From: RehanRaza Date: Mon, 20 Jan 2020 13:13:41 +0100 Subject: [PATCH] Move RefreshConfigTask under tasks Change-Id: I2758eef9b2d0814e82c6141231fb082a7eab8fd9 Signed-off-by: RehanRaza --- .../configuration/ApplicationConfig.java | 135 +--------------- .../configuration/ApplicationConfigParser.java | 2 +- .../EnvironmentProcessor.java | 2 +- .../policyagent/tasks/RefreshConfigTask.java | 169 +++++++++++++++++++++ .../oransc/policyagent/tasks/StartupService.java | 10 +- .../org/oransc/policyagent/ApplicationTest.java | 2 +- .../org/oransc/policyagent/MockPolicyAgent.java | 2 +- .../RefreshConfigTaskTest.java} | 80 +++++----- .../policyagent/tasks/StartupServiceTest.java | 15 +- 9 files changed, 235 insertions(+), 182 deletions(-) rename policy-agent/src/main/java/org/oransc/policyagent/{configuration => tasks}/EnvironmentProcessor.java (98%) create mode 100644 policy-agent/src/main/java/org/oransc/policyagent/tasks/RefreshConfigTask.java rename policy-agent/src/test/java/org/oransc/policyagent/{configuration/ApplicationConfigTest.java => tasks/RefreshConfigTaskTest.java} (68%) diff --git a/policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfig.java b/policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfig.java index 7e522842..fee01813 100644 --- a/policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfig.java +++ b/policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfig.java @@ -20,69 +20,34 @@ package org.oransc.policyagent.configuration; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.google.gson.JsonSyntaxException; -import com.google.gson.TypeAdapterFactory; - -import java.io.BufferedInputStream; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.time.Duration; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Optional; -import java.util.Properties; -import java.util.ServiceLoader; import java.util.Vector; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; -import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.CbsClient; -import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.CbsClientFactory; -import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.CbsRequests; -import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.CbsRequest; -import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.EnvProperties; -import org.onap.dcaegen2.services.sdk.rest.services.model.logging.RequestDiagnosticContext; import org.oransc.policyagent.exceptions.ServiceException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import reactor.core.Disposable; -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; - @EnableConfigurationProperties @ConfigurationProperties("app") public class ApplicationConfig { - private static final Logger logger = LoggerFactory.getLogger(ApplicationConfig.class); - - @Value("#{systemEnvironment}") - Properties systemEnvironment; + @NotEmpty + private String filepath; - private Disposable refreshConfigTask = null; private Collection observers = new Vector<>(); - private Map ricConfigs = new HashMap<>(); - @NotEmpty - private String filepath; - @Autowired public ApplicationConfig() { } - protected String getLocalConfigurationFilePath() { + public String getLocalConfigurationFilePath() { return this.filepath; } @@ -112,16 +77,6 @@ public class ApplicationConfig { throw new ServiceException("Could not find ric: " + ricName); } - public void initialize() { - stop(); - loadConfigurationFromFile(); - - refreshConfigTask = createRefreshTask() // - .subscribe(notUsed -> logger.info("Refreshed configuration data"), - throwable -> logger.error("Configuration refresh terminated due to exception", throwable), - () -> logger.error("Configuration refresh terminated")); - } - public static enum RicConfigUpdate { ADDED, CHANGED, REMOVED } @@ -134,46 +89,6 @@ public class ApplicationConfig { this.observers.add(o); } - Mono getEnvironment(Properties systemEnvironment) { - return EnvironmentProcessor.readEnvironmentVariables(systemEnvironment); - } - - Flux createRefreshTask() { - return getEnvironment(systemEnvironment) // - .flatMap(this::createCbsClient) // - .flatMapMany(this::periodicConfigurationUpdates) // - .map(this::parseRicConfigurationfromConsul) // - .onErrorResume(this::onErrorResume); - } - - Mono createCbsClient(EnvProperties env) { - return CbsClientFactory.createCbsClient(env); - } - - private Flux periodicConfigurationUpdates(CbsClient cbsClient) { - final Duration initialDelay = Duration.ZERO; - final Duration refreshPeriod = Duration.ofMinutes(1); - final CbsRequest getConfigRequest = CbsRequests.getAll(RequestDiagnosticContext.create()); - return cbsClient.updates(getConfigRequest, initialDelay, refreshPeriod); - } - - private Mono onErrorResume(Throwable trowable) { - logger.error("Could not refresh application configuration {}", trowable.toString()); - return Mono.empty(); - } - - private ApplicationConfig parseRicConfigurationfromConsul(JsonObject jsonObject) { - try { - ApplicationConfigParser parser = new ApplicationConfigParser(); - parser.parse(jsonObject); - setConfiguration(parser.getRicConfigs()); - - } catch (ServiceException e) { - logger.error("Could not parse configuration {}", e.toString(), e); - } - return this; - } - private class Notification { final RicConfig ric; final RicConfigUpdate event; @@ -184,7 +99,7 @@ public class ApplicationConfig { } } - private void setConfiguration(@NotNull Collection ricConfigs) { + public void setConfiguration(@NotNull Collection ricConfigs) { Collection notifications = new Vector<>(); synchronized (this) { Map newRicConfigs = new HashMap<>(); @@ -217,46 +132,4 @@ public class ApplicationConfig { } } } - - public void stop() { - if (refreshConfigTask != null) { - refreshConfigTask.dispose(); - refreshConfigTask = null; - } - } - - /** - * Reads the configuration from file. - */ - public void loadConfigurationFromFile() { - String filepath = getLocalConfigurationFilePath(); - if (filepath == null) { - logger.debug("No localconfiguration file used"); - return; - } - GsonBuilder gsonBuilder = new GsonBuilder(); - ServiceLoader.load(TypeAdapterFactory.class).forEach(gsonBuilder::registerTypeAdapterFactory); - - try (InputStream inputStream = createInputStream(filepath)) { - JsonParser parser = new JsonParser(); - JsonObject rootObject = getJsonElement(parser, inputStream).getAsJsonObject(); - if (rootObject == null) { - throw new JsonSyntaxException("Root is not a json object"); - } - ApplicationConfigParser appParser = new ApplicationConfigParser(); - appParser.parse(rootObject); - setConfiguration(appParser.getRicConfigs()); - logger.info("Local configuration file loaded: {}", filepath); - } catch (JsonSyntaxException | ServiceException | IOException e) { - logger.trace("Local configuration file not loaded: {}", filepath, e); - } - } - - JsonElement getJsonElement(JsonParser parser, InputStream inputStream) { - return parser.parse(new InputStreamReader(inputStream)); - } - - InputStream createInputStream(@NotNull String filepath) throws IOException { - return new BufferedInputStream(new FileInputStream(filepath)); - } } diff --git a/policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfigParser.java b/policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfigParser.java index 400a681e..75ee1356 100644 --- a/policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfigParser.java +++ b/policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfigParser.java @@ -30,7 +30,7 @@ import java.util.Vector; import org.oransc.policyagent.exceptions.ServiceException; -class ApplicationConfigParser { +public class ApplicationConfigParser { private static final String CONFIG = "config"; private static Gson gson = new GsonBuilder() // diff --git a/policy-agent/src/main/java/org/oransc/policyagent/configuration/EnvironmentProcessor.java b/policy-agent/src/main/java/org/oransc/policyagent/tasks/EnvironmentProcessor.java similarity index 98% rename from policy-agent/src/main/java/org/oransc/policyagent/configuration/EnvironmentProcessor.java rename to policy-agent/src/main/java/org/oransc/policyagent/tasks/EnvironmentProcessor.java index 5987c944..574656f6 100644 --- a/policy-agent/src/main/java/org/oransc/policyagent/configuration/EnvironmentProcessor.java +++ b/policy-agent/src/main/java/org/oransc/policyagent/tasks/EnvironmentProcessor.java @@ -18,7 +18,7 @@ * ========================LICENSE_END=================================== */ -package org.oransc.policyagent.configuration; +package org.oransc.policyagent.tasks; import java.util.Optional; import java.util.Properties; diff --git a/policy-agent/src/main/java/org/oransc/policyagent/tasks/RefreshConfigTask.java b/policy-agent/src/main/java/org/oransc/policyagent/tasks/RefreshConfigTask.java new file mode 100644 index 00000000..9a8dc348 --- /dev/null +++ b/policy-agent/src/main/java/org/oransc/policyagent/tasks/RefreshConfigTask.java @@ -0,0 +1,169 @@ +/*- + * ========================LICENSE_START================================= + * O-RAN-SC + * %% + * Copyright (C) 2019 Nordix Foundation + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================LICENSE_END=================================== + */ + +package org.oransc.policyagent.tasks; + +import com.google.gson.GsonBuilder; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.JsonSyntaxException; +import com.google.gson.TypeAdapterFactory; + +import java.io.BufferedInputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.time.Duration; +import java.util.Properties; +import java.util.ServiceLoader; + +import javax.validation.constraints.NotNull; + +import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.CbsClient; +import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.CbsClientFactory; +import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.CbsRequests; +import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.CbsRequest; +import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.EnvProperties; +import org.onap.dcaegen2.services.sdk.rest.services.model.logging.RequestDiagnosticContext; +import org.oransc.policyagent.configuration.ApplicationConfig; +import org.oransc.policyagent.configuration.ApplicationConfigParser; +import org.oransc.policyagent.exceptions.ServiceException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import reactor.core.Disposable; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +/** + * Regularly refreshes the configuration from Consul. + */ +@Component +public class RefreshConfigTask { + + private static final Logger logger = LoggerFactory.getLogger(RefreshConfigTask.class); + + @Value("#{systemEnvironment}") + public Properties systemEnvironment; + + private final ApplicationConfig appConfig; + private Disposable refreshTask = null; + + @Autowired + public RefreshConfigTask(ApplicationConfig appConfig) { + this.appConfig = appConfig; + } + + public void start() { + logger.debug("Starting refreshConfigTask"); + stop(); + loadConfigurationFromFile(); + refreshTask = createRefreshTask() // + .subscribe(notUsed -> logger.info("Refreshed configuration data"), + throwable -> logger.error("Configuration refresh terminated due to exception", throwable), + () -> logger.error("Configuration refresh terminated")); + } + + public void stop() { + if (refreshTask != null) { + refreshTask.dispose(); + refreshTask = null; + } + } + + Flux createRefreshTask() { + return getEnvironment(systemEnvironment) // + .flatMap(this::createCbsClient) // + .flatMapMany(this::periodicConfigurationUpdates) // + .map(this::parseRicConfigurationfromConsul) // + .onErrorResume(this::onErrorResume); + } + + Mono getEnvironment(Properties systemEnvironment) { + return EnvironmentProcessor.readEnvironmentVariables(systemEnvironment); + } + + Mono createCbsClient(EnvProperties env) { + return CbsClientFactory.createCbsClient(env); + } + + private Flux periodicConfigurationUpdates(CbsClient cbsClient) { + final Duration initialDelay = Duration.ZERO; + final Duration refreshPeriod = Duration.ofMinutes(1); + final CbsRequest getConfigRequest = CbsRequests.getAll(RequestDiagnosticContext.create()); + return cbsClient.updates(getConfigRequest, initialDelay, refreshPeriod); + } + + private Mono onErrorResume(Throwable trowable) { + logger.error("Could not refresh application configuration {}", trowable.toString()); + return Mono.empty(); + } + + private ApplicationConfig parseRicConfigurationfromConsul(JsonObject jsonObject) { + try { + ApplicationConfigParser parser = new ApplicationConfigParser(); + parser.parse(jsonObject); + this.appConfig.setConfiguration(parser.getRicConfigs()); + } catch (ServiceException e) { + logger.error("Could not parse configuration {}", e.toString(), e); + } + return this.appConfig; + } + + /** + * Reads the configuration from file. + */ + public void loadConfigurationFromFile() { + String filepath = appConfig.getLocalConfigurationFilePath(); + if (filepath == null) { + logger.debug("No localconfiguration file used"); + return; + } + GsonBuilder gsonBuilder = new GsonBuilder(); + ServiceLoader.load(TypeAdapterFactory.class).forEach(gsonBuilder::registerTypeAdapterFactory); + + try (InputStream inputStream = createInputStream(filepath)) { + JsonParser parser = new JsonParser(); + JsonObject rootObject = getJsonElement(parser, inputStream).getAsJsonObject(); + if (rootObject == null) { + throw new JsonSyntaxException("Root is not a json object"); + } + ApplicationConfigParser appParser = new ApplicationConfigParser(); + appParser.parse(rootObject); + appConfig.setConfiguration(appParser.getRicConfigs()); + logger.info("Local configuration file loaded: {}", filepath); + } catch (JsonSyntaxException | ServiceException | IOException e) { + logger.trace("Local configuration file not loaded: {}", filepath, e); + } + } + + JsonElement getJsonElement(JsonParser parser, InputStream inputStream) { + return parser.parse(new InputStreamReader(inputStream)); + } + + InputStream createInputStream(@NotNull String filepath) throws IOException { + return new BufferedInputStream(new FileInputStream(filepath)); + } +} diff --git a/policy-agent/src/main/java/org/oransc/policyagent/tasks/StartupService.java b/policy-agent/src/main/java/org/oransc/policyagent/tasks/StartupService.java index 90358b28..46587a20 100644 --- a/policy-agent/src/main/java/org/oransc/policyagent/tasks/StartupService.java +++ b/policy-agent/src/main/java/org/oransc/policyagent/tasks/StartupService.java @@ -47,6 +47,9 @@ public class StartupService implements ApplicationConfig.Observer { @Autowired ApplicationConfig applicationConfig; + @Autowired + RefreshConfigTask refreshConfigTask; + @Autowired private Rics rics; @@ -63,9 +66,10 @@ public class StartupService implements ApplicationConfig.Observer { private Services services; // Only for unittesting - StartupService(ApplicationConfig appConfig, Rics rics, PolicyTypes policyTypes, A1Client a1Client, - Policies policies, Services services) { + StartupService(ApplicationConfig appConfig, RefreshConfigTask refreshTask, Rics rics, PolicyTypes policyTypes, + A1Client a1Client, Policies policies, Services services) { this.applicationConfig = appConfig; + this.refreshConfigTask = refreshTask; this.rics = rics; this.policyTypes = policyTypes; this.a1Client = a1Client; @@ -96,7 +100,7 @@ public class StartupService implements ApplicationConfig.Observer { public void startup() { logger.debug("Starting up"); applicationConfig.addObserver(this); - applicationConfig.initialize(); + refreshConfigTask.start(); } } diff --git a/policy-agent/src/test/java/org/oransc/policyagent/ApplicationTest.java b/policy-agent/src/test/java/org/oransc/policyagent/ApplicationTest.java index d0770172..09191541 100644 --- a/policy-agent/src/test/java/org/oransc/policyagent/ApplicationTest.java +++ b/policy-agent/src/test/java/org/oransc/policyagent/ApplicationTest.java @@ -92,7 +92,7 @@ public class ApplicationTest { public static class MockApplicationConfig extends ApplicationConfig { @Override - protected String getLocalConfigurationFilePath() { + public String getLocalConfigurationFilePath() { URL url = MockApplicationConfig.class.getClassLoader().getResource("test_application_configuration.json"); return url.getFile(); } diff --git a/policy-agent/src/test/java/org/oransc/policyagent/MockPolicyAgent.java b/policy-agent/src/test/java/org/oransc/policyagent/MockPolicyAgent.java index 8b488d8b..8adc79a3 100644 --- a/policy-agent/src/test/java/org/oransc/policyagent/MockPolicyAgent.java +++ b/policy-agent/src/test/java/org/oransc/policyagent/MockPolicyAgent.java @@ -51,7 +51,7 @@ public class MockPolicyAgent { static class MockApplicationConfig extends ApplicationConfig { @Override - protected String getLocalConfigurationFilePath() { + public String getLocalConfigurationFilePath() { URL url = MockApplicationConfig.class.getClassLoader().getResource("test_application_configuration.json"); return url.getFile(); } diff --git a/policy-agent/src/test/java/org/oransc/policyagent/configuration/ApplicationConfigTest.java b/policy-agent/src/test/java/org/oransc/policyagent/tasks/RefreshConfigTaskTest.java similarity index 68% rename from policy-agent/src/test/java/org/oransc/policyagent/configuration/ApplicationConfigTest.java rename to policy-agent/src/test/java/org/oransc/policyagent/tasks/RefreshConfigTaskTest.java index 6a4f8b36..788ac416 100644 --- a/policy-agent/src/test/java/org/oransc/policyagent/configuration/ApplicationConfigTest.java +++ b/policy-agent/src/test/java/org/oransc/policyagent/tasks/RefreshConfigTaskTest.java @@ -18,7 +18,7 @@ * ========================LICENSE_END=================================== */ -package org.oransc.policyagent.configuration; +package org.oransc.policyagent.tasks; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -53,11 +53,16 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.runner.RunWith; import org.mockito.Mock; +import org.mockito.Spy; import org.mockito.junit.MockitoJUnitRunner; import org.mockito.junit.jupiter.MockitoExtension; 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.configuration.ApplicationConfig; +import org.oransc.policyagent.configuration.ApplicationConfigParser; +import org.oransc.policyagent.configuration.ImmutableRicConfig; +import org.oransc.policyagent.configuration.RicConfig; import org.oransc.policyagent.exceptions.ServiceException; import org.oransc.policyagent.utils.LoggingUtils; @@ -67,9 +72,12 @@ import reactor.test.StepVerifier; @ExtendWith(MockitoExtension.class) @RunWith(MockitoJUnitRunner.class) -public class ApplicationConfigTest { +public class RefreshConfigTaskTest { - private ApplicationConfig appConfigUnderTest; + private RefreshConfigTask refreshTaskUnderTest; + + @Spy + ApplicationConfig appConfig; @Mock CbsClient cbsClient; @@ -91,18 +99,17 @@ public class ApplicationConfigTest { @Test public void whenTheConfigurationFits() throws IOException, ServiceException { - - appConfigUnderTest = spy(ApplicationConfig.class); - appConfigUnderTest.systemEnvironment = new Properties(); + refreshTaskUnderTest = spy(new RefreshConfigTask(appConfig)); + refreshTaskUnderTest.systemEnvironment = new Properties(); // When - doReturn(getCorrectJson()).when(appConfigUnderTest).createInputStream(any()); - doReturn("fileName").when(appConfigUnderTest).getLocalConfigurationFilePath(); - appConfigUnderTest.initialize(); + doReturn(getCorrectJson()).when(refreshTaskUnderTest).createInputStream(any()); + doReturn("fileName").when(appConfig).getLocalConfigurationFilePath(); + refreshTaskUnderTest.start(); // Then - verify(appConfigUnderTest, times(1)).loadConfigurationFromFile(); + verify(refreshTaskUnderTest, times(1)).loadConfigurationFromFile(); - Iterable ricConfigs = appConfigUnderTest.getRicConfigs(); + Iterable ricConfigs = appConfig.getRicConfigs(); RicConfig ricConfig = ricConfigs.iterator().next(); assertThat(ricConfigs).isNotNull(); assertThat(ricConfig).isEqualTo(CORRECT_RIC_CONIFG); @@ -110,28 +117,26 @@ public class ApplicationConfigTest { @Test public void whenFileIsExistsButJsonIsIncorrect() throws IOException, ServiceException { - - appConfigUnderTest = spy(ApplicationConfig.class); - appConfigUnderTest.systemEnvironment = new Properties(); + refreshTaskUnderTest = spy(new RefreshConfigTask(appConfig)); + refreshTaskUnderTest.systemEnvironment = new Properties(); // When - doReturn(getIncorrectJson()).when(appConfigUnderTest).createInputStream(any()); - doReturn("fileName").when(appConfigUnderTest).getLocalConfigurationFilePath(); - appConfigUnderTest.loadConfigurationFromFile(); + doReturn(getIncorrectJson()).when(refreshTaskUnderTest).createInputStream(any()); + doReturn("fileName").when(appConfig).getLocalConfigurationFilePath(); + refreshTaskUnderTest.loadConfigurationFromFile(); // Then - verify(appConfigUnderTest, times(1)).loadConfigurationFromFile(); - Assertions.assertEquals(0, appConfigUnderTest.getRicConfigs().size()); + verify(refreshTaskUnderTest, times(1)).loadConfigurationFromFile(); + Assertions.assertEquals(0, appConfig.getRicConfigs().size()); } @Test public void whenPeriodicConfigRefreshNoEnvironmentVariables() { + refreshTaskUnderTest = spy(new RefreshConfigTask(appConfig)); + refreshTaskUnderTest.systemEnvironment = new Properties(); - appConfigUnderTest = spy(ApplicationConfig.class); - appConfigUnderTest.systemEnvironment = new Properties(); - - final ListAppender logAppender = LoggingUtils.getLogListAppender(ApplicationConfig.class); - Flux task = appConfigUnderTest.createRefreshTask(); + final ListAppender logAppender = LoggingUtils.getLogListAppender(RefreshConfigTask.class); + Flux task = refreshTaskUnderTest.createRefreshTask(); StepVerifier.create(task).expectSubscription().verifyComplete(); @@ -140,18 +145,18 @@ public class ApplicationConfigTest { @Test public void whenPeriodicConfigRefreshNoConsul() { - appConfigUnderTest = spy(ApplicationConfig.class); - appConfigUnderTest.systemEnvironment = new Properties(); + refreshTaskUnderTest = spy(new RefreshConfigTask(appConfig)); + refreshTaskUnderTest.systemEnvironment = new Properties(); EnvProperties props = properties(); - doReturn(Mono.just(props)).when(appConfigUnderTest).getEnvironment(any()); + doReturn(Mono.just(props)).when(refreshTaskUnderTest).getEnvironment(any()); - doReturn(Mono.just(cbsClient)).when(appConfigUnderTest).createCbsClient(props); + doReturn(Mono.just(cbsClient)).when(refreshTaskUnderTest).createCbsClient(props); Flux err = Flux.error(new IOException()); doReturn(err).when(cbsClient).updates(any(), any(), any()); - final ListAppender logAppender = LoggingUtils.getLogListAppender(ApplicationConfig.class); - Flux task = appConfigUnderTest.createRefreshTask(); + final ListAppender logAppender = LoggingUtils.getLogListAppender(RefreshConfigTask.class); + Flux task = refreshTaskUnderTest.createRefreshTask(); StepVerifier // .create(task) // @@ -164,25 +169,25 @@ public class ApplicationConfigTest { @Test public void whenPeriodicConfigRefreshSuccess() throws JsonIOException, JsonSyntaxException, IOException { - appConfigUnderTest = spy(ApplicationConfig.class); - appConfigUnderTest.systemEnvironment = new Properties(); + refreshTaskUnderTest = spy(new RefreshConfigTask(appConfig)); + refreshTaskUnderTest.systemEnvironment = new Properties(); EnvProperties props = properties(); - doReturn(Mono.just(props)).when(appConfigUnderTest).getEnvironment(any()); - doReturn(Mono.just(cbsClient)).when(appConfigUnderTest).createCbsClient(props); + doReturn(Mono.just(props)).when(refreshTaskUnderTest).getEnvironment(any()); + doReturn(Mono.just(cbsClient)).when(refreshTaskUnderTest).createCbsClient(props); Flux json = Flux.just(getJsonRootObject()); doReturn(json).when(cbsClient).updates(any(), any(), any()); - Flux task = appConfigUnderTest.createRefreshTask(); + Flux task = refreshTaskUnderTest.createRefreshTask(); StepVerifier // .create(task) // .expectSubscription() // - .expectNext(appConfigUnderTest) // + .expectNext(appConfig) // .verifyComplete(); - Assertions.assertNotNull(appConfigUnderTest.getRicConfigs()); + Assertions.assertNotNull(appConfig.getRicConfigs()); } private JsonObject getJsonRootObject() throws JsonIOException, JsonSyntaxException, IOException { @@ -202,5 +207,4 @@ public class ApplicationConfigTest { " \"ric\": {"; // return new ByteArrayInputStream((string.getBytes(StandardCharsets.UTF_8))); } - } diff --git a/policy-agent/src/test/java/org/oransc/policyagent/tasks/StartupServiceTest.java b/policy-agent/src/test/java/org/oransc/policyagent/tasks/StartupServiceTest.java index e4fd6e68..47e7b4d7 100644 --- a/policy-agent/src/test/java/org/oransc/policyagent/tasks/StartupServiceTest.java +++ b/policy-agent/src/test/java/org/oransc/policyagent/tasks/StartupServiceTest.java @@ -72,6 +72,9 @@ public class StartupServiceTest { @Mock ApplicationConfig appConfigMock; + @Mock + RefreshConfigTask refreshTaskMock; + @Mock A1Client a1ClientMock; @@ -87,8 +90,8 @@ public class StartupServiceTest { Rics rics = new Rics(); PolicyTypes policyTypes = new PolicyTypes(); - StartupService serviceUnderTest = - new StartupService(appConfigMock, rics, policyTypes, a1ClientMock, new Policies(), new Services()); + StartupService serviceUnderTest = new StartupService(appConfigMock, refreshTaskMock, rics, policyTypes, + a1ClientMock, new Policies(), new Services()); serviceUnderTest.startup(); @@ -148,8 +151,8 @@ public class StartupServiceTest { Rics rics = new Rics(); PolicyTypes policyTypes = new PolicyTypes(); - StartupService serviceUnderTest = - new StartupService(appConfigMock, rics, policyTypes, a1ClientMock, new Policies(), new Services()); + StartupService serviceUnderTest = new StartupService(appConfigMock, refreshTaskMock, rics, policyTypes, + a1ClientMock, new Policies(), new Services()); serviceUnderTest.startup(); serviceUnderTest.onRicConfigUpdate(getRicConfig(FIRST_RIC_NAME, FIRST_RIC_URL, MANAGED_NODE_A), @@ -168,8 +171,8 @@ public class StartupServiceTest { doReturn(error).when(a1ClientMock).getPolicyIdentities(anyString()); Rics rics = new Rics(); - StartupService serviceUnderTest = - new StartupService(appConfigMock, rics, new PolicyTypes(), a1ClientMock, new Policies(), new Services()); + StartupService serviceUnderTest = new StartupService(appConfigMock, refreshTaskMock, rics, new PolicyTypes(), + a1ClientMock, new Policies(), new Services()); serviceUnderTest.startup(); serviceUnderTest.onRicConfigUpdate(getRicConfig(FIRST_RIC_NAME, FIRST_RIC_URL, MANAGED_NODE_A), -- 2.16.6