X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=policy-agent%2Fsrc%2Ftest%2Fjava%2Forg%2Foransc%2Fpolicyagent%2Ftasks%2FRefreshConfigTaskTest.java;h=2b1d2a7addf55de32568ab06484013ffc225ddae;hb=d9df6244e4ba89b71cba364f156ca529c3703faa;hp=4823a44823fe4f157ac8d1715b0855061ec362c3;hpb=2310d1c6a458bd12b2d1ff805f1bd12dcd536cfa;p=nonrtric.git diff --git a/policy-agent/src/test/java/org/oransc/policyagent/tasks/RefreshConfigTaskTest.java b/policy-agent/src/test/java/org/oransc/policyagent/tasks/RefreshConfigTaskTest.java index 4823a448..2b1d2a7a 100644 --- a/policy-agent/src/test/java/org/oransc/policyagent/tasks/RefreshConfigTaskTest.java +++ b/policy-agent/src/test/java/org/oransc/policyagent/tasks/RefreshConfigTaskTest.java @@ -23,6 +23,7 @@ package org.oransc.policyagent.tasks; import static ch.qos.logback.classic.Level.ERROR; import static ch.qos.logback.classic.Level.WARN; import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; @@ -138,21 +139,22 @@ class RefreshConfigTaskTest { refreshTaskUnderTest.start(); - assertThat(logAppender.list.toString().contains("Configuration refresh terminated")).isTrue(); + assertThat(logAppender.list.get(0).getFormattedMessage()).isEqualTo("Configuration refresh terminated"); } @Test void startWithStubbedRefreshReturnError_thenErrorAndTerminationLogged() { refreshTaskUnderTest = this.createTestObject(CONFIG_FILE_DOES_NOT_EXIST, null, null, false); - doReturn(Flux.error(new Exception("Error"))).when(refreshTaskUnderTest).createRefreshTask(); + String errorMessage = "Error"; + doReturn(Flux.error(new Exception(errorMessage))).when(refreshTaskUnderTest).createRefreshTask(); final ListAppender logAppender = LoggingUtils.getLogListAppender(RefreshConfigTask.class, ERROR); refreshTaskUnderTest.start(); ILoggingEvent event = logAppender.list.get(0); - assertThat(event.getLevel()).isEqualTo(ERROR); - assertThat(event.toString().contains("Configuration refresh terminated due to exception")).isTrue(); + assertThat(event.getFormattedMessage()) + .isEqualTo("Configuration refresh terminated due to exception java.lang.Exception: " + errorMessage); } @Test @@ -163,7 +165,7 @@ class RefreshConfigTaskTest { refreshTaskUnderTest.start(); refreshTaskUnderTest.stop(); - assertThat(refreshTaskUnderTest.getRefreshTask().isDisposed()).isTrue(); + assertThat(refreshTaskUnderTest.getRefreshTask().isDisposed()).as("Refresh task is disposed").isTrue(); } @Test @@ -174,7 +176,8 @@ class RefreshConfigTaskTest { doReturn(getCorrectJson()).when(refreshTaskUnderTest).createInputStream(any()); doReturn("fileName").when(appConfig).getLocalConfigurationFilePath(); - StepVerifier.create(refreshTaskUnderTest.createRefreshTask()) // + StepVerifier // + .create(refreshTaskUnderTest.createRefreshTask()) // .expectSubscription() // .expectNext(Type.ADDED) // .expectNext(Type.ADDED) // @@ -193,7 +196,7 @@ class RefreshConfigTaskTest { } @Test - void whenFileExistsButJsonIsIncorrect_thenNoRicsArePutInRepository() throws Exception { + void whenFileExistsButJsonIsIncorrect_thenNoRicsArePutInRepositoryAndErrorIsLogged() throws Exception { refreshTaskUnderTest = this.createTestObject(CONFIG_FILE_EXISTS); refreshTaskUnderTest.systemEnvironment = new Properties(); @@ -201,7 +204,10 @@ class RefreshConfigTaskTest { doReturn(getIncorrectJson()).when(refreshTaskUnderTest).createInputStream(any()); doReturn("fileName").when(appConfig).getLocalConfigurationFilePath(); - StepVerifier.create(refreshTaskUnderTest.createRefreshTask()) // + final ListAppender logAppender = LoggingUtils.getLogListAppender(RefreshConfigTask.class, ERROR); + + StepVerifier // + .create(refreshTaskUnderTest.createRefreshTask()) // .expectSubscription() // .expectNoEvent(Duration.ofMillis(100)) // .thenCancel() // @@ -210,6 +216,10 @@ class RefreshConfigTaskTest { // Then verify(refreshTaskUnderTest).loadConfigurationFromFile(); assertThat(appConfig.getRicConfigs().size()).isEqualTo(0); + + await().until(() -> logAppender.list.size() > 0); + assertThat(logAppender.list.get(0).getFormattedMessage()) + .startsWith("Local configuration file not loaded: fileName, "); } @Test @@ -224,18 +234,17 @@ class RefreshConfigTaskTest { when(cbsClient.get(any())).thenReturn(Mono.error(new IOException())); final ListAppender logAppender = LoggingUtils.getLogListAppender(RefreshConfigTask.class, WARN); - Flux task = refreshTaskUnderTest.createRefreshTask(); StepVerifier // - .create(task) // + .create(refreshTaskUnderTest.createRefreshTask()) // .expectSubscription() // .expectNoEvent(Duration.ofMillis(1000)) // .thenCancel() // .verify(); - assertThat( - logAppender.list.toString().contains("Could not refresh application configuration. java.io.IOException")) - .isTrue(); + await().until(() -> logAppender.list.size() > 0); + assertThat(logAppender.list.get(0).getFormattedMessage()) + .isEqualTo("Could not refresh application configuration. java.io.IOException"); } @Test @@ -259,16 +268,14 @@ class RefreshConfigTaskTest { doReturn(Mono.just(props)).when(refreshTaskUnderTest).getEnvironment(any()); doReturn(Mono.just(cbsClient)).when(refreshTaskUnderTest).createCbsClient(props); - JsonObject configAsJson = getJsonRootObject(); + JsonObject configAsJson = getJsonRootObject(true); String newBaseUrl = "newBaseUrl"; modifyTheRicConfiguration(configAsJson, newBaseUrl); when(cbsClient.get(any())).thenReturn(Mono.just(configAsJson)); doNothing().when(refreshTaskUnderTest).runRicSynchronization(any(Ric.class)); - Flux task = refreshTaskUnderTest.createRefreshTask(); - StepVerifier // - .create(task) // + .create(refreshTaskUnderTest.createRefreshTask()) // .expectSubscription() // .expectNext(Type.CHANGED) // .expectNext(Type.ADDED) // @@ -288,6 +295,36 @@ class RefreshConfigTaskTest { assertThat(policies.size()).isEqualTo(0); } + @Test + void whenPeriodicConfigRefreshInvalidJson_thenErrorIsLogged() throws Exception { + Rics rics = new Rics(); + Policies policies = new Policies(); + refreshTaskUnderTest = this.createTestObject(CONFIG_FILE_DOES_NOT_EXIST, rics, policies, false); + refreshTaskUnderTest.systemEnvironment = new Properties(); + + appConfig.setConfiguration(configParserResult()); + + EnvProperties props = properties(); + doReturn(Mono.just(props)).when(refreshTaskUnderTest).getEnvironment(any()); + doReturn(Mono.just(cbsClient)).when(refreshTaskUnderTest).createCbsClient(props); + + JsonObject configAsJson = getJsonRootObject(false); + when(cbsClient.get(any())).thenReturn(Mono.just(configAsJson)); + + final ListAppender logAppender = LoggingUtils.getLogListAppender(RefreshConfigTask.class, ERROR); + + StepVerifier // + .create(refreshTaskUnderTest.createRefreshTask()) // + .expectSubscription() // + .expectNoEvent(Duration.ofMillis(1000)) // + .thenCancel() // + .verify(); + + await().until(() -> logAppender.list.size() > 0); + assertThat(logAppender.list.get(0).getFormattedMessage()) + .startsWith("Could not parse configuration org.oransc.policyagent.exceptions.ServiceException: "); + } + private RicConfig getRicConfig(String name) { RicConfig ricConfig = ImmutableRicConfig.builder() // .name(name) // @@ -330,8 +367,9 @@ class RefreshConfigTaskTest { .addProperty("baseUrl", newBaseUrl); } - private JsonObject getJsonRootObject() throws JsonIOException, JsonSyntaxException, IOException { - JsonObject rootObject = JsonParser.parseReader(new InputStreamReader(getCorrectJson())).getAsJsonObject(); + private JsonObject getJsonRootObject(boolean valid) throws JsonIOException, JsonSyntaxException, IOException { + JsonObject rootObject = JsonParser + .parseReader(new InputStreamReader(valid ? getCorrectJson() : getIncorrectJson())).getAsJsonObject(); return rootObject; } @@ -342,9 +380,7 @@ class RefreshConfigTaskTest { } private static InputStream getIncorrectJson() { - String string = "{" + // - " \"config\": {" + // - " \"ric\": {"; // + String string = "{}"; // return new ByteArrayInputStream((string.getBytes(StandardCharsets.UTF_8))); } }