Acceptance tests: Don't assume counters start at 1
Instead of hard-coding change IDs, cache hit counts, etc., record the actual values and use them. Similarly, scope search results to projects where appropriate so that total change counts are correct. Change-Id: I2d0acc17eb186d4c4de364fe1a9e06e1b4dba777
This commit is contained in:
@@ -33,11 +33,13 @@ import com.google.gerrit.extensions.common.LabelInfo;
|
||||
import com.google.gerrit.extensions.common.RevisionInfo;
|
||||
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
||||
import com.google.gerrit.reviewdb.client.Account;
|
||||
import com.google.gerrit.reviewdb.client.Change;
|
||||
import com.google.gerrit.reviewdb.client.PatchSet;
|
||||
|
||||
import org.eclipse.jgit.lib.Constants;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
@@ -58,7 +60,7 @@ public class ChangeIT extends AbstractDaemonTest {
|
||||
assertThat(c.mergeable).isTrue();
|
||||
assertThat(c.changeId).isEqualTo(r.getChangeId());
|
||||
assertThat(c.created).isEqualTo(c.updated);
|
||||
assertThat(c._number).is(1);
|
||||
assertThat(c._number).is(r.getChange().getId().get());
|
||||
|
||||
assertThat(c.owner._accountId).is(admin.getId().get());
|
||||
assertThat(c.owner.name).isNull();
|
||||
@@ -233,38 +235,35 @@ public class ChangeIT extends AbstractDaemonTest {
|
||||
|
||||
@Test
|
||||
public void queryChangesNoQuery() throws Exception {
|
||||
PushOneCommit.Result r1 = createChange();
|
||||
PushOneCommit.Result r2 = createChange();
|
||||
PushOneCommit.Result r = createChange();
|
||||
List<ChangeInfo> results = gApi.changes().query().get();
|
||||
assertThat(results).hasSize(2);
|
||||
assertThat(results.get(0).changeId).isEqualTo(r2.getChangeId());
|
||||
assertThat(results.get(1).changeId).isEqualTo(r1.getChangeId());
|
||||
assertThat(results.size()).isAtLeast(1);
|
||||
List<Integer> ids = new ArrayList<>(results.size());
|
||||
for (int i = 0; i < results.size(); i++) {
|
||||
ChangeInfo info = results.get(i);
|
||||
if (i == 0) {
|
||||
assertThat(info._number).isEqualTo(r.getChange().getId().get());
|
||||
}
|
||||
assertThat(Change.Status.forChangeStatus(info.status).isOpen()).isTrue();
|
||||
ids.add(info._number);
|
||||
}
|
||||
assertThat(ids).contains(r.getChange().getId().get());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryChangesNoResults() throws Exception {
|
||||
createChange();
|
||||
List<ChangeInfo> results = query("status:open");
|
||||
assertThat(results).hasSize(1);
|
||||
results = query("status:closed");
|
||||
assertThat(results).isEmpty();
|
||||
assertThat(query("message:test")).isNotEmpty();
|
||||
assertThat(query("message:{" + getClass().getName() + "fhqwhgads}"))
|
||||
.isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryChangesOneTerm() throws Exception {
|
||||
PushOneCommit.Result r1 = createChange();
|
||||
PushOneCommit.Result r2 = createChange();
|
||||
List<ChangeInfo> results = query("status:open");
|
||||
assertThat(results).hasSize(2);
|
||||
assertThat(results.get(0).changeId).isEqualTo(r2.getChangeId());
|
||||
assertThat(results.get(1).changeId).isEqualTo(r1.getChangeId());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryChangesMultipleTerms() throws Exception {
|
||||
public void queryChanges() throws Exception {
|
||||
PushOneCommit.Result r1 = createChange();
|
||||
createChange();
|
||||
List<ChangeInfo> results = query("status:open " + r1.getChangeId());
|
||||
List<ChangeInfo> results =
|
||||
query("project:{" + project.get() + "} " + r1.getChangeId());
|
||||
assertThat(Iterables.getOnlyElement(results).changeId)
|
||||
.isEqualTo(r1.getChangeId());
|
||||
}
|
||||
@@ -283,7 +282,8 @@ public class ChangeIT extends AbstractDaemonTest {
|
||||
public void queryChangesStart() throws Exception {
|
||||
PushOneCommit.Result r1 = createChange();
|
||||
createChange();
|
||||
List<ChangeInfo> results = gApi.changes().query().withStart(1).get();
|
||||
List<ChangeInfo> results = gApi.changes()
|
||||
.query("project:{" + project.get() + "}").withStart(1).get();
|
||||
assertThat(Iterables.getOnlyElement(results).changeId)
|
||||
.isEqualTo(r1.getChangeId());
|
||||
}
|
||||
@@ -321,7 +321,8 @@ public class ChangeIT extends AbstractDaemonTest {
|
||||
@Test
|
||||
public void queryChangesOwnerWithDifferentUsers() throws Exception {
|
||||
PushOneCommit.Result r = createChange();
|
||||
assertThat(Iterables.getOnlyElement(query("owner:self")).changeId)
|
||||
assertThat(Iterables.getOnlyElement(
|
||||
query("project:{" + project.get() + "} owner:self")).changeId)
|
||||
.isEqualTo(r.getChangeId());
|
||||
setApiUser(user);
|
||||
assertThat(query("owner:self")).isEmpty();
|
||||
|
||||
@@ -68,22 +68,35 @@ public class VisibleRefFilterIT extends AbstractDaemonTest {
|
||||
|
||||
private AccountGroup.UUID admins;
|
||||
|
||||
private Change.Id c1;
|
||||
private Change.Id c2;
|
||||
private String r1;
|
||||
private String r2;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
admins = groupCache.get(new AccountGroup.NameKey("Administrators"))
|
||||
.getGroupUUID();
|
||||
setUpChanges();
|
||||
setUpPermissions();
|
||||
setUpChanges();
|
||||
}
|
||||
|
||||
private void setUpPermissions() throws Exception {
|
||||
// Remove read permissions for all users besides admin. This method is
|
||||
// idempotent, so is safe to call on every test setup.
|
||||
ProjectConfig pc = projectCache.checkedGet(allProjects).getConfig();
|
||||
for (AccessSection sec : pc.getAccessSections()) {
|
||||
sec.removePermission(Permission.READ);
|
||||
}
|
||||
Util.allow(pc, Permission.READ, admins, "refs/*");
|
||||
saveProjectConfig(allProjects, pc);
|
||||
}
|
||||
|
||||
private static String changeRefPrefix(Change.Id id) {
|
||||
String ps = new PatchSet.Id(id, 1).toRefName();
|
||||
return ps.substring(0, ps.length() - 1);
|
||||
}
|
||||
|
||||
private void setUpChanges() throws Exception {
|
||||
gApi.projects()
|
||||
.name(project.get())
|
||||
@@ -94,9 +107,13 @@ public class VisibleRefFilterIT extends AbstractDaemonTest {
|
||||
PushOneCommit.Result mr = pushFactory.create(db, admin.getIdent(), testRepo)
|
||||
.to("refs/for/master%submit");
|
||||
mr.assertOkStatus();
|
||||
c1 = mr.getChange().getId();
|
||||
r1 = changeRefPrefix(c1);
|
||||
PushOneCommit.Result br = pushFactory.create(db, admin.getIdent(), testRepo)
|
||||
.to("refs/for/branch%submit");
|
||||
br.assertOkStatus();
|
||||
c2 = br.getChange().getId();
|
||||
r2 = changeRefPrefix(c2);
|
||||
|
||||
Repository repo = repoManager.openRepository(project);
|
||||
try {
|
||||
@@ -126,10 +143,10 @@ public class VisibleRefFilterIT extends AbstractDaemonTest {
|
||||
|
||||
assertRefs(
|
||||
"HEAD",
|
||||
"refs/changes/01/1/1",
|
||||
"refs/changes/01/1/meta",
|
||||
"refs/changes/02/2/1",
|
||||
"refs/changes/02/2/meta",
|
||||
r1 + "1",
|
||||
r1 + "meta",
|
||||
r2 + "1",
|
||||
r2 + "meta",
|
||||
"refs/heads/branch",
|
||||
"refs/heads/master",
|
||||
"refs/tags/branch-tag",
|
||||
@@ -143,10 +160,10 @@ public class VisibleRefFilterIT extends AbstractDaemonTest {
|
||||
|
||||
assertRefs(
|
||||
"HEAD",
|
||||
"refs/changes/01/1/1",
|
||||
"refs/changes/01/1/meta",
|
||||
"refs/changes/02/2/1",
|
||||
"refs/changes/02/2/meta",
|
||||
r1 + "1",
|
||||
r1 + "meta",
|
||||
r2 + "1",
|
||||
r2 + "meta",
|
||||
"refs/heads/branch",
|
||||
"refs/heads/master",
|
||||
"refs/meta/config",
|
||||
@@ -161,8 +178,8 @@ public class VisibleRefFilterIT extends AbstractDaemonTest {
|
||||
|
||||
assertRefs(
|
||||
"HEAD",
|
||||
"refs/changes/01/1/1",
|
||||
"refs/changes/01/1/meta",
|
||||
r1 + "1",
|
||||
r1 + "meta",
|
||||
"refs/heads/master",
|
||||
"refs/tags/master-tag");
|
||||
}
|
||||
@@ -173,8 +190,8 @@ public class VisibleRefFilterIT extends AbstractDaemonTest {
|
||||
allow(Permission.READ, REGISTERED_USERS, "refs/heads/branch");
|
||||
|
||||
assertRefs(
|
||||
"refs/changes/02/2/1",
|
||||
"refs/changes/02/2/meta",
|
||||
r2 + "1",
|
||||
r2 + "meta",
|
||||
"refs/heads/branch",
|
||||
"refs/tags/branch-tag",
|
||||
// master branch is not visible but master-tag is reachable from branch
|
||||
@@ -187,24 +204,24 @@ public class VisibleRefFilterIT extends AbstractDaemonTest {
|
||||
allow(Permission.READ, REGISTERED_USERS, "refs/heads/master");
|
||||
deny(Permission.READ, REGISTERED_USERS, "refs/heads/branch");
|
||||
|
||||
Change c1 = db.changes().get(new Change.Id(1));
|
||||
PatchSet ps1 = db.patchSets().get(new PatchSet.Id(c1.getId(), 1));
|
||||
Change change1 = db.changes().get(c1);
|
||||
PatchSet ps1 = db.patchSets().get(new PatchSet.Id(c1, 1));
|
||||
|
||||
// Admin's edit is not visible.
|
||||
setApiUser(admin);
|
||||
editModifier.createEdit(c1, ps1);
|
||||
editModifier.createEdit(change1, ps1);
|
||||
|
||||
// User's edit is visible.
|
||||
setApiUser(user);
|
||||
editModifier.createEdit(c1, ps1);
|
||||
editModifier.createEdit(change1, ps1);
|
||||
|
||||
assertRefs(
|
||||
"HEAD",
|
||||
"refs/changes/01/1/1",
|
||||
"refs/changes/01/1/meta",
|
||||
r1 + "1",
|
||||
r1 + "meta",
|
||||
"refs/heads/master",
|
||||
"refs/tags/master-tag",
|
||||
"refs/users/01/1000001/edit-1/1");
|
||||
"refs/users/01/1000001/edit-" + c1.get() + "/1");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -214,27 +231,27 @@ public class VisibleRefFilterIT extends AbstractDaemonTest {
|
||||
deny(Permission.READ, REGISTERED_USERS, "refs/heads/master");
|
||||
allow(Permission.READ, REGISTERED_USERS, "refs/heads/branch");
|
||||
|
||||
Change c1 = db.changes().get(new Change.Id(1));
|
||||
PatchSet ps1 = db.patchSets().get(new PatchSet.Id(c1.getId(), 1));
|
||||
Change change1 = db.changes().get(c1);
|
||||
PatchSet ps1 = db.patchSets().get(new PatchSet.Id(c1, 1));
|
||||
setApiUser(admin);
|
||||
editModifier.createEdit(c1, ps1);
|
||||
editModifier.createEdit(change1, ps1);
|
||||
setApiUser(user);
|
||||
editModifier.createEdit(c1, ps1);
|
||||
editModifier.createEdit(change1, ps1);
|
||||
|
||||
assertRefs(
|
||||
// Change 1 is visible due to accessDatabase capability, even though
|
||||
// refs/heads/master is not.
|
||||
"refs/changes/01/1/1",
|
||||
"refs/changes/01/1/meta",
|
||||
"refs/changes/02/2/1",
|
||||
"refs/changes/02/2/meta",
|
||||
r1 + "1",
|
||||
r1 + "meta",
|
||||
r2 + "1",
|
||||
r2 + "meta",
|
||||
"refs/heads/branch",
|
||||
"refs/tags/branch-tag",
|
||||
// See comment in subsetOfBranchesVisibleNotIncludingHead.
|
||||
"refs/tags/master-tag",
|
||||
// All edits are visible due to accessDatabase capability.
|
||||
"refs/users/00/1000000/edit-1/1",
|
||||
"refs/users/01/1000001/edit-1/1");
|
||||
"refs/users/00/1000000/edit-" + c1.get() + "/1",
|
||||
"refs/users/01/1000001/edit-" + c1.get() + "/1");
|
||||
} finally {
|
||||
removeGlobalCapabilities(REGISTERED_USERS, GlobalCapability.ACCESS_DATABASE);
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ public class GetCacheIT extends AbstractDaemonTest {
|
||||
|
||||
assertThat(result.name).isEqualTo("accounts");
|
||||
assertThat(result.type).isEqualTo(CacheType.MEM);
|
||||
assertThat(result.entries.mem).isEqualTo(1);
|
||||
assertThat(result.entries.mem).isAtLeast(1L);
|
||||
assertThat(result.averageGet).isNotNull();
|
||||
assertThat(result.averageGet).endsWith("s");
|
||||
assertThat(result.entries.disk).isNull();
|
||||
|
||||
@@ -45,7 +45,7 @@ public class ListCachesIT extends AbstractDaemonTest {
|
||||
assertThat(result).containsKey("accounts");
|
||||
CacheInfo accountsCacheInfo = result.get("accounts");
|
||||
assertThat(accountsCacheInfo.type).isEqualTo(CacheType.MEM);
|
||||
assertThat(accountsCacheInfo.entries.mem).isEqualTo(1);
|
||||
assertThat(accountsCacheInfo.entries.mem).isAtLeast(1L);
|
||||
assertThat(accountsCacheInfo.averageGet).isNotNull();
|
||||
assertThat(accountsCacheInfo.averageGet).endsWith("s");
|
||||
assertThat(accountsCacheInfo.entries.disk).isNull();
|
||||
|
||||
Reference in New Issue
Block a user