diff --git a/provider/notification-azure/pom.xml b/provider/notification-azure/pom.xml
index a3f38f44715e805d9e1a0567dea19be48a565ece..1fb7c1787c85187c79dd87aeac92b55f7397e721 100644
--- a/provider/notification-azure/pom.xml
+++ b/provider/notification-azure/pom.xml
@@ -41,65 +41,47 @@
0.9.0.RELEASE
3.3.0.RELEASE
+
com.microsoft.azure
azure-active-directory-spring-boot-starter
${azure.version}
+
+
+ org.opengroup.osdu
+ os-core-common
+ 0.3.6
+
+
org.springframework.boot
spring-boot-starter-security
- org.springframework.boot
- spring-boot-starter-logging
+ ch.qos.logback
+ logback-classic
+
+
+ org.apache.logging.log4j
+ log4j-to-slf4j
-
- org.springframework.security.oauth
- spring-security-oauth2
- 2.3.6.RELEASE
-
-
- org.springframework.security
- spring-security-jwt
- 1.0.10.RELEASE
-
-
- org.springframework.security
- spring-security-oauth2-client
-
-
- org.springframework.security
- spring-security-oauth2-jose
-
-
- org.springframework.boot
- spring-boot-configuration-processor
- true
-
-
- com.microsoft.azure
- applicationinsights-logging-logback
- [2.0,)
-
-
- org.opengroup.osdu
- os-core-common
- 0.3.4
-
+
org.opengroup.osdu
core-lib-azure
- 0.0.17
+ 0.0.22
+
com.auth0
java-jwt
3.8.1
+
org.opengroup.osdu
notification-core
@@ -116,6 +98,7 @@
reactor-netty
${reactor.netty.version}
+
io.projectreactor
reactor-core
@@ -135,21 +118,61 @@
2.1.6.RELEASE
+
- org.mockito
- mockito-core
- 3.0.0
+ org.junit.jupiter
+ junit-jupiter
+ 5.6.0
test
+
- com.auth0
- jwks-rsa
- 0.11.0
+ org.mockito
+ mockito-junit-jupiter
+ 2.23.0
+ test
+
+
+ ${gitlab-server}
+ https://community.opengroup.org/api/v4/groups/17/-/packages/maven
+
+
+
+
+
+ ${gitlab-server}
+ https://community.opengroup.org/api/v4/projects/44/packages/maven
+
+
+ ${gitlab-server}
+ https://community.opengroup.org/api/v4/projects/44/packages/maven
+
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+ 0.8.2
+
+
+
+ prepare-agent
+
+
+
+ report
+ prepare-package
+
+ report
+
+
+
+
org.springframework.boot
spring-boot-maven-plugin
@@ -178,4 +201,20 @@
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+
+
+
+
+ report
+
+
+
+
+
+
\ No newline at end of file
diff --git a/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/pubsub/EventGridHandshakeHandler.java b/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/pubsub/EventGridHandshakeHandler.java
index 686636d81d51e00bc69895f8a105063a7423bdbe..06a980be814fcb730916a26670d67e79c0d3943e 100644
--- a/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/pubsub/EventGridHandshakeHandler.java
+++ b/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/pubsub/EventGridHandshakeHandler.java
@@ -15,6 +15,7 @@
package org.opengroup.osdu.notification.provider.azure.pubsub;
import com.google.gson.JsonObject;
+import org.opengroup.osdu.core.common.logging.JaxRsDpsLog;
import org.opengroup.osdu.core.common.model.http.AppException;
import org.opengroup.osdu.notification.provider.interfaces.IPubsubHandshakeHandler;
import org.springframework.beans.factory.annotation.Autowired;
@@ -24,9 +25,16 @@ import org.springframework.stereotype.Component;
@Component
public class EventGridHandshakeHandler implements IPubsubHandshakeHandler {
- @Autowired
private EventGridRequestBodyExtractor eventGridRequestBodyExtractor;
+ private JaxRsDpsLog logger;
+
+ @Autowired
+ EventGridHandshakeHandler(JaxRsDpsLog logger, EventGridRequestBodyExtractor eventGridRequestBodyExtractor) {
+ this.logger = logger;
+ this.eventGridRequestBodyExtractor = eventGridRequestBodyExtractor;
+ }
+
/**
* Extract Handshake response string form Handshake request.
* TODO: Check if there is a need to verify subscription name with
@@ -35,19 +43,10 @@ public class EventGridHandshakeHandler implements IPubsubHandshakeHandler {
*/
@Override
public String getHandshakeResponse() {
- String response;
-
- try {
- String validationCode = this.eventGridRequestBodyExtractor.getValidationCodeForHandshake();
- JsonObject jsonResponse = new JsonObject();
- jsonResponse.addProperty("ValidationResponse", validationCode);
-
- response = jsonResponse.toString();
- } catch (Exception exception) {
- throw new AppException(HttpStatus.BAD_REQUEST.value(), "Request payload parsing error",
- "Unable to parse request payload.", exception);
- }
+ String validationCode = this.eventGridRequestBodyExtractor.getValidationCodeForHandshake();
+ JsonObject jsonResponse = new JsonObject();
+ jsonResponse.addProperty("ValidationResponse", validationCode);
- return response;
+ return jsonResponse.toString();
}
-}
\ No newline at end of file
+}
diff --git a/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/pubsub/EventGridRequestBodyExtractor.java b/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/pubsub/EventGridRequestBodyExtractor.java
index 0d1a403365483e8603c43085faf2cf63318c5215..c5fcedb7f6693be986329cbfd3527cdc68a57fc2 100644
--- a/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/pubsub/EventGridRequestBodyExtractor.java
+++ b/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/pubsub/EventGridRequestBodyExtractor.java
@@ -49,11 +49,11 @@ public class EventGridRequestBodyExtractor implements IPubsubRequestBodyExtracto
private static final Gson GSON = new Gson();
private static final ObjectMapper objectMapper = new ObjectMapper();
- private JsonObject root = null;
- private HttpServletRequest httpServletRequest;
- private JaxRsDpsLog log;
+ private final JsonObject root = null;
+ private final HttpServletRequest httpServletRequest;
+ private final JaxRsDpsLog logger;
- private NotificationRequest notificationRequest;
+ private final NotificationRequest notificationRequest;
private NotificationData notificationData;
private HandshakeRequestData handshakeRequestData;
private boolean isHandshakeRequest;
@@ -61,7 +61,7 @@ public class EventGridRequestBodyExtractor implements IPubsubRequestBodyExtracto
@Autowired
public EventGridRequestBodyExtractor(HttpServletRequest httpServletRequest, JaxRsDpsLog log) {
this.httpServletRequest = httpServletRequest;
- this.log = log;
+ this.logger = log;
this.notificationRequest = extractNotificationRequestFromHttpRequest();
}
@@ -73,6 +73,7 @@ public class EventGridRequestBodyExtractor implements IPubsubRequestBodyExtracto
*/
public Map extractAttributesFromRequestBody() {
if(isHandshakeRequest) {
+ logger.error("Invalid Event Grid Message. Is a handshake request");
return null;
}
return this.notificationData.getAttributes();
@@ -86,6 +87,7 @@ public class EventGridRequestBodyExtractor implements IPubsubRequestBodyExtracto
*/
public String extractDataFromRequestBody() {
if(isHandshakeRequest) {
+ logger.error("Invalid Event Grid Message. Is a handshake request");
return null;
}
return new String(Base64.getDecoder().decode(notificationData.getData()));
@@ -100,6 +102,7 @@ public class EventGridRequestBodyExtractor implements IPubsubRequestBodyExtracto
public String extractNotificationIdFromRequestBody() {
String subscriptionId = httpServletRequest.getHeader(SUBSCRIPTION_ID);
if (Strings.isNullOrEmpty(subscriptionId)) {
+ logger.error("Invalid Event Grid Message. Subscription Id is null or empty");
throw new AppException(HttpStatus.BAD_REQUEST.value(), "Invalid Event Grid Message", "Subscription ID not found");
}
return subscriptionId;
@@ -123,6 +126,7 @@ public class EventGridRequestBodyExtractor implements IPubsubRequestBodyExtracto
*/
public String getValidationCodeForHandshake() {
if(!isHandshakeRequest) {
+ logger.error("Invalid Event Grid Message. Is not a handshake request");
return null;
}
return this.handshakeRequestData.getValidationCode();
@@ -154,6 +158,7 @@ public class EventGridRequestBodyExtractor implements IPubsubRequestBodyExtracto
extractNotificationData(notificationRequest);
}
} catch (Exception e) {
+ logger.error("Invalid Event Grid Message. %s", e.getMessage());
throw new AppException(HttpStatus.BAD_REQUEST.value(), "Request payload parsing error",
"Unable to parse request payload.", "Request contents are null or empty");
}
diff --git a/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/util/AppProperties.java b/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/util/AppProperties.java
index 59736e877ba4cb9ebf5ac417f613e930eca92a39..32f048a4696abb2945f66091a1505a5e259eda2a 100644
--- a/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/util/AppProperties.java
+++ b/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/util/AppProperties.java
@@ -17,6 +17,7 @@ package org.opengroup.osdu.notification.provider.azure.util;
import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.models.KeyVaultSecret;
+import org.opengroup.osdu.core.common.logging.JaxRsDpsLog;
import org.opengroup.osdu.notification.provider.interfaces.IAppProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -49,6 +50,9 @@ public class AppProperties implements IAppProperties {
@Autowired
private SecretClient secretClient;
+ @Autowired
+ private JaxRsDpsLog logger;
+
private String authURL;
private String authClientID;
@@ -102,11 +106,13 @@ public class AppProperties implements IAppProperties {
private String getKeyVaultSecret(SecretClient kv, String secretName) {
KeyVaultSecret secret = kv.getSecret(secretName);
if (secret == null) {
+ logger.error(String.format("Secret unexpectedly missing from KeyVault response for secret with name %s", secretName));
throw new IllegalStateException(String.format("No secret found with name %s", secretName));
}
String secretValue = secret.getValue();
if (secretValue == null) {
+ logger.error(String.format("Secret unexpectedly missing from KeyVault response for secret with name %s", secretName));
throw new IllegalStateException(String.format(
"Secret unexpectedly missing from KeyVault response for secret with name %s", secretName));
}
diff --git a/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/util/AzureCosmosProperties.java b/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/util/AzureCosmosProperties.java
index 22bb7ee411d5076e86a9ec22d1f530f37870a2ae..bc5ef75b70ab9ac7f83c72b4c87ce1fcd5f36771 100644
--- a/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/util/AzureCosmosProperties.java
+++ b/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/util/AzureCosmosProperties.java
@@ -4,11 +4,11 @@ import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.models.KeyVaultSecret;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
-import org.springframework.stereotype.Component;
+import org.springframework.context.annotation.Configuration;
import javax.inject.Named;
-@Component
+@Configuration
public class AzureCosmosProperties {
@Value("${tenantinfo.container.name}")
@@ -42,7 +42,7 @@ public class AzureCosmosProperties {
return cosmosDBName;
}
- public String getKeyVaultSecret(SecretClient kv, String secretName) {
+ private String getKeyVaultSecret(SecretClient kv, String secretName) {
KeyVaultSecret secret = kv.getSecret(secretName);
if (secret == null) {
throw new IllegalStateException(String.format("No secret found with name %s", secretName));
diff --git a/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/util/AzureServiceAccountValidatorImpl.java b/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/util/AzureServiceAccountValidatorImpl.java
index dc1a345185f2f6c20384644f1772ff43ef0743bd..e68b499c7ce7555043e437cf367d7238fb0dda13 100644
--- a/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/util/AzureServiceAccountValidatorImpl.java
+++ b/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/util/AzureServiceAccountValidatorImpl.java
@@ -14,11 +14,8 @@
package org.opengroup.osdu.notification.provider.azure.util;
-import com.auth0.jwt.JWT;
-import com.auth0.jwt.interfaces.DecodedJWT;
import org.opengroup.osdu.notification.provider.interfaces.IServiceAccountValidator;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
@Service
diff --git a/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/util/GoogleServiceAccountImpl.java b/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/util/GoogleServiceAccountImpl.java
index 9b0adf6c0906062a7bacad1c5e516def27b60ea7..abf78fedad1433d7694cdcc4918c8a370d393bb2 100644
--- a/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/util/GoogleServiceAccountImpl.java
+++ b/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/util/GoogleServiceAccountImpl.java
@@ -27,6 +27,7 @@ public class GoogleServiceAccountImpl implements IGoogleServiceAccount {
@Override
public String getIdToken(String keyString, String audience) {
// TODO : Check if it is to be supported
+
throw new AuthenticationNotSupportedException();
}
}
diff --git a/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/util/ServiceAccountJwtAzureClientImpl.java b/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/util/ServiceAccountJwtAzureClientImpl.java
index 99f7abf6ed4afef82994170d89650024187f3624..90720d7e68fd367fc51d780c2c7647aca1def9f4 100644
--- a/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/util/ServiceAccountJwtAzureClientImpl.java
+++ b/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/util/ServiceAccountJwtAzureClientImpl.java
@@ -44,8 +44,7 @@ public class ServiceAccountJwtAzureClientImpl implements IServiceAccountJwtClien
private IJwtCache tenantJwtCache;
public String getIdToken(String tenantName) {
- // TODO : Add logs.
- TenantInfo tenant = tenantInfoServiceProvider.getTenantInfo(tenantName);
+ TenantInfo tenant = this.tenantInfoServiceProvider.getTenantInfo(tenantName);
if (tenant == null) {
throw new AppException(HttpStatus.SC_BAD_REQUEST, "Invalid tenant Name", "Invalid tenant Name from azure");
}
@@ -55,7 +54,7 @@ public class ServiceAccountJwtAzureClientImpl implements IServiceAccountJwtClien
try {
// TODO : Refactor to move ID token form Common.Core.model.search to Common.core
- IdToken cachedToken = (IdToken) tenantJwtCache.get(tenant.getName());
+ IdToken cachedToken = (IdToken) this.tenantJwtCache.get(tenant.getName());
if ((cachedToken != null) && !IdToken.refreshToken(cachedToken)) {
return "Bearer " + cachedToken.getTokenValue();
@@ -66,12 +65,8 @@ public class ServiceAccountJwtAzureClientImpl implements IServiceAccountJwtClien
ACCESS_TOKEN = getAccessToken(service);
IdToken idToken = IdToken.builder().tokenValue(ACCESS_TOKEN).expirationTimeMillis(JWT.decode(ACCESS_TOKEN).getExpiresAt().getTime()).build();
- tenantJwtCache.put(tenant.getName(), idToken);
- } catch (AppException e) {
- throw e;
- } catch (Exception e) {
- throw new AppException(HttpStatus.SC_INTERNAL_SERVER_ERROR, "Persistence error", "Error generating token", e);
- } finally {
+ this.tenantJwtCache.put(tenant.getName(), idToken);
+ } finally {
if(service != null) {
service.shutdown();
}
diff --git a/provider/notification-azure/src/main/resources/application-local.properties b/provider/notification-azure/src/main/resources/application-local.properties
index dede88f265be44d0290bac42caaa0229893c4df1..fb39e6ddf74882fef0613994f0289b100130a0ee 100644
--- a/provider/notification-azure/src/main/resources/application-local.properties
+++ b/provider/notification-azure/src/main/resources/application-local.properties
@@ -15,6 +15,7 @@
# Log settings
logging.level.org.springframework.web=DEBUG
spring.profiles.active=local
+LOG_PREFIX=notification
# Service settings
app.entitlements=${entitlements_service_endpoint}
@@ -37,3 +38,11 @@ tenantInfo.container.name=TenantInfo
# Azure KeyVault configuration
azure.keyvault.url=${KEYVAULT_URI}
+
+# Application name
+spring.application.name=notification-azure
+
+# Logging configuration
+logging.transaction.enabled=true
+logging.slf4jlogger.enabled=true
+logging.mdccontext.enabled=true
\ No newline at end of file
diff --git a/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/provider/azure/EventGridHandshakeHandlerTest.java b/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/provider/azure/EventGridHandshakeHandlerTest.java
index b58451b966a0f192f13111ad3728a3ed606c2a28..f16dc0061526f54938c74f8549754686e2ececb4 100644
--- a/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/provider/azure/EventGridHandshakeHandlerTest.java
+++ b/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/provider/azure/EventGridHandshakeHandlerTest.java
@@ -22,6 +22,7 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.junit.MockitoJUnitRunner;
+import org.opengroup.osdu.core.common.logging.JaxRsDpsLog;
import org.opengroup.osdu.core.common.model.http.AppException;
import org.opengroup.osdu.notification.provider.azure.pubsub.EventGridHandshakeHandler;
import org.opengroup.osdu.notification.provider.azure.pubsub.EventGridRequestBodyExtractor;
@@ -35,14 +36,17 @@ import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class EventGridHandshakeHandlerTest {
@Mock
- EventGridRequestBodyExtractor eventGridRequestBodyExtractor;
+ private EventGridRequestBodyExtractor eventGridRequestBodyExtractor;
+
+ @Mock
+ private JaxRsDpsLog logger;
@InjectMocks
@Spy
private EventGridHandshakeHandler sut;
@Test
- public void should_returnValidResponse_getHandshakeResponse() throws IOException {
+ public void should_returnValidResponse_getHandshakeResponse() {
// Set up
when(sut.getHandshakeResponse()).thenReturn("testValidationCode");
String expectedResponse = "{\"ValidationResponse\":\"testValidationCode\"}";
@@ -55,9 +59,9 @@ public class EventGridHandshakeHandlerTest {
}
@Test
- public void should_throw_getHandshakeResponse() throws IOException {
+ public void should_throw_getHandshakeResponse() {
// Set up
- when(sut.getHandshakeResponse())
+ when(eventGridRequestBodyExtractor.getValidationCodeForHandshake())
.thenThrow(new AppException(HttpStatus.BAD_REQUEST.value(), "Request payload parsing error", "" ));
try{
// Act
@@ -67,7 +71,6 @@ public class EventGridHandshakeHandlerTest {
fail("Should Throw Exception");
} catch (AppException appException){
Assert.assertEquals(HttpStatus.BAD_REQUEST.value(), appException.getError().getCode());
- Assert.assertEquals("Unable to parse request payload.", appException.getError().getMessage());
} catch (Exception exception) {
fail("Should Throw AppException");
}
diff --git a/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/util/AppPropertiesTests.java b/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/util/AppPropertiesTests.java
new file mode 100644
index 0000000000000000000000000000000000000000..da92ed9550a5a1d6e2df79bac29884a2478958dc
--- /dev/null
+++ b/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/util/AppPropertiesTests.java
@@ -0,0 +1,118 @@
+// Copyright © Microsoft Corporation
+//
+// 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.
+
+package org.opengroup.osdu.notification.util;
+
+import com.azure.security.keyvault.secrets.SecretClient;
+import com.azure.security.keyvault.secrets.models.KeyVaultSecret;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.opengroup.osdu.core.common.logging.JaxRsDpsLog;
+import org.opengroup.osdu.notification.provider.azure.util.AppProperties;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.MockitoAnnotations.initMocks;
+
+public class AppPropertiesTests {
+
+ @Mock
+ private SecretClient kv;
+
+ @Mock
+ private KeyVaultSecret secret;
+
+ @Mock
+ private JaxRsDpsLog logger;
+
+ @InjectMocks
+ private AppProperties sut;
+
+ @Before
+ public void init() {
+ initMocks(this);
+ }
+
+ @Test
+ public void should_throwWhenSecretNameIsNull_getKeyVaultSecret() {
+ // Set-Up
+ doReturn(null).when(kv).getSecret("secret-name");
+
+ // Act
+ IllegalStateException exception = assertThrows(IllegalStateException.class, () ->{
+ sut.getAuthClientSecret();
+ });
+
+ // Assert
+ assertEquals("No secret found with name secret-name", exception.getMessage());
+ }
+
+ @Test
+ public void should_throwWhenSecretIsMissing_getKeyVaultSecret() {
+ // Set-Up
+ doReturn(null).when(secret).getValue();
+ doReturn(secret).when(kv).getSecret("secret-name");
+
+ // Act
+ IllegalStateException exception = assertThrows(IllegalStateException.class, () ->{
+ sut.getAuthClientSecret();
+ });
+
+ // Assert
+ assertEquals("Secret unexpectedly missing from KeyVault response for secret with name secret-name", exception.getMessage());
+ }
+
+ @Test
+ public void should_returnRightClientAuth_getCosmosKey() {
+ // Set-Up
+ doReturn("client-auth-secret").when(secret).getValue();
+ doReturn(secret).when(kv).getSecret("app-dev-sp-password");
+
+ // Act
+ String secretValue = sut.getAuthClientSecret();
+
+ // Assert
+ assertEquals( "client-auth-secret", secretValue);
+ }
+
+ @Test
+ public void should_returnRightCosmosSecret_getCosmosKey() {
+ // Set-Up
+ doReturn("cosmos-endpoint-secret").when(secret).getValue();
+ doReturn(secret).when(kv).getSecret("app-dev-sp-username");
+
+ // Act
+ String secretValue = sut.getAuthClientID();
+
+ // Assert
+ assertEquals( "cosmos-endpoint-secret", secretValue);
+ }
+
+ @Test
+ public void should_returnRightAuthURL_getCosmosKey() {
+ // Set-Up
+ doReturn("cosmos-endpoint-secret").when(secret).getValue();
+ doReturn(secret).when(kv).getSecret("app-dev-sp-tenant-id");
+
+ // Act
+ String secretValue = sut.getAuthURL();
+
+ // Assert
+ assertEquals( "cosmos-endpoint-secret", secretValue);
+ }
+
+}
diff --git a/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/util/AzureCosmosPropertiesTest.java b/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/util/AzureCosmosPropertiesTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..4c05c9aa7c5386d362b3dbdf91e1fb3c3f62cab0
--- /dev/null
+++ b/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/util/AzureCosmosPropertiesTest.java
@@ -0,0 +1,89 @@
+// Copyright © Microsoft Corporation
+//
+// 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.
+
+package org.opengroup.osdu.notification.util;
+
+import com.azure.security.keyvault.secrets.SecretClient;
+import com.azure.security.keyvault.secrets.models.KeyVaultSecret;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.opengroup.osdu.core.common.logging.JaxRsDpsLog;
+import org.opengroup.osdu.notification.provider.azure.util.AzureCosmosProperties;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.MockitoAnnotations.initMocks;
+
+public class AzureCosmosPropertiesTest {
+
+ @InjectMocks
+ private AzureCosmosProperties sut;
+
+ @Mock
+ private SecretClient kv;
+
+ @Mock
+ private KeyVaultSecret secret;
+
+ @Mock
+ private JaxRsDpsLog logger;
+
+ @Before
+ public void init() {
+ initMocks(this);
+ }
+
+ @Test
+ public void should_throwWhenSecretNameIsNull_getKeyVaultSecret() {
+ // Set-Up
+ doReturn(null).when(kv).getSecret("secret-name");
+
+ // Act
+ IllegalStateException exception = assertThrows(IllegalStateException.class, () ->{
+ sut.cosmosKey(kv);
+ });
+
+ // Assert
+ assertEquals("No secret found with name cosmos-primary-key", exception.getMessage());
+ }
+
+ @Test
+ public void should_returnRightCosmosKey_getCosmosKey() {
+ // Set-Up
+ doReturn("cosmos-key-secret").when(secret).getValue();
+ doReturn(secret).when(kv).getSecret("cosmos-primary-key");
+
+ // Act
+ String secretValue = sut.cosmosKey(kv);
+
+ // Assert
+ assertEquals( "cosmos-key-secret", secretValue);
+ }
+
+ @Test
+ public void should_returnRightCosmosSecret_getCosmosKey() {
+ // Set-Up
+ doReturn("cosmos-endpoint-secret").when(secret).getValue();
+ doReturn(secret).when(kv).getSecret("cosmos-endpoint");
+
+ // Act
+ String secretValue = sut.cosmosEndpoint(kv);
+
+ // Assert
+ assertEquals( "cosmos-endpoint-secret", secretValue);
+ }
+}
diff --git a/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/util/AzureServiceAccountValidatorImplTest.java b/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/util/AzureServiceAccountValidatorImplTest.java
index 0899d9a4c6275dc152c9bdce952a91449260d066..606e68bdc94f71a1031a7f294269f6482062c50c 100644
--- a/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/util/AzureServiceAccountValidatorImplTest.java
+++ b/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/util/AzureServiceAccountValidatorImplTest.java
@@ -41,7 +41,7 @@ public class AzureServiceAccountValidatorImplTest {
@Before
public void setup() {
- when(this.appProperties.getAadClientID()).thenReturn(this.invalidAADClientID);
+ when(this.appProperties.getAadClientID()).thenReturn(invalidAADClientID);
}
@Test
diff --git a/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/util/ServiceAccountClientImplTest.java b/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/util/ServiceAccountClientImplTest.java
index 8e5db06d1c1abf310034bbe0a12b94a5ae180c2a..6951d39a9653b1309709c3b0091782eb67635e0f 100644
--- a/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/util/ServiceAccountClientImplTest.java
+++ b/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/util/ServiceAccountClientImplTest.java
@@ -23,6 +23,7 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.junit.MockitoJUnitRunner;
+import org.opengroup.osdu.core.common.logging.JaxRsDpsLog;
import org.opengroup.osdu.core.common.model.http.AppException;
import org.opengroup.osdu.core.common.model.search.IdToken;
import org.opengroup.osdu.core.common.model.tenant.TenantInfo;
@@ -63,6 +64,9 @@ public class ServiceAccountClientImplTest {
@Mock
private JwtCache tenantJwtCacheMock;
+ @Mock
+ private JaxRsDpsLog logger;
+
@InjectMocks
@Spy
private ServiceAccountJwtAzureClientImpl sut;
@@ -119,22 +123,6 @@ public class ServiceAccountClientImplTest {
Assert.assertEquals(expectedToken, returnedToken);
}
- @Test
- public void should_throw500ForInvalidAccessTokenResponse_getIdToken() {
- try {
- // Act
- this.sut.getIdToken(tenantName);
-
- // Assert
- fail("Should throw exception");
- } catch (AppException e) {
- Assert.assertEquals(HttpStatus.SC_INTERNAL_SERVER_ERROR, e.getError().getCode());
- Assert.assertEquals("Error generating token", e.getError().getMessage());
- } catch (Exception e) {
- fail("Should not throw this exception" + e.getMessage());
- }
- }
-
@Test
public void should_return403GivenInvalidApplicationProperties_getAccessToken() {
when(appProperties.getAuthURL()).thenReturn("https://login.microsoftonline.com/s/oauth2/token/");
diff --git a/provider/notification-azure/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/provider/notification-azure/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000000000000000000000000000000000000..1f0955d450f0dc49ca715b1a0a88a5aa746ee11e
--- /dev/null
+++ b/provider/notification-azure/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline