summaryrefslogtreecommitdiffstats
path: root/javatests/com/google/gerrit/server/query/change/FakeQueryChangesTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'javatests/com/google/gerrit/server/query/change/FakeQueryChangesTest.java')
-rw-r--r--javatests/com/google/gerrit/server/query/change/FakeQueryChangesTest.java73
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);
+ }
}