Mapping: Translate git time to epoch millis

Git records time in seconds since epoch, Eiffel requires millis since
epoch.

Solves: Jira GER-1614
Change-Id: I841dbba504153986df52d3144503403f54e1ec19
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EiffelEventMapper.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EiffelEventMapper.java
index 10c4fa1..e1cd13c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EiffelEventMapper.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EiffelEventMapper.java
@@ -44,11 +44,17 @@
 
 public class EiffelEventMapper {
   private static final FluentLogger logger = FluentLogger.forEnclosingClass();
+  private static final long SECONDS_TO_MILLIS = 1000l;
   private final Provider<EiffelEventFactory> eventFactoryProvider;
   private final AccountResolver accountResolver;
   private final Provider<InternalChangeQuery> queryProvider;
   private final EventMappingConfig cfg;
 
+  private static long commitTimeInEpochMillis(RevCommit commit) {
+    /* Git records time in seconds since epoch, multiply by 1000. */
+    return commit.getCommitTime() * SECONDS_TO_MILLIS;
+  }
+
   @Inject
   public EiffelEventMapper(
       Provider<EiffelEventFactory> eventFactoryProvider,
@@ -101,7 +107,7 @@
             branch,
             commit.getName(),
             null,
-            Long.valueOf(commit.getCommitTime()),
+            commitTimeInEpochMillis(commit),
             parentEventIds);
   }
 
@@ -142,7 +148,7 @@
         logger.atFine().log(
             "\"submittedAt\" not set for (%s, %s, %s), falling back to commit.commitTime",
             repoName, branch, commit.getName());
-        submitInfo.submittedAt = Long.valueOf(commit.getCommitTime());
+        submitInfo.submittedAt = commitTimeInEpochMillis(commit);
       }
     } else {
       submitInfo = getSubmitInfo(commit, repoName, branch);
@@ -227,7 +233,7 @@
         "Unable to identify submitter of (%s,%s,%s), falling back to commit.committer.",
         repoName, branch, commit.getName());
     si.submitter = toPersonInfo(commit.getCommitterIdent());
-    si.submittedAt = Long.valueOf(commit.getCommitTime());
+    si.submittedAt = commitTimeInEpochMillis(commit);
     return si;
   }
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/EiffelEventsTest.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/EiffelEventsTest.java
index 8d08ad4..ce326f4 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/EiffelEventsTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/EiffelEventsTest.java
@@ -50,8 +50,13 @@
   protected static final String NAMESPACE = "gerrit-review";
   protected static final String TAG_NAME = "v1.0";
   protected static final String TAG_PURL_TEMPLATE = "pkg:generic/%s/%s@%s?vcs_url=git%%2B%s%%40%s";
+  private static final long SECONDS_TO_MILLIS = 1000l;
   private static int number = 0;
 
+  protected static final Long commitTimeInEpochMillis(RevCommit commit) {
+    return commit.getCommitTime() * SECONDS_TO_MILLIS;
+  }
+
   protected void assertSccLinks(List<UUID> parentUuids, EiffelLinkInfo... links) throws Exception {
     assertThat(links)
         .isEqualTo(
diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EventMappingIT.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EventMappingIT.java
index ca79ec3..575e1aa 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EventMappingIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EventMappingIT.java
@@ -103,7 +103,7 @@
     assertGitIdentifier(
         event.data.gitIdentifier, project.get(), "master", accountlessAuthor.getName());
     assertChangeInfo(event.data.change, "N/A", project.get(), accountlessAuthor.getName());
-    assertSccMeta(event.meta, Long.valueOf(accountlessAuthor.getCommitTime()));
+    assertSccMeta(event.meta, commitTimeInEpochMillis(accountlessAuthor));
     assertSccLinks(event.links);
   }
 
@@ -119,7 +119,7 @@
     assertGitIdentifier(
         event.data.gitIdentifier, project.get(), "master", authorWithAccount.getName());
     assertChangeInfo(event.data.change, "N/A", project.get(), authorWithAccount.getName());
-    assertSccMeta(event.meta, Long.valueOf(authorWithAccount.getCommitTime()));
+    assertSccMeta(event.meta, commitTimeInEpochMillis(authorWithAccount));
     assertSccLinks(event.links);
   }
 
@@ -178,7 +178,7 @@
 
     assertPersonInfo(event.data.submitter, AUTHOR_NAME, AUTHOR_EMAIL, null);
     assertGitIdentifier(event.data.gitIdentifier, project.get(), "master", revCommit.getName());
-    assertScsMeta(event.meta, Long.valueOf(revCommit.getCommitTime()));
+    assertScsMeta(event.meta, commitTimeInEpochMillis(revCommit));
     assertScsLinks(event.links);
   }
 
@@ -225,7 +225,7 @@
 
     assertPersonInfo(event.data.submitter, submitter.name, submitter.email, submitter.username);
     assertGitIdentifier(event.data.gitIdentifier, project.get(), "master", revCommit.getName());
-    assertScsMeta(event.meta, Long.valueOf(revCommit.getCommitTime()));
+    assertScsMeta(event.meta, commitTimeInEpochMillis(revCommit));
     assertScsLinks(event.links);
   }
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParserIT.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParserIT.java
index 9ff17be..2941b38 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParserIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParserIT.java
@@ -143,7 +143,7 @@
     EiffelSourceChangeSubmittedEventInfo notInSubmitTransaction =
         (EiffelSourceChangeSubmittedEventInfo) TestEventHub.EVENTS.get(2);
     assertEquals(admin.username(), notInSubmitTransaction.data.submitter.id);
-    assertEquals(Long.valueOf(headBeforeMerge.getCommitTime()), notInSubmitTransaction.meta.time);
+    assertEquals(commitTimeInEpochMillis(headBeforeMerge), notInSubmitTransaction.meta.time);
 
     assertCorrectEvent(3, scs.copy(mergedCommit));
     EiffelSourceChangeSubmittedEventInfo inSubmitTransaction =