Switch to Java Date/Time API for mail related code

Change-Id: I2b13d56ac8ee5b2ffc9b20ec43a6b525d4491889
This commit is contained in:
Alice Kober-Sotzek
2017-10-01 10:46:05 +02:00
parent 3f4336dea9
commit 1c50562df5
12 changed files with 73 additions and 39 deletions

View File

@@ -23,8 +23,8 @@ import com.google.gerrit.extensions.api.changes.ReviewInput.CommentInput;
import com.google.gerrit.extensions.client.Comment; import com.google.gerrit.extensions.client.Comment;
import com.google.gerrit.extensions.client.Side; import com.google.gerrit.extensions.client.Side;
import com.google.gerrit.server.mail.receive.MailMessage; import com.google.gerrit.server.mail.receive.MailMessage;
import java.time.Instant;
import java.util.HashMap; import java.util.HashMap;
import org.joda.time.DateTime;
import org.junit.Ignore; import org.junit.Ignore;
@Ignore @Ignore
@@ -36,7 +36,7 @@ public class AbstractMailIT extends AbstractDaemonTest {
b.from(user.emailAddress); b.from(user.emailAddress);
b.addTo(user.emailAddress); // Not evaluated b.addTo(user.emailAddress); // Not evaluated
b.subject(""); b.subject("");
b.dateReceived(new DateTime()); b.dateReceived(Instant.now());
return b; return b;
} }

View File

@@ -18,7 +18,7 @@ import com.google.auto.value.AutoValue;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.gerrit.common.Nullable; import com.google.gerrit.common.Nullable;
import com.google.gerrit.server.mail.Address; import com.google.gerrit.server.mail.Address;
import org.joda.time.DateTime; import java.time.Instant;
/** /**
* A simplified representation of an RFC 2045-2047 mime email message used for representing received * A simplified representation of an RFC 2045-2047 mime email message used for representing received
@@ -40,7 +40,7 @@ public abstract class MailMessage {
public abstract ImmutableList<Address> cc(); public abstract ImmutableList<Address> cc();
// Metadata // Metadata
public abstract DateTime dateReceived(); public abstract Instant dateReceived();
public abstract ImmutableList<String> additionalHeaders(); public abstract ImmutableList<String> additionalHeaders();
// Content // Content
@@ -84,7 +84,7 @@ public abstract class MailMessage {
return this; return this;
} }
public abstract Builder dateReceived(DateTime val); public abstract Builder dateReceived(Instant instant);
public abstract ImmutableList.Builder<String> additionalHeadersBuilder(); public abstract ImmutableList.Builder<String> additionalHeadersBuilder();

View File

@@ -33,7 +33,6 @@ import org.apache.james.mime4j.dom.Multipart;
import org.apache.james.mime4j.dom.TextBody; import org.apache.james.mime4j.dom.TextBody;
import org.apache.james.mime4j.dom.address.Mailbox; import org.apache.james.mime4j.dom.address.Mailbox;
import org.apache.james.mime4j.message.DefaultMessageBuilder; import org.apache.james.mime4j.message.DefaultMessageBuilder;
import org.joda.time.DateTime;
/** Parses raw email content received through POP3 or IMAP into an internal {@link MailMessage}. */ /** Parses raw email content received through POP3 or IMAP into an internal {@link MailMessage}. */
public class RawMailParser { public class RawMailParser {
@@ -66,7 +65,7 @@ public class RawMailParser {
if (mimeMessage.getSubject() != null) { if (mimeMessage.getSubject() != null) {
messageBuilder.subject(mimeMessage.getSubject()); messageBuilder.subject(mimeMessage.getSubject());
} }
messageBuilder.dateReceived(new DateTime(mimeMessage.getDate())); messageBuilder.dateReceived(mimeMessage.getDate().toInstant());
// Add From, To and Cc // Add From, To and Cc
if (mimeMessage.getFrom() != null && mimeMessage.getFrom().size() > 0) { if (mimeMessage.getFrom() != null && mimeMessage.getFrom().size() > 0) {

View File

@@ -20,9 +20,9 @@ import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.Comment; import com.google.gerrit.reviewdb.client.Comment;
import com.google.gerrit.server.mail.Address; import com.google.gerrit.server.mail.Address;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.time.Instant;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.joda.time.DateTime;
import org.junit.Ignore; import org.junit.Ignore;
@Ignore @Ignore
@@ -85,7 +85,7 @@ public class AbstractParserTest {
MailMessage.Builder b = MailMessage.builder(); MailMessage.Builder b = MailMessage.builder();
b.id("id"); b.id("id");
b.from(new Address("Foo Bar", "foo@bar.com")); b.from(new Address("Foo Bar", "foo@bar.com"));
b.dateReceived(new DateTime()); b.dateReceived(Instant.now());
b.subject(""); b.subject("");
return b; return b;
} }

View File

@@ -20,8 +20,10 @@ import static com.google.gerrit.server.mail.MetadataName.toHeaderWithDelimiter;
import com.google.gerrit.server.mail.Address; import com.google.gerrit.server.mail.Address;
import com.google.gerrit.server.mail.MetadataName; import com.google.gerrit.server.mail.MetadataName;
import org.joda.time.DateTime; import java.time.Instant;
import org.joda.time.DateTimeZone; import java.time.LocalDateTime;
import java.time.Month;
import java.time.ZoneOffset;
import org.junit.Test; import org.junit.Test;
public class MetadataParserTest { public class MetadataParserTest {
@@ -31,7 +33,7 @@ public class MetadataParserTest {
// email headers of the message. // email headers of the message.
MailMessage.Builder b = MailMessage.builder(); MailMessage.Builder b = MailMessage.builder();
b.id(""); b.id("");
b.dateReceived(new DateTime()); b.dateReceived(Instant.now());
b.subject(""); b.subject("");
b.addAdditionalHeader(toHeaderWithDelimiter(MetadataName.CHANGE_NUMBER) + "123"); b.addAdditionalHeader(toHeaderWithDelimiter(MetadataName.CHANGE_NUMBER) + "123");
@@ -48,8 +50,11 @@ public class MetadataParserTest {
assertThat(meta.changeNumber).isEqualTo(123); assertThat(meta.changeNumber).isEqualTo(123);
assertThat(meta.patchSet).isEqualTo(1); assertThat(meta.patchSet).isEqualTo(1);
assertThat(meta.messageType).isEqualTo("comment"); assertThat(meta.messageType).isEqualTo("comment");
assertThat(meta.timestamp.getTime()) assertThat(meta.timestamp.toInstant())
.isEqualTo(new DateTime(2016, 10, 25, 9, 11, 35, 0, DateTimeZone.UTC).getMillis()); .isEqualTo(
LocalDateTime.of(2016, Month.OCTOBER, 25, 9, 11, 35)
.atOffset(ZoneOffset.UTC)
.toInstant());
} }
@Test @Test
@@ -58,7 +63,7 @@ public class MetadataParserTest {
// the text body of the message. // the text body of the message.
MailMessage.Builder b = MailMessage.builder(); MailMessage.Builder b = MailMessage.builder();
b.id(""); b.id("");
b.dateReceived(new DateTime()); b.dateReceived(Instant.now());
b.subject(""); b.subject("");
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
@@ -77,8 +82,11 @@ public class MetadataParserTest {
assertThat(meta.changeNumber).isEqualTo(123); assertThat(meta.changeNumber).isEqualTo(123);
assertThat(meta.patchSet).isEqualTo(1); assertThat(meta.patchSet).isEqualTo(1);
assertThat(meta.messageType).isEqualTo("comment"); assertThat(meta.messageType).isEqualTo("comment");
assertThat(meta.timestamp.getTime()) assertThat(meta.timestamp.toInstant())
.isEqualTo(new DateTime(2016, 10, 25, 9, 11, 35, 0, DateTimeZone.UTC).getMillis()); .isEqualTo(
LocalDateTime.of(2016, Month.OCTOBER, 25, 9, 11, 35)
.atOffset(ZoneOffset.UTC)
.toInstant());
} }
@Test @Test
@@ -87,7 +95,7 @@ public class MetadataParserTest {
// the HTML body of the message. // the HTML body of the message.
MailMessage.Builder b = MailMessage.builder(); MailMessage.Builder b = MailMessage.builder();
b.id(""); b.id("");
b.dateReceived(new DateTime()); b.dateReceived(Instant.now());
b.subject(""); b.subject("");
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
@@ -111,7 +119,10 @@ public class MetadataParserTest {
assertThat(meta.changeNumber).isEqualTo(123); assertThat(meta.changeNumber).isEqualTo(123);
assertThat(meta.patchSet).isEqualTo(1); assertThat(meta.patchSet).isEqualTo(1);
assertThat(meta.messageType).isEqualTo("comment"); assertThat(meta.messageType).isEqualTo("comment");
assertThat(meta.timestamp.getTime()) assertThat(meta.timestamp.toInstant())
.isEqualTo(new DateTime(2016, 10, 25, 9, 11, 35, 0, DateTimeZone.UTC).getMillis()); .isEqualTo(
LocalDateTime.of(2016, Month.OCTOBER, 25, 9, 11, 35)
.atOffset(ZoneOffset.UTC)
.toInstant());
} }
} }

View File

@@ -65,7 +65,7 @@ public class RawMailParserTest extends GerritBaseTests {
assertThat(have.to()).isEqualTo(want.to()); assertThat(have.to()).isEqualTo(want.to());
assertThat(have.from()).isEqualTo(want.from()); assertThat(have.from()).isEqualTo(want.from());
assertThat(have.cc()).isEqualTo(want.cc()); assertThat(have.cc()).isEqualTo(want.cc());
assertThat(have.dateReceived().getMillis()).isEqualTo(want.dateReceived().getMillis()); assertThat(have.dateReceived()).isEqualTo(want.dateReceived());
assertThat(have.additionalHeaders()).isEqualTo(want.additionalHeaders()); assertThat(have.additionalHeaders()).isEqualTo(want.additionalHeaders());
assertThat(have.subject()).isEqualTo(want.subject()); assertThat(have.subject()).isEqualTo(want.subject());
assertThat(have.textContent()).isEqualTo(want.textContent()); assertThat(have.textContent()).isEqualTo(want.textContent());

View File

@@ -16,8 +16,9 @@ package com.google.gerrit.server.mail.receive.data;
import com.google.gerrit.server.mail.Address; import com.google.gerrit.server.mail.Address;
import com.google.gerrit.server.mail.receive.MailMessage; import com.google.gerrit.server.mail.receive.MailMessage;
import org.joda.time.DateTime; import java.time.LocalDateTime;
import org.joda.time.DateTimeZone; import java.time.Month;
import java.time.ZoneOffset;
import org.junit.Ignore; import org.junit.Ignore;
/** /**
@@ -82,7 +83,10 @@ public class AttachmentMessage extends RawMailMessage {
.htmlContent("<div dir=\"ltr\">Contains unwanted attachment</div>") .htmlContent("<div dir=\"ltr\">Contains unwanted attachment</div>")
.subject("Test Subject") .subject("Test Subject")
.addAdditionalHeader("MIME-Version: 1.0") .addAdditionalHeader("MIME-Version: 1.0")
.dateReceived(new DateTime(2016, 10, 25, 9, 11, 35, 0, DateTimeZone.UTC)); .dateReceived(
LocalDateTime.of(2016, Month.OCTOBER, 25, 9, 11, 35)
.atOffset(ZoneOffset.UTC)
.toInstant());
return expect.build(); return expect.build();
} }
} }

View File

@@ -16,8 +16,9 @@ package com.google.gerrit.server.mail.receive.data;
import com.google.gerrit.server.mail.Address; import com.google.gerrit.server.mail.Address;
import com.google.gerrit.server.mail.receive.MailMessage; import com.google.gerrit.server.mail.receive.MailMessage;
import org.joda.time.DateTime; import java.time.LocalDateTime;
import org.joda.time.DateTimeZone; import java.time.Month;
import java.time.ZoneOffset;
import org.junit.Ignore; import org.junit.Ignore;
/** Tests parsing a Base64 encoded subject. */ /** Tests parsing a Base64 encoded subject. */
@@ -58,7 +59,10 @@ public class Base64HeaderMessage extends RawMailMessage {
.addTo(new Address("ekempin", "ekempin@google.com")) .addTo(new Address("ekempin", "ekempin@google.com"))
.textContent(textContent) .textContent(textContent)
.subject("\uD83D\uDE1B test") .subject("\uD83D\uDE1B test")
.dateReceived(new DateTime(2016, 10, 25, 9, 11, 35, 0, DateTimeZone.UTC)); .dateReceived(
LocalDateTime.of(2016, Month.OCTOBER, 25, 9, 11, 35)
.atOffset(ZoneOffset.UTC)
.toInstant());
return expect.build(); return expect.build();
} }
} }

View File

@@ -16,8 +16,9 @@ package com.google.gerrit.server.mail.receive.data;
import com.google.gerrit.server.mail.Address; import com.google.gerrit.server.mail.Address;
import com.google.gerrit.server.mail.receive.MailMessage; import com.google.gerrit.server.mail.receive.MailMessage;
import org.joda.time.DateTime; import java.time.LocalDateTime;
import org.joda.time.DateTimeZone; import java.time.Month;
import java.time.ZoneOffset;
import org.junit.Ignore; import org.junit.Ignore;
/** Tests a message containing mime/alternative (text + html) content. */ /** Tests a message containing mime/alternative (text + html) content. */
@@ -98,7 +99,10 @@ public class HtmlMimeMessage extends RawMailMessage {
.htmlContent(unencodedHtmlContent) .htmlContent(unencodedHtmlContent)
.subject("Change in gerrit[master]: Implement receiver class structure and bindings") .subject("Change in gerrit[master]: Implement receiver class structure and bindings")
.addAdditionalHeader("MIME-Version: 1.0") .addAdditionalHeader("MIME-Version: 1.0")
.dateReceived(new DateTime(2016, 10, 25, 9, 11, 35, 0, DateTimeZone.UTC)); .dateReceived(
LocalDateTime.of(2016, Month.OCTOBER, 25, 9, 11, 35)
.atOffset(ZoneOffset.UTC)
.toInstant());
return expect.build(); return expect.build();
} }
} }

View File

@@ -15,8 +15,9 @@ package com.google.gerrit.server.mail.receive.data;
import com.google.gerrit.server.mail.Address; import com.google.gerrit.server.mail.Address;
import com.google.gerrit.server.mail.receive.MailMessage; import com.google.gerrit.server.mail.receive.MailMessage;
import org.joda.time.DateTime; import java.time.LocalDateTime;
import org.joda.time.DateTimeZone; import java.time.Month;
import java.time.ZoneOffset;
import org.junit.Ignore; import org.junit.Ignore;
/** Tests that non-UTF8 encodings are handled correctly. */ /** Tests that non-UTF8 encodings are handled correctly. */
@@ -62,7 +63,10 @@ public class NonUTF8Message extends RawMailMessage {
.addTo(new Address("ekempin", "ekempin@google.com")) .addTo(new Address("ekempin", "ekempin@google.com"))
.textContent(textContent) .textContent(textContent)
.subject("\uD83D\uDE1B test") .subject("\uD83D\uDE1B test")
.dateReceived(new DateTime(2016, 10, 25, 9, 11, 35, 0, DateTimeZone.UTC)); .dateReceived(
LocalDateTime.of(2016, Month.OCTOBER, 25, 9, 11, 35)
.atOffset(ZoneOffset.UTC)
.toInstant());
return expect.build(); return expect.build();
} }
} }

View File

@@ -16,8 +16,9 @@ package com.google.gerrit.server.mail.receive.data;
import com.google.gerrit.server.mail.Address; import com.google.gerrit.server.mail.Address;
import com.google.gerrit.server.mail.receive.MailMessage; import com.google.gerrit.server.mail.receive.MailMessage;
import org.joda.time.DateTime; import java.time.LocalDateTime;
import org.joda.time.DateTimeZone; import java.time.Month;
import java.time.ZoneOffset;
import org.junit.Ignore; import org.junit.Ignore;
/** Tests parsing a quoted printable encoded subject */ /** Tests parsing a quoted printable encoded subject */
@@ -59,7 +60,10 @@ public class QuotedPrintableHeaderMessage extends RawMailMessage {
.addTo(new Address("ekempin", "ekempin@google.com")) .addTo(new Address("ekempin", "ekempin@google.com"))
.textContent(textContent) .textContent(textContent)
.subject("âme vulgaire") .subject("âme vulgaire")
.dateReceived(new DateTime(2016, 10, 25, 9, 11, 35, 0, DateTimeZone.UTC)); .dateReceived(
LocalDateTime.of(2016, Month.OCTOBER, 25, 9, 11, 35)
.atOffset(ZoneOffset.UTC)
.toInstant());
return expect.build(); return expect.build();
} }
} }

View File

@@ -16,8 +16,9 @@ package com.google.gerrit.server.mail.receive.data;
import com.google.gerrit.server.mail.Address; import com.google.gerrit.server.mail.Address;
import com.google.gerrit.server.mail.receive.MailMessage; import com.google.gerrit.server.mail.receive.MailMessage;
import org.joda.time.DateTime; import java.time.LocalDateTime;
import org.joda.time.DateTimeZone; import java.time.Month;
import java.time.ZoneOffset;
import org.junit.Ignore; import org.junit.Ignore;
/** Tests parsing a simple text message with different headers. */ /** Tests parsing a simple text message with different headers. */
@@ -124,7 +125,10 @@ public class SimpleTextMessage extends RawMailMessage {
.addCc(new Address("Patrick Hiesel", "hiesel@google.com")) .addCc(new Address("Patrick Hiesel", "hiesel@google.com"))
.textContent(textContent) .textContent(textContent)
.subject("Change in gerrit[master]: (Re)enable voting buttons for merged changes") .subject("Change in gerrit[master]: (Re)enable voting buttons for merged changes")
.dateReceived(new DateTime(2016, 10, 25, 9, 11, 35, 0, DateTimeZone.UTC)) .dateReceived(
LocalDateTime.of(2016, Month.OCTOBER, 25, 9, 11, 35)
.atOffset(ZoneOffset.UTC)
.toInstant())
.addAdditionalHeader( .addAdditionalHeader(
"Authentication-Results: mx.google.com; dkim=pass header.i=@google.com;") "Authentication-Results: mx.google.com; dkim=pass header.i=@google.com;")
.addAdditionalHeader( .addAdditionalHeader(