From d7a3c0c439ab59b10de0a1f40b0146f69911b050 Mon Sep 17 00:00:00 2001 From: Weimin Yu Date: Thu, 10 Aug 2023 10:26:28 -0400 Subject: [PATCH] Send Spec11 emails using Gmail (#2101) First of a series of migrations to Gmail. This can only be verified in production. --- .../reporting/spec11/Spec11EmailUtils.java | 13 ++++---- .../spec11/Spec11EmailUtilsTest.java | 32 +++++++++---------- 2 files changed, 21 insertions(+), 24 deletions(-) diff --git a/core/src/main/java/google/registry/reporting/spec11/Spec11EmailUtils.java b/core/src/main/java/google/registry/reporting/spec11/Spec11EmailUtils.java index 5691db54d..19b1ec59d 100644 --- a/core/src/main/java/google/registry/reporting/spec11/Spec11EmailUtils.java +++ b/core/src/main/java/google/registry/reporting/spec11/Spec11EmailUtils.java @@ -31,12 +31,12 @@ import com.google.template.soy.tofu.SoyTofu; import com.google.template.soy.tofu.SoyTofu.Renderer; import google.registry.beam.spec11.ThreatMatch; import google.registry.config.RegistryConfig.Config; +import google.registry.groups.GmailClient; import google.registry.model.domain.Domain; import google.registry.model.registrar.Registrar; import google.registry.model.registrar.RegistrarPoc; import google.registry.reporting.spec11.soy.Spec11EmailSoyInfo; import google.registry.util.EmailMessage; -import google.registry.util.SendEmailService; import java.util.List; import java.util.Map; import javax.inject.Inject; @@ -56,8 +56,7 @@ public class Spec11EmailUtils { Spec11EmailSoyInfo.getInstance().getFileName())) .build() .compileToTofu(); - - private final SendEmailService emailService; + private final GmailClient gmailClient; private final InternetAddress outgoingEmailAddress; private final ImmutableList spec11BccEmailAddresses; private final InternetAddress alertRecipientAddress; @@ -66,13 +65,13 @@ public class Spec11EmailUtils { @Inject Spec11EmailUtils( - SendEmailService emailService, + GmailClient gmailClient, @Config("alertRecipientEmailAddress") InternetAddress alertRecipientAddress, @Config("spec11OutgoingEmailAddress") InternetAddress spec11OutgoingEmailAddress, @Config("spec11BccEmailAddresses") ImmutableList spec11BccEmailAddresses, @Config("spec11WebResources") ImmutableList spec11WebResources, @Config("registryName") String registryName) { - this.emailService = emailService; + this.gmailClient = gmailClient; this.outgoingEmailAddress = spec11OutgoingEmailAddress; this.spec11BccEmailAddresses = spec11BccEmailAddresses; this.alertRecipientAddress = alertRecipientAddress; @@ -151,7 +150,7 @@ public class Spec11EmailUtils { String subject, RegistrarThreatMatches registrarThreatMatches) throws MessagingException { - emailService.sendEmail( + gmailClient.sendEmail( EmailMessage.newBuilder() .setSubject(subject) .setBody(getContent(date, soyTemplateInfo, registrarThreatMatches)) @@ -191,7 +190,7 @@ public class Spec11EmailUtils { /** Sends an e-mail indicating the state of the spec11 pipeline, with a given subject and body. */ void sendAlertEmail(String subject, String body) { try { - emailService.sendEmail( + gmailClient.sendEmail( EmailMessage.newBuilder() .setFrom(outgoingEmailAddress) .addRecipient(alertRecipientAddress) diff --git a/core/src/test/java/google/registry/reporting/spec11/Spec11EmailUtilsTest.java b/core/src/test/java/google/registry/reporting/spec11/Spec11EmailUtilsTest.java index e2092fa49..ce6511f6f 100644 --- a/core/src/test/java/google/registry/reporting/spec11/Spec11EmailUtilsTest.java +++ b/core/src/test/java/google/registry/reporting/spec11/Spec11EmailUtilsTest.java @@ -27,14 +27,13 @@ import static google.registry.testing.DatabaseHelper.persistActiveHost; import static google.registry.testing.DatabaseHelper.persistResource; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.net.MediaType; +import google.registry.groups.GmailClient; import google.registry.model.domain.Domain; import google.registry.model.host.Host; import google.registry.persistence.transaction.JpaTestExtensions; @@ -42,7 +41,6 @@ import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationT import google.registry.reporting.spec11.soy.Spec11EmailSoyInfo; import google.registry.testing.DatabaseHelper; import google.registry.util.EmailMessage; -import google.registry.util.SendEmailService; import java.util.LinkedHashSet; import java.util.List; import java.util.Optional; @@ -51,10 +49,14 @@ import javax.mail.internet.InternetAddress; import org.joda.time.LocalDate; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.RegisterExtension; import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; /** Unit tests for {@link Spec11EmailUtils}. */ +@ExtendWith(MockitoExtension.class) class Spec11EmailUtilsTest { private static final ImmutableList FAKE_RESOURCES = ImmutableList.of("foo"); @@ -98,9 +100,8 @@ class Spec11EmailUtilsTest { final JpaIntegrationTestExtension jpa = new JpaTestExtensions.Builder().buildIntegrationTestExtension(); - private SendEmailService emailService; + @Mock private GmailClient gmailClient; private Spec11EmailUtils emailUtils; - private Spec11RegistrarThreatMatchesParser parser; private ArgumentCaptor contentCaptor; private final LocalDate date = new LocalDate(2018, 7, 15); @@ -109,13 +110,10 @@ class Spec11EmailUtilsTest { @BeforeEach void beforeEach() throws Exception { - emailService = mock(SendEmailService.class); - parser = mock(Spec11RegistrarThreatMatchesParser.class); - when(parser.getRegistrarThreatMatches(date)).thenReturn(sampleThreatMatches()); contentCaptor = ArgumentCaptor.forClass(EmailMessage.class); emailUtils = new Spec11EmailUtils( - emailService, + gmailClient, new InternetAddress("my-receiver@test.com"), new InternetAddress("abuse@test.com"), ImmutableList.of( @@ -138,7 +136,7 @@ class Spec11EmailUtilsTest { "Super Cool Registry Monthly Threat Detector [2018-07-15]", sampleThreatMatches()); // We inspect individual parameters because Message doesn't implement equals(). - verify(emailService, times(3)).sendEmail(contentCaptor.capture()); + verify(gmailClient, times(3)).sendEmail(contentCaptor.capture()); List capturedContents = contentCaptor.getAllValues(); validateMessage( capturedContents.get(0), @@ -176,7 +174,7 @@ class Spec11EmailUtilsTest { "Super Cool Registry Daily Threat Detector [2018-07-15]", sampleThreatMatches()); // We inspect individual parameters because Message doesn't implement equals(). - verify(emailService, times(3)).sendEmail(contentCaptor.capture()); + verify(gmailClient, times(3)).sendEmail(contentCaptor.capture()); List capturedMessages = contentCaptor.getAllValues(); validateMessage( capturedMessages.get(0), @@ -217,7 +215,7 @@ class Spec11EmailUtilsTest { "Super Cool Registry Monthly Threat Detector [2018-07-15]", sampleThreatMatches()); // We inspect individual parameters because Message doesn't implement equals(). - verify(emailService, times(2)).sendEmail(contentCaptor.capture()); + verify(gmailClient, times(2)).sendEmail(contentCaptor.capture()); List capturedContents = contentCaptor.getAllValues(); validateMessage( capturedContents.get(0), @@ -250,7 +248,7 @@ class Spec11EmailUtilsTest { "Super Cool Registry Monthly Threat Detector [2018-07-15]", sampleThreatMatches()); // We inspect individual parameters because Message doesn't implement equals(). - verify(emailService, times(3)).sendEmail(contentCaptor.capture()); + verify(gmailClient, times(3)).sendEmail(contentCaptor.capture()); List capturedContents = contentCaptor.getAllValues(); validateMessage( capturedContents.get(0), @@ -289,7 +287,7 @@ class Spec11EmailUtilsTest { doThrow(new RuntimeException(new MessagingException("expected"))) .doNothing() .doNothing() - .when(emailService) + .when(gmailClient) .sendEmail(contentCaptor.capture()); RuntimeException thrown = assertThrows( @@ -305,7 +303,7 @@ class Spec11EmailUtilsTest { .isEqualTo("Emailing Spec11 reports failed, first exception:"); assertThat(thrown).hasCauseThat().hasMessageThat().isEqualTo("expected"); // Verify we sent an e-mail alert - verify(emailService, times(3)).sendEmail(contentCaptor.capture()); + verify(gmailClient, times(3)).sendEmail(contentCaptor.capture()); List capturedMessages = contentCaptor.getAllValues(); validateMessage( capturedMessages.get(0), @@ -338,7 +336,7 @@ class Spec11EmailUtilsTest { @Test void testSuccess_sendAlertEmail() throws Exception { emailUtils.sendAlertEmail("Spec11 Pipeline Alert: 2018-07", "Alert!"); - verify(emailService).sendEmail(contentCaptor.capture()); + verify(gmailClient).sendEmail(contentCaptor.capture()); validateMessage( contentCaptor.getValue(), "abuse@test.com", @@ -363,7 +361,7 @@ class Spec11EmailUtilsTest { Spec11EmailSoyInfo.MONTHLY_SPEC_11_EMAIL, "Super Cool Registry Monthly Threat Detector [2018-07-15]", sampleThreatMatches()); - verify(emailService, times(3)).sendEmail(contentCaptor.capture()); + verify(gmailClient, times(3)).sendEmail(contentCaptor.capture()); assertThat(contentCaptor.getAllValues().get(0).recipients()) .containsExactly(new InternetAddress("johndoe@theregistrar.com")); }