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.Side;
import com.google.gerrit.server.mail.receive.MailMessage;
import java.time.Instant;
import java.util.HashMap;
import org.joda.time.DateTime;
import org.junit.Ignore;
@Ignore
@@ -36,7 +36,7 @@ public class AbstractMailIT extends AbstractDaemonTest {
b.from(user.emailAddress);
b.addTo(user.emailAddress); // Not evaluated
b.subject("");
b.dateReceived(new DateTime());
b.dateReceived(Instant.now());
return b;
}

View File

@@ -18,7 +18,7 @@ import com.google.auto.value.AutoValue;
import com.google.common.collect.ImmutableList;
import com.google.gerrit.common.Nullable;
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
@@ -40,7 +40,7 @@ public abstract class MailMessage {
public abstract ImmutableList<Address> cc();
// Metadata
public abstract DateTime dateReceived();
public abstract Instant dateReceived();
public abstract ImmutableList<String> additionalHeaders();
// Content
@@ -84,7 +84,7 @@ public abstract class MailMessage {
return this;
}
public abstract Builder dateReceived(DateTime val);
public abstract Builder dateReceived(Instant instant);
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.address.Mailbox;
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}. */
public class RawMailParser {
@@ -66,7 +65,7 @@ public class RawMailParser {
if (mimeMessage.getSubject() != null) {
messageBuilder.subject(mimeMessage.getSubject());
}
messageBuilder.dateReceived(new DateTime(mimeMessage.getDate()));
messageBuilder.dateReceived(mimeMessage.getDate().toInstant());
// Add From, To and Cc
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.server.mail.Address;
import java.sql.Timestamp;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import org.joda.time.DateTime;
import org.junit.Ignore;
@Ignore
@@ -85,7 +85,7 @@ public class AbstractParserTest {
MailMessage.Builder b = MailMessage.builder();
b.id("id");
b.from(new Address("Foo Bar", "foo@bar.com"));
b.dateReceived(new DateTime());
b.dateReceived(Instant.now());
b.subject("");
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.MetadataName;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.ZoneOffset;
import org.junit.Test;
public class MetadataParserTest {
@@ -31,7 +33,7 @@ public class MetadataParserTest {
// email headers of the message.
MailMessage.Builder b = MailMessage.builder();
b.id("");
b.dateReceived(new DateTime());
b.dateReceived(Instant.now());
b.subject("");
b.addAdditionalHeader(toHeaderWithDelimiter(MetadataName.CHANGE_NUMBER) + "123");
@@ -48,8 +50,11 @@ public class MetadataParserTest {
assertThat(meta.changeNumber).isEqualTo(123);
assertThat(meta.patchSet).isEqualTo(1);
assertThat(meta.messageType).isEqualTo("comment");
assertThat(meta.timestamp.getTime())
.isEqualTo(new DateTime(2016, 10, 25, 9, 11, 35, 0, DateTimeZone.UTC).getMillis());
assertThat(meta.timestamp.toInstant())
.isEqualTo(
LocalDateTime.of(2016, Month.OCTOBER, 25, 9, 11, 35)
.atOffset(ZoneOffset.UTC)
.toInstant());
}
@Test
@@ -58,7 +63,7 @@ public class MetadataParserTest {
// the text body of the message.
MailMessage.Builder b = MailMessage.builder();
b.id("");
b.dateReceived(new DateTime());
b.dateReceived(Instant.now());
b.subject("");
StringBuilder stringBuilder = new StringBuilder();
@@ -77,8 +82,11 @@ public class MetadataParserTest {
assertThat(meta.changeNumber).isEqualTo(123);
assertThat(meta.patchSet).isEqualTo(1);
assertThat(meta.messageType).isEqualTo("comment");
assertThat(meta.timestamp.getTime())
.isEqualTo(new DateTime(2016, 10, 25, 9, 11, 35, 0, DateTimeZone.UTC).getMillis());
assertThat(meta.timestamp.toInstant())
.isEqualTo(
LocalDateTime.of(2016, Month.OCTOBER, 25, 9, 11, 35)
.atOffset(ZoneOffset.UTC)
.toInstant());
}
@Test
@@ -87,7 +95,7 @@ public class MetadataParserTest {
// the HTML body of the message.
MailMessage.Builder b = MailMessage.builder();
b.id("");
b.dateReceived(new DateTime());
b.dateReceived(Instant.now());
b.subject("");
StringBuilder stringBuilder = new StringBuilder();
@@ -111,7 +119,10 @@ public class MetadataParserTest {
assertThat(meta.changeNumber).isEqualTo(123);
assertThat(meta.patchSet).isEqualTo(1);
assertThat(meta.messageType).isEqualTo("comment");
assertThat(meta.timestamp.getTime())
.isEqualTo(new DateTime(2016, 10, 25, 9, 11, 35, 0, DateTimeZone.UTC).getMillis());
assertThat(meta.timestamp.toInstant())
.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.from()).isEqualTo(want.from());
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.subject()).isEqualTo(want.subject());
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.receive.MailMessage;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.ZoneOffset;
import org.junit.Ignore;
/**
@@ -82,7 +83,10 @@ public class AttachmentMessage extends RawMailMessage {
.htmlContent("<div dir=\"ltr\">Contains unwanted attachment</div>")
.subject("Test Subject")
.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();
}
}

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.receive.MailMessage;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.ZoneOffset;
import org.junit.Ignore;
/** Tests parsing a Base64 encoded subject. */
@@ -58,7 +59,10 @@ public class Base64HeaderMessage extends RawMailMessage {
.addTo(new Address("ekempin", "ekempin@google.com"))
.textContent(textContent)
.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();
}
}

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.receive.MailMessage;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.ZoneOffset;
import org.junit.Ignore;
/** Tests a message containing mime/alternative (text + html) content. */
@@ -98,7 +99,10 @@ public class HtmlMimeMessage extends RawMailMessage {
.htmlContent(unencodedHtmlContent)
.subject("Change in gerrit[master]: Implement receiver class structure and bindings")
.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();
}
}

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.receive.MailMessage;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.ZoneOffset;
import org.junit.Ignore;
/** Tests that non-UTF8 encodings are handled correctly. */
@@ -62,7 +63,10 @@ public class NonUTF8Message extends RawMailMessage {
.addTo(new Address("ekempin", "ekempin@google.com"))
.textContent(textContent)
.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();
}
}

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.receive.MailMessage;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.ZoneOffset;
import org.junit.Ignore;
/** Tests parsing a quoted printable encoded subject */
@@ -59,7 +60,10 @@ public class QuotedPrintableHeaderMessage extends RawMailMessage {
.addTo(new Address("ekempin", "ekempin@google.com"))
.textContent(textContent)
.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();
}
}

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.receive.MailMessage;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.ZoneOffset;
import org.junit.Ignore;
/** 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"))
.textContent(textContent)
.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(
"Authentication-Results: mx.google.com; dkim=pass header.i=@google.com;")
.addAdditionalHeader(