Improve tests/issues found in Sonar report - A1 Oslo/NewDelhi/Montreal/London-Part3 24/138824/3
authorraviteja.karumuri <raviteja.karumuri@est.tech>
Tue, 20 Aug 2024 16:22:15 +0000 (17:22 +0100)
committerRAVITEJA KARUMURI <raviteja.karumuri@est.tech>
Thu, 22 Aug 2024 09:50:56 +0000 (09:50 +0000)
Issue-ID: CCSDK-4037
Change-Id: I44c9b2cc241999685be63bbc9f759f7dd8eee563
Signed-off-by: Raviteja Karumuri <raviteja.karumuri@est.tech>
a1-policy-management/pom.xml
a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1AdapterJsonHelper.java
a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/datastore/S3ObjectStore.java
a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ApplicationTest.java
a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/datastore/S3ObjectStoreTest.java [new file with mode: 0644]

index 05c14f1..d010a8c 100644 (file)
@@ -38,6 +38,8 @@
         <java.version.target>17</java.version.target>
         <gson.version>2.10.1</gson.version>
         <json.version>20230227</json.version>
+        <localstack.version>1.20.1</localstack.version>
+        <junit.jupiter.version>1.20.1</junit.jupiter.version>
         <formatter-maven-plugin.version>2.22.0</formatter-maven-plugin.version>
         <spotless-maven-plugin.version>2.35.0</spotless-maven-plugin.version>
         <commons-io.version>2.11.0</commons-io.version>
             <scope>runtime</scope>
         </dependency>
         <!-- TEST -->
+        <dependency>
+            <groupId>org.testcontainers</groupId>
+            <artifactId>junit-jupiter</artifactId>
+            <version>${junit.jupiter.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.testcontainers</groupId>
+            <artifactId>localstack</artifactId>
+            <version>${localstack.version}</version>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.springdoc</groupId>
             <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
index ab93ea3..66d3211 100644 (file)
@@ -92,26 +92,4 @@ class A1AdapterJsonHelper {
             return Mono.error(ex);
         }
     }
-
-    public static Mono<String> getValueFromResponse(String response, String key) {
-        return getOutput(response) //
-                .map(responseParams -> {
-                    if (!responseParams.has(key)) {
-                        return "";
-                    }
-                    return responseParams.get(key).toString();
-                });
-    }
-
-    public static Mono<String> extractPolicySchema(String inputString) {
-        try {
-            JSONObject jsonObject = new JSONObject(inputString);
-            JSONObject schemaObject = jsonObject.getJSONObject("policySchema");
-            String schemaString = schemaObject.toString();
-            return Mono.just(schemaString);
-        } catch (Exception ex) { // invalid json
-            logger.debug("Invalid json {}", ex.getMessage());
-            return Mono.error(ex);
-        }
-    }
 }
index 1c67ff7..d014ad5 100644 (file)
@@ -141,7 +141,7 @@ class S3ObjectStore implements DataStore {
         return Mono.fromFuture(future) //
                 .map(f -> s3Bucket) //
                 .doOnError(t -> logger.debug("Could not create S3 bucket: {}", t.getMessage()))
-                .onErrorResume(t -> Mono.just(s3Bucket));
+                .onErrorResume(t -> Mono.just("Not Created"));
     }
 
     @Override
index c1525ff..1de3b2e 100644 (file)
@@ -502,6 +502,7 @@ class ApplicationTest {
             info.isTransient = isTransient;
         }
         info.statusNotificationUri = statusNotificationUri;
+        info.validate();
         return gson.toJson(info);
     }
 
diff --git a/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/datastore/S3ObjectStoreTest.java b/a1-policy-management/src/test/java/org/onap/ccsdk/oran/a1policymanagementservice/datastore/S3ObjectStoreTest.java
new file mode 100644 (file)
index 0000000..be44711
--- /dev/null
@@ -0,0 +1,114 @@
+package org.onap.ccsdk.oran.a1policymanagementservice.datastore;
+
+import org.junit.jupiter.api.*;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ApplicationConfig;
+import org.reactivestreams.Publisher;
+import org.springframework.boot.test.system.CapturedOutput;
+import org.springframework.boot.test.system.OutputCaptureExtension;
+import org.testcontainers.containers.localstack.LocalStackContainer;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
+import org.testcontainers.utility.DockerImageName;
+import reactor.test.StepVerifier;
+
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+import java.util.function.Predicate;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+@Testcontainers
+@ExtendWith({MockitoExtension.class, OutputCaptureExtension.class})
+@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
+class S3ObjectStoreTest {
+
+    static ApplicationConfig appConfig;
+    private static S3ObjectStore s3ObjectStore;
+    private static final String bucketName = "s3bucket";
+
+    @Container
+    private static final LocalStackContainer localstack =
+            new LocalStackContainer(DockerImageName.parse("localstack/localstack:0.11.3"))
+                    .withServices(LocalStackContainer.Service.S3);
+
+    @BeforeAll
+    static void init() {
+        appConfig = mock(ApplicationConfig.class);
+        when(appConfig.isS3Enabled()).thenReturn(Boolean.TRUE);
+        when(appConfig.getS3EndpointOverride()).thenReturn(localstack.getEndpoint().toString());
+        when(appConfig.getS3AccessKeyId()).thenReturn(localstack.getAccessKey());
+        when(appConfig.getS3SecretAccessKey()).thenReturn(localstack.getSecretKey());
+        when(appConfig.getS3Bucket()).thenReturn(bucketName);
+        s3ObjectStore = new S3ObjectStore(appConfig, "location");
+    }
+    @Test
+    @Order(1)
+    void testGetS3AsynchClient() {
+        assertNotNull(s3ObjectStore);
+    }
+
+    @Test
+    @Order(2)
+    void testCreateAndDeleteS3BucketSuccess(CapturedOutput capturedOutput) {
+
+        testSuccess(s3ObjectStore.createDataStore(), actual -> actual.equals(bucketName));
+        assertFalse(capturedOutput.getOut().contains("Could not create S3 bucket:"));
+
+        testSuccess(s3ObjectStore.deleteBucket(), actual -> actual.equals(bucketName));
+    }
+
+    @Test
+    @Order(3)
+    void testWriteAndReadAndDeleteObjectSuccess(CapturedOutput capturedOutput) {
+
+        testSuccess(s3ObjectStore.createDataStore(), actual -> actual.equals(bucketName));
+        byte[] fileData = "testData".getBytes(StandardCharsets.UTF_8);
+        new String(fileData);
+        testSuccess(s3ObjectStore.writeObject("test", fileData),
+                actual -> Arrays.equals(actual, fileData));
+        assertFalse(capturedOutput.getOut().contains("Failed to store object"));
+        testSuccess(s3ObjectStore.readObject("test"),
+                actual -> Arrays.equals(actual, fileData));
+        testSuccess(s3ObjectStore.deleteAllObjects(), actual -> actual.equals("OK"));
+    }
+
+    @Test
+    @Order(4)
+    void testListObjectsSuccess() {
+
+        s3ObjectStore.createDataStore().block();
+        String objectName = "test";
+        byte[] fileData = "testData".getBytes(StandardCharsets.UTF_8);
+        testSuccess(s3ObjectStore.writeObject(objectName, fileData),
+                actual -> Arrays.equals(actual, fileData));
+        testSuccess(s3ObjectStore.listObjects(""), actual -> actual.equals(objectName));
+    }
+
+    @Test
+    @Order(5)
+    void testCreateAndDeleteS3BucketError(CapturedOutput capturedOutput) {
+
+        when(appConfig.getS3Bucket()).thenReturn("S3Bucket");
+
+        testFailure(s3ObjectStore.createDataStore(), actual -> actual.equals("Not Created"));
+
+        testFailure(s3ObjectStore.deleteBucket(), actual -> actual.equals("NOK"));
+        assertTrue(capturedOutput.getOut().contains("Could not delete bucket:"));
+    }
+
+    <T> void testSuccess(Publisher<T> publisher, Predicate<T> equalityCheck) {
+        StepVerifier.create(publisher)
+                .expectNextMatches(equalityCheck)
+                .verifyComplete();
+    }
+
+    <T> void testFailure(Publisher<T> publisher, Predicate<T> equalityCheck) {
+        StepVerifier.create(publisher)
+                .expectNextMatches(equalityCheck)
+                .verifyComplete();
+    }
+}