diff options
Diffstat (limited to 'javatests/com/google/gerrit/server/query/change/FakeQueryChangesTest.java')
-rw-r--r-- | javatests/com/google/gerrit/server/query/change/FakeQueryChangesTest.java | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/javatests/com/google/gerrit/server/query/change/FakeQueryChangesTest.java b/javatests/com/google/gerrit/server/query/change/FakeQueryChangesTest.java index 1e23420b04..01ae9601e5 100644 --- a/javatests/com/google/gerrit/server/query/change/FakeQueryChangesTest.java +++ b/javatests/com/google/gerrit/server/query/change/FakeQueryChangesTest.java @@ -14,10 +14,27 @@ package com.google.gerrit.server.query.change; +import static com.google.common.truth.Truth.assertThat; +import static com.google.gerrit.acceptance.testsuite.project.TestProjectUpdate.allowCapability; +import static com.google.gerrit.acceptance.testsuite.project.TestProjectUpdate.block; +import static com.google.gerrit.common.data.GlobalCapability.QUERY_LIMIT; +import static com.google.gerrit.server.group.SystemGroupBackend.REGISTERED_USERS; + +import com.google.gerrit.acceptance.UseClockStep; +import com.google.gerrit.entities.Permission; +import com.google.gerrit.entities.Project; +import com.google.gerrit.index.testing.AbstractFakeIndex; +import com.google.gerrit.server.config.AllProjectsName; +import com.google.gerrit.server.index.change.ChangeIndexCollection; import com.google.gerrit.testing.InMemoryModule; +import com.google.gerrit.testing.InMemoryRepositoryManager; +import com.google.gerrit.testing.InMemoryRepositoryManager.Repo; import com.google.inject.Guice; +import com.google.inject.Inject; import com.google.inject.Injector; +import org.eclipse.jgit.junit.TestRepository; import org.eclipse.jgit.lib.Config; +import org.junit.Test; /** * Test against {@link com.google.gerrit.index.testing.AbstractFakeIndex}. This test might seem @@ -25,6 +42,9 @@ import org.eclipse.jgit.lib.Config; * results as production indices. */ public abstract class FakeQueryChangesTest extends AbstractQueryChangesTest { + @Inject private ChangeIndexCollection changeIndexCollection; + @Inject protected AllProjectsName allProjects; + @Override protected Injector createInjector() { Config fakeConfig = new Config(config); @@ -32,4 +52,57 @@ public abstract class FakeQueryChangesTest extends AbstractQueryChangesTest { fakeConfig.setString("index", null, "type", "fake"); return Guice.createInjector(new InMemoryModule(fakeConfig)); } + + @Test + @UseClockStep + @SuppressWarnings("unchecked") + public void stopQueryIfNoMoreResults() throws Exception { + // create 2 visible changes + TestRepository<InMemoryRepositoryManager.Repo> testRepo = createProject("repo"); + insert(testRepo, newChange(testRepo)); + insert(testRepo, newChange(testRepo)); + + // create 2 invisible changes + TestRepository<Repo> hiddenProject = createProject("hiddenProject"); + insert(hiddenProject, newChange(hiddenProject)); + insert(hiddenProject, newChange(hiddenProject)); + projectOperations + .project(Project.nameKey("hiddenProject")) + .forUpdate() + .add(block(Permission.READ).ref("refs/*").group(REGISTERED_USERS)) + .update(); + + AbstractFakeIndex idx = (AbstractFakeIndex) changeIndexCollection.getSearchIndex(); + newQuery("status:new").withLimit(5).get(); + // Since the limit of the query (i.e. 5) is more than the total number of changes (i.e. 4), + // only 1 index search is expected. + assertThat(idx.getQueryCount()).isEqualTo(1); + } + + @Test + @UseClockStep + @SuppressWarnings("unchecked") + public void noLimitQueryPaginates() throws Exception { + TestRepository<InMemoryRepositoryManager.Repo> testRepo = createProject("repo"); + // create 4 changes + insert(testRepo, newChange(testRepo)); + insert(testRepo, newChange(testRepo)); + insert(testRepo, newChange(testRepo)); + insert(testRepo, newChange(testRepo)); + + // Set queryLimit to 2 + projectOperations + .project(allProjects) + .forUpdate() + .add(allowCapability(QUERY_LIMIT).group(REGISTERED_USERS).range(0, 2)) + .update(); + + AbstractFakeIndex idx = (AbstractFakeIndex) changeIndexCollection.getSearchIndex(); + + // 2 index searches are expected. The first index search will run with size 2 (i.e. + // the configured query-limit), and then we will paginate to get the remaining 2 + // changes with the second index search. + newQuery("status:new").withNoLimit().get(); + assertThat(idx.getQueryCount()).isEqualTo(2); + } } |