Merge "QueryIT: Add test for timestamp in query with output in text format"
diff --git a/gerrit-acceptance-tests/BUCK b/gerrit-acceptance-tests/BUCK
index 3f7e04f..d14bae2 100644
--- a/gerrit-acceptance-tests/BUCK
+++ b/gerrit-acceptance-tests/BUCK
@@ -33,6 +33,7 @@
'//lib/guice:guice',
'//lib/guice:guice-assistedinject',
'//lib/guice:guice-servlet',
+ '//lib/joda:joda-time',
'//lib/log:api',
'//lib/jgit/org.eclipse.jgit:jgit',
'//lib/mail:mail',
diff --git a/gerrit-acceptance-tests/BUILD b/gerrit-acceptance-tests/BUILD
index 71b1b45..66ce1b5 100644
--- a/gerrit-acceptance-tests/BUILD
+++ b/gerrit-acceptance-tests/BUILD
@@ -34,6 +34,7 @@
'//lib/guice:guice',
'//lib/guice:guice-assistedinject',
'//lib/guice:guice-servlet',
+ '//lib/joda:joda-time',
'//lib/log:api',
'//lib/jgit/org.eclipse.jgit:jgit',
'//lib/mina:sshd',
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/ssh/QueryIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/ssh/QueryIT.java
index 2865ff87..e80726a 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/ssh/QueryIT.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/ssh/QueryIT.java
@@ -17,7 +17,11 @@
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assert_;
import static com.google.gerrit.acceptance.GitUtil.initSsh;
+import static com.google.gerrit.server.query.change.OutputStreamQuery.TIMESTAMP_FORMAT;
+import static java.util.concurrent.TimeUnit.SECONDS;
+import com.google.common.base.CharMatcher;
+import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
import com.google.gerrit.acceptance.AbstractDaemonTest;
import com.google.gerrit.acceptance.NoHttpd;
@@ -27,8 +31,13 @@
import com.google.gerrit.extensions.api.changes.ReviewInput;
import com.google.gerrit.extensions.client.Side;
import com.google.gerrit.server.data.ChangeAttribute;
+import com.google.gerrit.testutil.TestTimeUtil;
import com.google.gson.Gson;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+import org.junit.After;
+import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
@@ -40,6 +49,20 @@
private static Gson gson = new Gson();
+ private String systemTimeZone;
+
+ @Before
+ public void setTimeForTesting() {
+ systemTimeZone = System.setProperty("user.timezone", "US/Eastern");
+ TestTimeUtil.resetWithClockStep(1, SECONDS);
+ }
+
+ @After
+ public void resetTime() {
+ TestTimeUtil.useSystemTime();
+ System.setProperty("user.timezone", systemTimeZone);
+ }
+
@Test
public void testBasicQueryJSON() throws Exception {
String changeId1 = createChange().getChangeId();
@@ -323,6 +346,45 @@
userSession.close();
}
+ @Test
+ public void testTimestampInTextQuery() throws Exception {
+ DateTimeFormatter dtf = DateTimeFormat.forPattern(TIMESTAMP_FORMAT);
+ String createdOnKey = "createdOn:";
+ PushOneCommit.Result result = createChange();
+ String textResult = executeSuccessfulTextQuery(result.getChangeId());
+ assertThat(textResult).isNotNull();
+ assertThat(textResult).contains(createdOnKey);
+ String value = getValueFromText(textResult, createdOnKey);
+ assertThat(value).isNotNull();
+ assertThat(value).isEqualTo("2009-09-30 14:00:02 PDT");
+ long expectedCreatedOn = result.getChange().change().getCreatedOn().getTime();
+ assertThat(dtf.parseMillis(value)).isEqualTo(expectedCreatedOn);
+ }
+
+ private String getValueFromText(String text, String key) {
+ Splitter s = Splitter.on(CharMatcher.is('\n')).trimResults().omitEmptyStrings();
+ for (String line : s.splitToList(text)) {
+ if (line.startsWith(key)) {
+ return line.substring(key.length()).trim();
+ }
+ }
+ return null;
+ }
+
+ private String executeSuccessfulTextQuery(String params, SshSession session)
+ throws Exception {
+ String rawResponse =
+ session.exec("gerrit query --format=TEXT " + params);
+ assert_().withFailureMessage(session.getError())
+ .that(session.hasError()).isFalse();
+ return rawResponse;
+ }
+
+ private String executeSuccessfulTextQuery(String params)
+ throws Exception {
+ return executeSuccessfulTextQuery(params, adminSshSession);
+ }
+
private List<ChangeAttribute> executeSuccessfulQuery(String params,
SshSession session) throws Exception {
String rawResponse =
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/OutputStreamQuery.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/OutputStreamQuery.java
index 5e08ee3..4586df7 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/OutputStreamQuery.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/OutputStreamQuery.java
@@ -63,11 +63,13 @@
* command.
*/
public class OutputStreamQuery {
+ public static final String TIMESTAMP_FORMAT = "yyyy-MM-dd HH:mm:ss zzz";
+
private static final Logger log =
LoggerFactory.getLogger(OutputStreamQuery.class);
private static final DateTimeFormatter dtf =
- DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss zzz");
+ DateTimeFormat.forPattern(TIMESTAMP_FORMAT);
public enum OutputFormat {
TEXT, JSON