From 3a88e8f0f4ba125d7e0f802b0ada0303fe3e8c56 Mon Sep 17 00:00:00 2001 From: PatrikBuhr Date: Mon, 28 Sep 2020 09:15:13 +0200 Subject: [PATCH] Fixed some sonar warnings Improved code coverage in new code Fixed some sonar warnings Change-Id: Idbd68bcabf9c9bcb4e6d82fe5da3463831bef998 Issue-ID: NONRTRIC-173 Signed-off-by: PatrikBuhr --- .../org/oransc/enrichment/repository/EiJob.java | 2 +- .../org/oransc/enrichment/ApplicationTest.java | 45 ++++-- .../enrichment/clients/AsyncRestClientTest.java | 161 +++++++++++++++++++++ 3 files changed, 192 insertions(+), 16 deletions(-) create mode 100644 enrichment-coordinator-service/src/test/java/org/oransc/enrichment/clients/AsyncRestClientTest.java diff --git a/enrichment-coordinator-service/src/main/java/org/oransc/enrichment/repository/EiJob.java b/enrichment-coordinator-service/src/main/java/org/oransc/enrichment/repository/EiJob.java index b36e38d6..bb880e7f 100644 --- a/enrichment-coordinator-service/src/main/java/org/oransc/enrichment/repository/EiJob.java +++ b/enrichment-coordinator-service/src/main/java/org/oransc/enrichment/repository/EiJob.java @@ -24,7 +24,7 @@ import org.immutables.gson.Gson; import org.immutables.value.Value; /** - * Represents the dynamic information about a Near-RT RIC. + * Represents the dynamic information about a EI Job */ @Value.Immutable @Gson.TypeAdapters diff --git a/enrichment-coordinator-service/src/test/java/org/oransc/enrichment/ApplicationTest.java b/enrichment-coordinator-service/src/test/java/org/oransc/enrichment/ApplicationTest.java index 4997539c..62eff121 100644 --- a/enrichment-coordinator-service/src/test/java/org/oransc/enrichment/ApplicationTest.java +++ b/enrichment-coordinator-service/src/test/java/org/oransc/enrichment/ApplicationTest.java @@ -204,7 +204,7 @@ class ApplicationTest { assertThat(this.eiJobs.size()).isEqualTo(1); String url = ConsumerConsts.API_ROOT + "/eitypes/typeId/eijobs/jobId"; restClient().delete(url).block(); - assertThat(this.eiJobs.size()).isEqualTo(0); + assertThat(this.eiJobs.size()).isZero(); ProducerSimulatorController.TestResults simulatorResults = this.producerSimulator.getTestResults(); await().untilAsserted(() -> assertThat(simulatorResults.jobsStopped.size()).isEqualTo(1)); @@ -303,10 +303,9 @@ class ApplicationTest { assertThat(this.eiTypes.size()).isEqualTo(1); EiType type = this.eiTypes.getType(EI_TYPE_ID); - assertThat(type.getProducerIds().contains("eiProducerId")).isTrue(); + assertThat(type.getProducerIds()).contains("eiProducerId"); assertThat(this.eiProducers.size()).isEqualTo(1); - assertThat(this.eiProducers.get("eiProducerId").eiTypes().iterator().next().getId().equals(EI_TYPE_ID)) - .isTrue(); + assertThat(this.eiProducers.get("eiProducerId").eiTypes().iterator().next().getId()).isEqualTo(EI_TYPE_ID); resp = restClient().putForEntity(url, body).block(); assertThat(resp.getStatusCode()).isEqualTo(HttpStatus.OK); @@ -370,27 +369,43 @@ class ApplicationTest { @Test void testDeleteEiProducer() throws Exception { - String url = ProducerConsts.API_ROOT + "/eiproducers/eiProducerId"; - String url2 = ProducerConsts.API_ROOT + "/eiproducers/eiProducerId2"; - String body = gson.toJson(producerEiRegistratioInfo(EI_TYPE_ID)); - restClient().putForEntity(url, body).block(); - restClient().putForEntity(url2, body).block(); + putEiProducerWithOneType("eiProducerId", EI_TYPE_ID); + putEiProducerWithOneType("eiProducerId2", EI_TYPE_ID); + assertThat(this.eiProducers.size()).isEqualTo(2); EiType type = this.eiTypes.getType(EI_TYPE_ID); - assertThat(type.getProducerIds().contains("eiProducerId")).isTrue(); - assertThat(type.getProducerIds().contains("eiProducerId2")).isTrue(); + assertThat(type.getProducerIds()).contains("eiProducerId"); + assertThat(type.getProducerIds()).contains("eiProducerId2"); putEiJob(EI_TYPE_ID, "jobId"); assertThat(this.eiJobs.size()).isEqualTo(1); + String url = ProducerConsts.API_ROOT + "/eiproducers/eiProducerId"; restClient().deleteForEntity(url).block(); assertThat(this.eiProducers.size()).isEqualTo(1); - assertThat(this.eiTypes.getType(EI_TYPE_ID).getProducerIds().contains("eiProducerId")).isFalse(); + assertThat(this.eiTypes.getType(EI_TYPE_ID).getProducerIds()).doesNotContain("eiProducerId"); assertThat(this.eiJobs.size()).isEqualTo(1); + String url2 = ProducerConsts.API_ROOT + "/eiproducers/eiProducerId2"; restClient().deleteForEntity(url2).block(); - assertThat(this.eiProducers.size()).isEqualTo(0); - assertThat(this.eiTypes.size()).isEqualTo(0); - assertThat(this.eiJobs.size()).isEqualTo(0); + assertThat(this.eiProducers.size()).isZero(); + assertThat(this.eiTypes.size()).isZero(); + assertThat(this.eiJobs.size()).isZero(); + } + + @Test + void testGetProducerEiType() throws JsonMappingException, JsonProcessingException, ServiceException { + putEiProducerWithOneType(EI_PRODUCER_ID, EI_TYPE_ID); + String url = ProducerConsts.API_ROOT + "/eitypes/" + EI_TYPE_ID; + ResponseEntity resp = restClient().getForEntity(url).block(); + assertThat(resp.getBody()).contains(EI_PRODUCER_ID); + } + + @Test + void testGetProducerIdentifiers() throws JsonMappingException, JsonProcessingException, ServiceException { + putEiProducerWithOneType(EI_PRODUCER_ID, EI_TYPE_ID); + String url = ProducerConsts.API_ROOT + "/eiproducers"; + ResponseEntity resp = restClient().getForEntity(url).block(); + assertThat(resp.getBody()).contains(EI_PRODUCER_ID); } ProducerEiTypeRegistrationInfo producerEiTypeRegistrationInfo(String typeId) diff --git a/enrichment-coordinator-service/src/test/java/org/oransc/enrichment/clients/AsyncRestClientTest.java b/enrichment-coordinator-service/src/test/java/org/oransc/enrichment/clients/AsyncRestClientTest.java new file mode 100644 index 00000000..e2273cfa --- /dev/null +++ b/enrichment-coordinator-service/src/test/java/org/oransc/enrichment/clients/AsyncRestClientTest.java @@ -0,0 +1,161 @@ +/*- + * ========================LICENSE_START================================= + * ONAP : ccsdk oran + * ====================================================================== + * Copyright (C) 2019-2020 Nordix Foundation. All rights reserved. + * ====================================================================== + * 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.enrichment.clients; + +import io.netty.util.internal.logging.InternalLoggerFactory; +import io.netty.util.internal.logging.JdkLoggerFactory; + +import java.io.IOException; + +import okhttp3.mockwebserver.MockResponse; +import okhttp3.mockwebserver.MockWebServer; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.web.reactive.function.client.WebClientResponseException; + +import reactor.core.publisher.Mono; +import reactor.test.StepVerifier; +import reactor.util.Loggers; + +class AsyncRestClientTest { + private static final String BASE_URL = "BaseUrl"; + private static final String REQUEST_URL = "/test"; + private static final String USERNAME = "username"; + private static final String PASSWORD = "password"; + private static final String TEST_JSON = "{\"type\":\"type1\"}"; + private static final int SUCCESS_CODE = 200; + private static final int ERROR_CODE = 500; + + private static MockWebServer mockWebServer; + + private static AsyncRestClient clientUnderTest; + + @BeforeAll + static void init() { + // skip a lot of unnecessary logs from MockWebServer + InternalLoggerFactory.setDefaultFactory(JdkLoggerFactory.INSTANCE); + Loggers.useJdkLoggers(); + mockWebServer = new MockWebServer(); + clientUnderTest = new AsyncRestClient(mockWebServer.url(BASE_URL).toString()); + } + + @AfterAll + static void tearDown() throws IOException { + mockWebServer.shutdown(); + } + + @Test + void testGetNoError() { + mockWebServer.enqueue(new MockResponse().setResponseCode(SUCCESS_CODE) // + .setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) // + .setBody(TEST_JSON)); + + Mono returnedMono = clientUnderTest.get(REQUEST_URL); + StepVerifier.create(returnedMono).expectNext(TEST_JSON).expectComplete().verify(); + } + + @Test + void testGetError() { + mockWebServer.enqueue(new MockResponse().setResponseCode(ERROR_CODE)); + + Mono returnedMono = clientUnderTest.get(REQUEST_URL); + StepVerifier.create(returnedMono) + .expectErrorMatches(throwable -> throwable instanceof WebClientResponseException).verify(); + } + + @Test + void testPutNoError() { + mockWebServer.enqueue(new MockResponse().setResponseCode(SUCCESS_CODE) // + .setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) // + .setBody(TEST_JSON)); + + Mono returnedMono = clientUnderTest.put(REQUEST_URL, TEST_JSON); + StepVerifier.create(returnedMono).expectNext(TEST_JSON).expectComplete().verify(); + } + + @Test + void testPutError() { + mockWebServer.enqueue(new MockResponse().setResponseCode(ERROR_CODE)); + + Mono returnedMono = clientUnderTest.put(REQUEST_URL, TEST_JSON); + StepVerifier.create(returnedMono) + .expectErrorMatches(throwable -> throwable instanceof WebClientResponseException).verify(); + } + + @Test + void testDeleteNoError() { + mockWebServer.enqueue(new MockResponse().setResponseCode(SUCCESS_CODE)); + + Mono returnedMono = clientUnderTest.delete(REQUEST_URL); + StepVerifier.create(returnedMono).expectNext("").expectComplete().verify(); + } + + @Test + void testDeleteError() { + mockWebServer.enqueue(new MockResponse().setResponseCode(ERROR_CODE)); + + Mono returnedMono = clientUnderTest.delete(REQUEST_URL); + StepVerifier.create(returnedMono) + .expectErrorMatches(throwable -> throwable instanceof WebClientResponseException).verify(); + } + + @Test + void testPostNoError() { + mockWebServer.enqueue(new MockResponse().setResponseCode(SUCCESS_CODE) // + .setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) // + .setBody(TEST_JSON)); + + Mono returnedMono = clientUnderTest.post(REQUEST_URL, TEST_JSON); + StepVerifier.create(returnedMono).expectNext(TEST_JSON).expectComplete().verify(); + } + + @Test + void testPostError() { + mockWebServer.enqueue(new MockResponse().setResponseCode(ERROR_CODE)); + + Mono returnedMono = clientUnderTest.post(REQUEST_URL, TEST_JSON); + StepVerifier.create(returnedMono) + .expectErrorMatches(throwable -> throwable instanceof WebClientResponseException).verify(); + } + + @Test + void testPostWithAuthHeaderNoError() { + mockWebServer.enqueue(new MockResponse().setResponseCode(SUCCESS_CODE) // + .setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) // + .setBody(TEST_JSON)); + + Mono returnedMono = clientUnderTest.postWithAuthHeader(REQUEST_URL, TEST_JSON, USERNAME, PASSWORD); + StepVerifier.create(returnedMono).expectNext(TEST_JSON).expectComplete().verify(); + } + + @Test + void testPostWithAuthHeaderError() { + mockWebServer.enqueue(new MockResponse().setResponseCode(ERROR_CODE)); + + Mono returnedMono = clientUnderTest.postWithAuthHeader(REQUEST_URL, TEST_JSON, USERNAME, PASSWORD); + StepVerifier.create(returnedMono) + .expectErrorMatches(throwable -> throwable instanceof WebClientResponseException).verify(); + } +} -- 2.16.6