Switch to Java Date/Time API for mail related code
Change-Id: I2b13d56ac8ee5b2ffc9b20ec43a6b525d4491889
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user