Add query test for prepopulated fields
A correct secondary index implementation will use all the stored
fields to prepopulate fields in the resulting ChangeData. Add a test
for this case.
This test is somewhat imperfect in that we could theoretically store
fields that avoid only a repository lookup, not a ReviewDb lookup, and
we currently have no way of swapping out the GitRepositoryManager in a
request context. This is an issue for the mergeable bit, but for the other
fields, the test is definitely sufficient.
Change-Id: I5eb26decff8642cc535a3359c072f931b523ba2e
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java
index 1372479..27c3443 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java
@@ -62,6 +62,7 @@
import com.google.gerrit.server.util.RequestContext;
import com.google.gerrit.server.util.ThreadLocalRequestContext;
import com.google.gerrit.testutil.ConfigSuite;
+import com.google.gerrit.testutil.DisabledReviewDb;
import com.google.gerrit.testutil.InMemoryDatabase;
import com.google.gerrit.testutil.InMemoryRepositoryManager;
import com.google.gerrit.testutil.InMemoryRepositoryManager.Repo;
@@ -123,6 +124,8 @@
@Inject protected InternalChangeQuery internalChangeQuery;
@Inject protected NotesMigration notesMigration;
@Inject protected ProjectControl.GenericFactory projectControlFactory;
+ @Inject protected ChangeQueryBuilder queryBuilder;
+ @Inject protected QueryProcessor queryProcessor;
@Inject protected SchemaCreator schemaCreator;
@Inject protected ThreadLocalRequestContext requestContext;
@@ -1195,6 +1198,41 @@
}
}
+ @Test
+ public void prepopulatedFields() throws Exception {
+ assume().that(notesMigration.enabled()).isFalse();
+ TestRepository<Repo> repo = createProject("repo");
+ Change change = newChange(repo, null, null, null, null).insert();
+
+ db = new DisabledReviewDb();
+ requestContext.setContext(newRequestContext(userId));
+ // Use QueryProcessor directly instead of API so we get ChangeDatas back.
+ List<ChangeData> cds = queryProcessor
+ .queryChanges(queryBuilder.parse(change.getId().toString()))
+ .changes();
+ assertThat(cds).hasSize(1);
+
+ ChangeData cd = cds.get(0);
+ cd.change();
+ cd.patchSets();
+ cd.currentApprovals();
+ cd.changedLines();
+ cd.reviewedBy();
+
+ // TODO(dborowitz): Swap out GitRepositoryManager somehow? Will probably be
+ // necessary for notedb anyway.
+ cd.isMergeable();
+
+ // Don't use ExpectedException since that wouldn't distinguish between
+ // failures here and on the previous calls.
+ try {
+ cd.messages();
+ } catch (AssertionError e) {
+ assertThat(e.getMessage()).isEqualTo(DisabledReviewDb.MESSAGE);
+ }
+ }
+
+
protected ChangeInserter newChange(
TestRepository<Repo> repo,
@Nullable RevCommit commit, @Nullable String key, @Nullable Integer owner,
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/query/change/LuceneQueryChangesV14Test.java b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/LuceneQueryChangesV14Test.java
index 79e326f..9bdd795 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/query/change/LuceneQueryChangesV14Test.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/LuceneQueryChangesV14Test.java
@@ -71,6 +71,13 @@
// Ignore.
}
+ @Override
+ @Ignore
+ @Test
+ public void prepopulatedFields() throws Exception {
+ // Ignore.
+ }
+
@Test
public void isReviewed() throws Exception {
clockStepMs = MILLISECONDS.convert(2, MINUTES);
diff --git a/gerrit-server/src/test/java/com/google/gerrit/testutil/DisabledReviewDb.java b/gerrit-server/src/test/java/com/google/gerrit/testutil/DisabledReviewDb.java
index 7825cfb..d5444e3 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/testutil/DisabledReviewDb.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/testutil/DisabledReviewDb.java
@@ -42,7 +42,7 @@
/** ReviewDb that is disabled for testing. */
public class DisabledReviewDb implements ReviewDb {
- private static final String MESSAGE = "ReviewDb is disabled for this test";
+ public static final String MESSAGE = "ReviewDb is disabled for this test";
@Override
public void close() {