From 1bf3f8d232a17f51283de156026ef5bdcbb027c6 Mon Sep 17 00:00:00 2001
From: Solomon Ayalew <solxget@amazon.com>
Date: Fri, 1 Sep 2023 16:16:24 +0000
Subject: [PATCH] commit f5bc5b79 Author: Solomon Ayalew <solxget@amazon.com>
 Date: Thu Aug 31 2023 15:14:14 GMT-0700 (Pacific Daylight Time)

    adding unit testes
---
 .../notification-aws/build-aws/buildspec.yaml |  5 +-
 provider/notification-aws/lombok.config       |  2 +
 provider/notification-aws/pom.xml             |  4 -
 .../provider/aws/utils/AwsCognitoClient.java  |  2 +-
 .../provider/aws/security/KmsHelperTest.java  | 77 +++++++++++++++++++
 .../security/ThreadSignatureServiceTest.java  | 11 ++-
 .../aws/utils/AwsCognitoClientTest.java       | 69 +++++++++++++++++
 7 files changed, 161 insertions(+), 9 deletions(-)
 create mode 100644 provider/notification-aws/lombok.config
 create mode 100644 provider/notification-aws/src/test/java/org/opengroup/osdu/notification/provider/aws/security/KmsHelperTest.java
 create mode 100644 provider/notification-aws/src/test/java/org/opengroup/osdu/notification/provider/aws/utils/AwsCognitoClientTest.java

diff --git a/provider/notification-aws/build-aws/buildspec.yaml b/provider/notification-aws/build-aws/buildspec.yaml
index cd48f3f69..c7088fac0 100644
--- a/provider/notification-aws/build-aws/buildspec.yaml
+++ b/provider/notification-aws/build-aws/buildspec.yaml
@@ -76,8 +76,9 @@ phases:
       - if [ "$GIT_SECRETS_SCAN_RESULT" = "FAILED" ]; then echo "Secrets detected!" && exit 1; fi
 
       - echo "Building primary service assemblies..."
-      - mvn -ntp -B test install sonar:sonar -pl .,notification-core,provider/notification-aws -Ddeployment.environment=prod -Dsonar.login=${SONAR_USERNAME} -Dsonar.password=${SONAR_PASSWORD} -Dsonar.branch.name=${BRANCH_NAME} 
-
+      - mvn -ntp -B test install -pl .,notification-core,provider/notification-aws -Ddeployment.environment=prod  
+      - mvn sonar:sonar -pl .,provider/notification-aws -Dsonar.scm.provider=git -Dsonar.login=${SONAR_USERNAME} -Dsonar.password=${SONAR_PASSWORD} -Dsonar.branch.name=${BRANCH_NAME}
+       
       - echo "Building integration testing assemblies and gathering artifacts..."
       - ./testing/notification-test-aws/build-aws/prepare-dist.sh
 
diff --git a/provider/notification-aws/lombok.config b/provider/notification-aws/lombok.config
new file mode 100644
index 000000000..0c2484f84
--- /dev/null
+++ b/provider/notification-aws/lombok.config
@@ -0,0 +1,2 @@
+  config.stopBubbling = true
+  lombok.addLombokGeneratedAnnotation = true
diff --git a/provider/notification-aws/pom.xml b/provider/notification-aws/pom.xml
index accdd6256..52c3947c3 100644
--- a/provider/notification-aws/pom.xml
+++ b/provider/notification-aws/pom.xml
@@ -203,10 +203,6 @@
                         <goals>
                             <goal>prepare-agent</goal>
                         </goals>
-                        <configuration>
-                            <!-- Sets the VM argument line used when unit tests are run. -->
-                            <propertyName>jacocoArgLine</propertyName>
-	                    </configuration>
                     </execution>
                     <execution>
                         <id>report</id>
diff --git a/provider/notification-aws/src/main/java/org/opengroup/osdu/notification/provider/aws/utils/AwsCognitoClient.java b/provider/notification-aws/src/main/java/org/opengroup/osdu/notification/provider/aws/utils/AwsCognitoClient.java
index a5975d3c9..bafadd637 100644
--- a/provider/notification-aws/src/main/java/org/opengroup/osdu/notification/provider/aws/utils/AwsCognitoClient.java
+++ b/provider/notification-aws/src/main/java/org/opengroup/osdu/notification/provider/aws/utils/AwsCognitoClient.java
@@ -75,7 +75,7 @@ public class AwsCognitoClient {
         return provider;
     }
 
-    public  static AWSCognitoIdentityProvider generateCognitoClient(String region)
+    public AWSCognitoIdentityProvider generateCognitoClient(String region)
     {
         if (System.getenv("AWS_COGNITO_REGION") != null) {
             region = System.getenv("AWS_COGNITO_REGION");
diff --git a/provider/notification-aws/src/test/java/org/opengroup/osdu/notification/provider/aws/security/KmsHelperTest.java b/provider/notification-aws/src/test/java/org/opengroup/osdu/notification/provider/aws/security/KmsHelperTest.java
new file mode 100644
index 000000000..fd641b020
--- /dev/null
+++ b/provider/notification-aws/src/test/java/org/opengroup/osdu/notification/provider/aws/security/KmsHelperTest.java
@@ -0,0 +1,77 @@
+package org.opengroup.osdu.notification.provider.aws.security;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+
+import java.nio.ByteBuffer;
+
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockedConstruction;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.opengroup.osdu.core.aws.ssm.K8sLocalParameterProvider;
+import org.opengroup.osdu.core.common.model.http.DpsHeaders;
+import org.powermock.reflect.Whitebox;
+
+import com.amazonaws.SdkClientException;
+import com.amazonaws.services.kms.AWSKMS;;
+
+@RunWith(MockitoJUnitRunner.class)
+public class KmsHelperTest {
+	
+    @InjectMocks
+    private KmsHelper kmsHelper;
+    
+    @Mock
+    private DpsHeaders dpsHeaders;
+    
+    @Mock
+    private ByteBuffer ciphertext;
+    
+    private static MockedConstruction<K8sLocalParameterProvider> mockedConstruction;
+
+    
+    @BeforeClass
+    public static void setup() {
+        mockedConstruction = Mockito.mockConstruction(K8sLocalParameterProvider.class,
+                                 (mock, context) -> {
+                                     //implement initializer for mock. Set return value for object A mock methods
+                                     when(mock.getParameterAsString("notification-sqs-url")).thenReturn(
+                                         "test-sqs-url");
+                                 });
+    }
+
+    @AfterClass
+    public static void close(){
+        mockedConstruction.close();
+    }
+    
+    @Before
+    public void initTest() {
+        Whitebox.setInternalState(kmsHelper, "amazonRegion", "us-east-1");
+        Whitebox.setInternalState(kmsHelper, "kmsEndpoint", "aws.kms.endpoint");
+    }
+    
+    @Test
+    public void init_InitalizesAsExpected() {
+    	kmsHelper.init();
+    }
+
+    @Test(expected = SdkClientException.class)
+    public void encrypt_EncryptsData() {
+    	kmsHelper.init();
+    	kmsHelper.encrypt("plain text");
+    }
+    
+    @Test(expected = SdkClientException.class )
+    public void decryptThorwsFormMockedKmsClient() {
+    	kmsHelper.init();
+    	kmsHelper.decrypt(ciphertext, "dataPartitionId");
+    }
+}
diff --git a/provider/notification-aws/src/test/java/org/opengroup/osdu/notification/provider/aws/security/ThreadSignatureServiceTest.java b/provider/notification-aws/src/test/java/org/opengroup/osdu/notification/provider/aws/security/ThreadSignatureServiceTest.java
index fe7d7e5c1..dc7551e1d 100644
--- a/provider/notification-aws/src/test/java/org/opengroup/osdu/notification/provider/aws/security/ThreadSignatureServiceTest.java
+++ b/provider/notification-aws/src/test/java/org/opengroup/osdu/notification/provider/aws/security/ThreadSignatureServiceTest.java
@@ -16,6 +16,10 @@ package org.opengroup.osdu.notification.provider.aws.security;
 import static org.junit.Assert.assertNotNull;
 import static org.mockito.ArgumentMatchers.any;
 
+import java.security.NoSuchAlgorithmException;
+
+import javax.crypto.Mac;
+
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
@@ -24,8 +28,7 @@ import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.opengroup.osdu.core.common.cryptographic.SignatureServiceException;
 
-import javax.crypto.Mac;
-import java.security.NoSuchAlgorithmException;
+import com.google.gson.JsonSyntaxException;
 
 @RunWith(MockitoJUnitRunner.class)
 public class ThreadSignatureServiceTest {
@@ -106,4 +109,8 @@ public class ThreadSignatureServiceTest {
         threadSignatureService.verifyHmacSignature("invalidHmac", SECRET);
     }
 
+    @Test(expected = JsonSyntaxException.class)
+    public void verifyHmacSignature_() throws SignatureServiceException {
+        threadSignatureService.verifyHmacSignature(HMAC, SECRET);
+    }
 }
diff --git a/provider/notification-aws/src/test/java/org/opengroup/osdu/notification/provider/aws/utils/AwsCognitoClientTest.java b/provider/notification-aws/src/test/java/org/opengroup/osdu/notification/provider/aws/utils/AwsCognitoClientTest.java
new file mode 100644
index 000000000..4d167e1a1
--- /dev/null
+++ b/provider/notification-aws/src/test/java/org/opengroup/osdu/notification/provider/aws/utils/AwsCognitoClientTest.java
@@ -0,0 +1,69 @@
+package org.opengroup.osdu.notification.provider.aws.utils;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import com.amazonaws.services.cognitoidp.AWSCognitoIdentityProvider;
+import com.amazonaws.services.sqs.AmazonSQS;
+
+import io.jsonwebtoken.lang.Assert;
+
+@RunWith(MockitoJUnitRunner.class)
+public class AwsCognitoClientTest {
+
+	private AwsCognitoClient awsCognitoClient;
+
+	@Mock
+	private AmazonSQS sqsClient;
+
+	@Mock
+	private AWSCognitoIdentityProvider provider;
+
+	@Before
+	public void setUp() {
+		awsCognitoClient = new AwsCognitoClient("region", "awsCognitoClientId", "awsCognitoAuthFlow",
+				"awsCognitoAuthParamsUser", "awsCognitoAuthParamsPassword");
+	}
+
+	@Test
+	public void constuctorCreatesObject() {
+		Assert.isInstanceOf(AwsCognitoClient.class, awsCognitoClient);
+	}
+
+	@Test
+	public void getToken() {
+		awsCognitoClient.provider = provider;
+		when(provider.initiateAuth(any())).thenReturn(null);
+		String expected = "";
+		String actual = awsCognitoClient.getToken("username", "password", "tokenType");
+		assertEquals(expected, actual);
+	}
+	
+	@Test
+	public void getProvider() {
+		AWSCognitoIdentityProvider object = awsCognitoClient.getProvider();
+		assertTrue(object instanceof AWSCognitoIdentityProvider);
+	}
+	
+	@Test
+	public void generateCognitoClient() {
+		AWSCognitoIdentityProvider object = awsCognitoClient.generateCognitoClient("us-east-1");
+		assertTrue(object instanceof AWSCognitoIdentityProvider);
+	}
+	
+	//the code on production side seems useless. hence useless test here just for coverage.
+	@Test
+	public void setPassword() {
+		awsCognitoClient.provider = provider;
+		when(provider.adminSetUserPassword(any())).thenReturn(null);
+		awsCognitoClient.setPassword("username", "password", "user-pool-id");
+	}
+}
-- 
GitLab