From 0653ea1349aa51a8183757ba59ee13ecedaea545 Mon Sep 17 00:00:00 2001 From: Henry Avetisyan Date: Thu, 19 Dec 2024 14:48:45 -0800 Subject: [PATCH 1/2] skip calling notify method if there are no recipients Signed-off-by: Henry Avetisyan --- .../NotificationToEmailConverterCommon.java | 3 ++- .../impl/EmailNotificationService.java | 11 ++++++++++- .../impl/EmailNotificationServiceTest.java | 19 +++++++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/libs/java/server_common/src/main/java/com/yahoo/athenz/common/server/notification/NotificationToEmailConverterCommon.java b/libs/java/server_common/src/main/java/com/yahoo/athenz/common/server/notification/NotificationToEmailConverterCommon.java index 33afa46d24e..b10f195d0ac 100644 --- a/libs/java/server_common/src/main/java/com/yahoo/athenz/common/server/notification/NotificationToEmailConverterCommon.java +++ b/libs/java/server_common/src/main/java/com/yahoo/athenz/common/server/notification/NotificationToEmailConverterCommon.java @@ -17,6 +17,7 @@ package com.yahoo.athenz.common.server.notification; import com.yahoo.athenz.auth.Authority; +import org.eclipse.jetty.util.StringUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -257,7 +258,7 @@ public Set getFullyQualifiedEmailAddresses(Set recipients) { .map(userName -> { if (notificationUserAuthority != null) { String email = notificationUserAuthority.getUserEmail(userName); - if (email != null) { + if (!StringUtil.isEmpty(email)) { return email; } } diff --git a/libs/java/server_common/src/main/java/com/yahoo/athenz/common/server/notification/impl/EmailNotificationService.java b/libs/java/server_common/src/main/java/com/yahoo/athenz/common/server/notification/impl/EmailNotificationService.java index d619f202ba6..57df056e4c4 100644 --- a/libs/java/server_common/src/main/java/com/yahoo/athenz/common/server/notification/impl/EmailNotificationService.java +++ b/libs/java/server_common/src/main/java/com/yahoo/athenz/common/server/notification/impl/EmailNotificationService.java @@ -97,7 +97,16 @@ public boolean notify(Notification notification) { final String subject = notificationAsEmail.getSubject(); final String body = notificationAsEmail.getBody(); Set recipients = notificationAsEmail.getFullyQualifiedRecipientsEmail(); - if (sendEmail(recipients, subject, body)) { + + // if our list of recipients is empty then we have nothing to do, + // but we want to log it for debugging purposes + + if (recipients.isEmpty()) { + LOGGER.error("No recipients specified in the notification. Subject={}", subject); + return false; + } + + if (sendEmail(recipients, subject, body)) { LOGGER.info("Successfully sent email notification. Subject={}, Recipients={}", subject, recipients); return true; } else { diff --git a/libs/java/server_common/src/test/java/com/yahoo/athenz/common/server/notification/impl/EmailNotificationServiceTest.java b/libs/java/server_common/src/test/java/com/yahoo/athenz/common/server/notification/impl/EmailNotificationServiceTest.java index 342bc86012b..c5d6d1223ce 100644 --- a/libs/java/server_common/src/test/java/com/yahoo/athenz/common/server/notification/impl/EmailNotificationServiceTest.java +++ b/libs/java/server_common/src/test/java/com/yahoo/athenz/common/server/notification/impl/EmailNotificationServiceTest.java @@ -17,11 +17,18 @@ package com.yahoo.athenz.common.server.notification.impl; import com.yahoo.athenz.common.server.notification.EmailProvider; +import com.yahoo.athenz.common.server.notification.Notification; +import com.yahoo.athenz.common.server.notification.NotificationEmail; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; +import java.util.Collection; +import java.util.Collections; +import java.util.Set; + import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import static org.testng.Assert.*; public class EmailNotificationServiceTest { @@ -58,4 +65,16 @@ public void testReadBinaryFromFileNull() { assertNull(svc.readBinaryFromFile("resources/non-existent")); } + @Test + public void testNotifyNoRecipients() { + EmailProvider emailProvider = mock(EmailProvider.class); + EmailNotificationService svc = new EmailNotificationService(emailProvider); + + Notification notification = mock(Notification.class); + NotificationEmail notificationAsEmail = new NotificationEmail("subject", "body", Collections.emptySet()); + when(notification.getNotificationAsEmail()).thenReturn(notificationAsEmail); + + boolean status = svc.notify(notification); + assertFalse(status); + } } \ No newline at end of file From 068873749f24470822e361a6c4cef8a5dbdbe52f Mon Sep 17 00:00:00 2001 From: Henry Avetisyan Date: Thu, 19 Dec 2024 15:05:39 -0800 Subject: [PATCH 2/2] update test case for SES Email provider Signed-off-by: Henry Avetisyan --- .../aws/common/notification/impl/SESEmailProviderTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/java/server_aws_common/src/test/java/io/athenz/server/aws/common/notification/impl/SESEmailProviderTest.java b/libs/java/server_aws_common/src/test/java/io/athenz/server/aws/common/notification/impl/SESEmailProviderTest.java index 76f0974f355..327ea8d6607 100644 --- a/libs/java/server_aws_common/src/test/java/io/athenz/server/aws/common/notification/impl/SESEmailProviderTest.java +++ b/libs/java/server_aws_common/src/test/java/io/athenz/server/aws/common/notification/impl/SESEmailProviderTest.java @@ -180,7 +180,7 @@ public void testNotify() { NotificationToEmailConverter notificationToEmailConverter = notificationToConvert -> { String subject = "test subject"; String body = "test body"; - return new NotificationEmail(subject, body, new HashSet<>()); + return new NotificationEmail(subject, body, Collections.singleton("athenz@athenz.io")); }; NotificationToMetricConverter notificationToMetricConverter =