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;
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<ILoggingEvent> 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
refreshTaskUnderTest.start();
refreshTaskUnderTest.stop();
- assertThat(refreshTaskUnderTest.getRefreshTask().isDisposed()).isTrue();
+ assertThat(refreshTaskUnderTest.getRefreshTask().isDisposed()).as("Refresh task is disposed").isTrue();
}
@Test
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) //
}
@Test
- void whenFileExistsButJsonIsIncorrect_thenNoRicsArePutInRepository() throws Exception {
+ void whenFileExistsButJsonIsIncorrect_thenNoRicsArePutInRepositoryAndErrorIsLogged() throws Exception {
refreshTaskUnderTest = this.createTestObject(CONFIG_FILE_EXISTS);
refreshTaskUnderTest.systemEnvironment = new Properties();
doReturn(getIncorrectJson()).when(refreshTaskUnderTest).createInputStream(any());
doReturn("fileName").when(appConfig).getLocalConfigurationFilePath();
- StepVerifier.create(refreshTaskUnderTest.createRefreshTask()) //
+ final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(RefreshConfigTask.class, ERROR);
+
+ StepVerifier //
+ .create(refreshTaskUnderTest.createRefreshTask()) //
.expectSubscription() //
.expectNoEvent(Duration.ofMillis(100)) //
.thenCancel() //
// 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
when(cbsClient.get(any())).thenReturn(Mono.error(new IOException()));
final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(RefreshConfigTask.class, WARN);
- Flux<Type> 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
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<Type> task = refreshTaskUnderTest.createRefreshTask();
-
StepVerifier //
- .create(task) //
+ .create(refreshTaskUnderTest.createRefreshTask()) //
.expectSubscription() //
.expectNext(Type.CHANGED) //
.expectNext(Type.ADDED) //
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<ILoggingEvent> 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) //
ConfigParserResult configParserResult(RicConfig... rics) {
return ImmutableConfigParserResult.builder() //
.ricConfigs(Arrays.asList(rics)) //
- .dmaapConsumerConfig(new Properties()) //
- .dmaapPublisherConfig(new Properties()) //
+ .dmaapConsumerTopicUrl("") //
+ .dmaapProducerTopicUrl("") //
.controllerConfigs(new HashMap<>()) //
.build();
}
.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;
}
}
private static InputStream getIncorrectJson() {
- String string = "{" + //
- " \"config\": {" + //
- " \"ric\": {"; //
+ String string = "{}"; //
return new ByteArrayInputStream((string.getBytes(StandardCharsets.UTF_8)));
}
}