Merge "Configure ProjectResetter through a plain data class."

This commit is contained in:
Edwin Kempin
2018-03-14 10:10:05 +00:00
committed by Gerrit Code Review
6 changed files with 78 additions and 35 deletions

View File

@@ -201,7 +201,12 @@ public abstract class AbstractDaemonTest {
firstTest = description; firstTest = description;
} }
beforeTest(description); beforeTest(description);
try (ProjectResetter resetter = resetProjects(projectResetter.builder())) { ProjectResetter.Config input = resetProjects();
if (input == null) {
input = defaultResetProjects();
}
try (ProjectResetter resetter = projectResetter.builder().build(input)) {
AbstractDaemonTest.this.resetter = resetter; AbstractDaemonTest.this.resetter = resetter;
base.evaluate(); base.evaluate();
} finally { } finally {
@@ -317,8 +322,12 @@ public abstract class AbstractDaemonTest {
} }
/** Controls which project and branches should be reset after each test case. */ /** Controls which project and branches should be reset after each test case. */
protected ProjectResetter resetProjects(ProjectResetter.Builder resetter) throws IOException { protected ProjectResetter.Config resetProjects() {
return resetter return null;
}
private ProjectResetter.Config defaultResetProjects() {
return new ProjectResetter.Config()
// Don't reset all refs so that refs/sequences/changes is not touched and change IDs are // Don't reset all refs so that refs/sequences/changes is not touched and change IDs are
// not reused. // not reused.
.reset(allProjects, RefNames.REFS_CONFIG) .reset(allProjects, RefNames.REFS_CONFIG)
@@ -331,8 +340,7 @@ public abstract class AbstractDaemonTest {
RefNames.REFS_USERS + "*", RefNames.REFS_USERS + "*",
RefNames.REFS_EXTERNAL_IDS, RefNames.REFS_EXTERNAL_IDS,
RefNames.REFS_STARRED_CHANGES + "*", RefNames.REFS_STARRED_CHANGES + "*",
RefNames.REFS_DRAFT_COMMENTS + "*") RefNames.REFS_DRAFT_COMMENTS + "*");
.build();
} }
protected void restartAsSlave() throws Exception { protected void restartAsSlave() throws Exception {

View File

@@ -25,7 +25,6 @@ import com.google.common.collect.ImmutableList;
import com.google.common.truth.FailureMetadata; import com.google.common.truth.FailureMetadata;
import com.google.common.truth.Subject; import com.google.common.truth.Subject;
import com.google.common.truth.Truth; import com.google.common.truth.Truth;
import com.google.gerrit.acceptance.ProjectResetter.Builder;
import com.google.gerrit.common.Nullable; import com.google.gerrit.common.Nullable;
import com.google.gerrit.extensions.api.changes.RecipientType; import com.google.gerrit.extensions.api.changes.RecipientType;
import com.google.gerrit.extensions.api.changes.ReviewInput; import com.google.gerrit.extensions.api.changes.ReviewInput;
@@ -63,10 +62,10 @@ public abstract class AbstractNotificationTest extends AbstractDaemonTest {
} }
@Override @Override
protected ProjectResetter resetProjects(Builder resetter) throws IOException { protected ProjectResetter.Config resetProjects() {
// Don't reset anything so that stagedUsers can be cached across all tests. // Don't reset anything so that stagedUsers can be cached across all tests.
// Without this caching these tests become much too slow. // Without this caching these tests become much too slow.
return resetter.build(); return new ProjectResetter.Config();
} }
protected static FakeEmailSenderSubject assertThat(FakeEmailSender sender) { protected static FakeEmailSenderSubject assertThat(FakeEmailSender sender) {

View File

@@ -88,8 +88,6 @@ public class ProjectResetter implements AutoCloseable {
@Nullable private final AccountCache accountCache; @Nullable private final AccountCache accountCache;
@Nullable private final ProjectCache projectCache; @Nullable private final ProjectCache projectCache;
private final Multimap<Project.NameKey, String> refsByProject;
@Inject @Inject
public Builder( public Builder(
GitRepositoryManager repoManager, GitRepositoryManager repoManager,
@@ -102,10 +100,27 @@ public class ProjectResetter implements AutoCloseable {
this.accountCreator = accountCreator; this.accountCreator = accountCreator;
this.accountCache = accountCache; this.accountCache = accountCache;
this.projectCache = projectCache; this.projectCache = projectCache;
}
public ProjectResetter build(ProjectResetter.Config input) throws IOException {
return new ProjectResetter(
repoManager,
allUsersName,
accountCreator,
accountCache,
projectCache,
input.refsByProject);
}
}
public static class Config {
private final Multimap<Project.NameKey, String> refsByProject;
public Config() {
this.refsByProject = MultimapBuilder.hashKeys().arrayListValues().build(); this.refsByProject = MultimapBuilder.hashKeys().arrayListValues().build();
} }
public Builder reset(Project.NameKey project, String... refPatterns) { public Config reset(Project.NameKey project, String... refPatterns) {
List<String> refPatternList = Arrays.asList(refPatterns); List<String> refPatternList = Arrays.asList(refPatterns);
if (refPatternList.isEmpty()) { if (refPatternList.isEmpty()) {
refPatternList = ImmutableList.of(RefNames.REFS + "*"); refPatternList = ImmutableList.of(RefNames.REFS + "*");
@@ -113,11 +128,6 @@ public class ProjectResetter implements AutoCloseable {
refsByProject.putAll(project, refPatternList); refsByProject.putAll(project, refPatternList);
return this; return this;
} }
public ProjectResetter build() throws IOException {
return new ProjectResetter(
repoManager, allUsersName, accountCreator, accountCache, projectCache, refsByProject);
}
} }
@Inject private GitRepositoryManager repoManager; @Inject private GitRepositoryManager repoManager;

View File

@@ -71,7 +71,8 @@ public class ProjectResetterTest extends GerritBaseTests {
public void resetAllRefs() throws Exception { public void resetAllRefs() throws Exception {
Ref matchingRef = createRef("refs/any/test"); Ref matchingRef = createRef("refs/any/test");
try (ProjectResetter resetProject = builder().reset(project).build()) { try (ProjectResetter resetProject =
builder().build(new ProjectResetter.Config().reset(project))) {
updateRef(matchingRef); updateRef(matchingRef);
} }
@@ -87,7 +88,10 @@ public class ProjectResetterTest extends GerritBaseTests {
Ref updatedNonMatchingRef; Ref updatedNonMatchingRef;
try (ProjectResetter resetProject = try (ProjectResetter resetProject =
builder().reset(project, "refs/match/*", "refs/another-match/*").build()) { builder()
.build(
new ProjectResetter.Config()
.reset(project, "refs/match/*", "refs/another-match/*"))) {
updateRef(matchingRef); updateRef(matchingRef);
updateRef(anotherMatchingRef); updateRef(anotherMatchingRef);
updatedNonMatchingRef = updateRef(nonMatchingRef); updatedNonMatchingRef = updateRef(nonMatchingRef);
@@ -107,7 +111,10 @@ public class ProjectResetterTest extends GerritBaseTests {
Ref anotherMatchingRef; Ref anotherMatchingRef;
Ref nonMatchingRef; Ref nonMatchingRef;
try (ProjectResetter resetProject = try (ProjectResetter resetProject =
builder().reset(project, "refs/match/*", "refs/another-match/*").build()) { builder()
.build(
new ProjectResetter.Config()
.reset(project, "refs/match/*", "refs/another-match/*"))) {
matchingRef = createRef("refs/match/test"); matchingRef = createRef("refs/match/test");
anotherMatchingRef = createRef("refs/another-match/test"); anotherMatchingRef = createRef("refs/another-match/test");
nonMatchingRef = createRef("refs/no-match/test"); nonMatchingRef = createRef("refs/no-match/test");
@@ -135,7 +142,11 @@ public class ProjectResetterTest extends GerritBaseTests {
Ref updatedNonMatchingRefProject1; Ref updatedNonMatchingRefProject1;
Ref updatedNonMatchingRefProject2; Ref updatedNonMatchingRefProject2;
try (ProjectResetter resetProject = try (ProjectResetter resetProject =
builder().reset(project, "refs/foo/*").reset(project2, "refs/bar/*").build()) { builder()
.build(
new ProjectResetter.Config()
.reset(project, "refs/foo/*")
.reset(project2, "refs/bar/*"))) {
updateRef(matchingRefProject1); updateRef(matchingRefProject1);
updatedNonMatchingRefProject1 = updateRef(nonMatchingRefProject1); updatedNonMatchingRefProject1 = updateRef(nonMatchingRefProject1);
@@ -162,7 +173,11 @@ public class ProjectResetterTest extends GerritBaseTests {
Ref matchingRefProject2; Ref matchingRefProject2;
Ref nonMatchingRefProject2; Ref nonMatchingRefProject2;
try (ProjectResetter resetProject = try (ProjectResetter resetProject =
builder().reset(project, "refs/foo/*").reset(project2, "refs/bar/*").build()) { builder()
.build(
new ProjectResetter.Config()
.reset(project, "refs/foo/*")
.reset(project2, "refs/bar/*"))) {
matchingRefProject1 = createRef("refs/foo/test"); matchingRefProject1 = createRef("refs/foo/test");
nonMatchingRefProject1 = createRef("refs/bar/test"); nonMatchingRefProject1 = createRef("refs/bar/test");
@@ -183,7 +198,9 @@ public class ProjectResetterTest extends GerritBaseTests {
public void onlyDeleteNewlyCreatedWithOverlappingRefPatterns() throws Exception { public void onlyDeleteNewlyCreatedWithOverlappingRefPatterns() throws Exception {
Ref matchingRef; Ref matchingRef;
try (ProjectResetter resetProject = try (ProjectResetter resetProject =
builder().reset(project, "refs/match/*", "refs/match/test").build()) { builder()
.build(
new ProjectResetter.Config().reset(project, "refs/match/*", "refs/match/test"))) {
// This ref matches 2 ref pattern, ProjectResetter should try to delete it only once. // This ref matches 2 ref pattern, ProjectResetter should try to delete it only once.
matchingRef = createRef("refs/match/test"); matchingRef = createRef("refs/match/test");
} }
@@ -206,7 +223,8 @@ public class ProjectResetterTest extends GerritBaseTests {
Ref nonMetaConfig = createRef("refs/heads/master"); Ref nonMetaConfig = createRef("refs/heads/master");
try (ProjectResetter resetProject = try (ProjectResetter resetProject =
builder(null, null, projectCache).reset(project).reset(project2).build()) { builder(null, null, projectCache)
.build(new ProjectResetter.Config().reset(project).reset(project2))) {
updateRef(nonMetaConfig); updateRef(nonMetaConfig);
updateRef(repo2, metaConfig); updateRef(repo2, metaConfig);
} }
@@ -225,7 +243,8 @@ public class ProjectResetterTest extends GerritBaseTests {
EasyMock.replay(projectCache); EasyMock.replay(projectCache);
try (ProjectResetter resetProject = try (ProjectResetter resetProject =
builder(null, null, projectCache).reset(project).reset(project2).build()) { builder(null, null, projectCache)
.build(new ProjectResetter.Config().reset(project).reset(project2))) {
createRef("refs/heads/master"); createRef("refs/heads/master");
createRef(repo2, RefNames.REFS_CONFIG); createRef(repo2, RefNames.REFS_CONFIG);
} }
@@ -249,7 +268,8 @@ public class ProjectResetterTest extends GerritBaseTests {
Ref nonUserBranch = createRef(RefNames.refsUsers(new Account.Id(2))); Ref nonUserBranch = createRef(RefNames.refsUsers(new Account.Id(2)));
try (ProjectResetter resetProject = try (ProjectResetter resetProject =
builder(null, accountCache, null).reset(project).reset(allUsers).build()) { builder(null, accountCache, null)
.build(new ProjectResetter.Config().reset(project).reset(allUsers))) {
updateRef(nonUserBranch); updateRef(nonUserBranch);
updateRef(allUsersRepo, userBranch); updateRef(allUsersRepo, userBranch);
} }
@@ -269,7 +289,8 @@ public class ProjectResetterTest extends GerritBaseTests {
EasyMock.replay(accountCache); EasyMock.replay(accountCache);
try (ProjectResetter resetProject = try (ProjectResetter resetProject =
builder(null, accountCache, null).reset(project).reset(allUsers).build()) { builder(null, accountCache, null)
.build(new ProjectResetter.Config().reset(project).reset(allUsers))) {
// Non-user branch because it's not in All-Users. // Non-user branch because it's not in All-Users.
createRef(RefNames.refsUsers(new Account.Id(2))); createRef(RefNames.refsUsers(new Account.Id(2)));
@@ -300,7 +321,8 @@ public class ProjectResetterTest extends GerritBaseTests {
Ref nonUserBranch = createRef(RefNames.refsUsers(new Account.Id(3))); Ref nonUserBranch = createRef(RefNames.refsUsers(new Account.Id(3)));
try (ProjectResetter resetProject = try (ProjectResetter resetProject =
builder(null, accountCache, null).reset(project).reset(allUsers).build()) { builder(null, accountCache, null)
.build(new ProjectResetter.Config().reset(project).reset(allUsers))) {
updateRef(nonUserBranch); updateRef(nonUserBranch);
updateRef(allUsersRepo, externalIds); updateRef(allUsersRepo, externalIds);
createRef(allUsersRepo, RefNames.refsUsers(accountId2)); createRef(allUsersRepo, RefNames.refsUsers(accountId2));
@@ -329,7 +351,8 @@ public class ProjectResetterTest extends GerritBaseTests {
Ref nonUserBranch = createRef(RefNames.refsUsers(new Account.Id(3))); Ref nonUserBranch = createRef(RefNames.refsUsers(new Account.Id(3)));
try (ProjectResetter resetProject = try (ProjectResetter resetProject =
builder(null, accountCache, null).reset(project).reset(allUsers).build()) { builder(null, accountCache, null)
.build(new ProjectResetter.Config().reset(project).reset(allUsers))) {
updateRef(nonUserBranch); updateRef(nonUserBranch);
createRef(allUsersRepo, RefNames.REFS_EXTERNAL_IDS); createRef(allUsersRepo, RefNames.REFS_EXTERNAL_IDS);
createRef(allUsersRepo, RefNames.refsUsers(accountId2)); createRef(allUsersRepo, RefNames.refsUsers(accountId2));
@@ -350,7 +373,8 @@ public class ProjectResetterTest extends GerritBaseTests {
EasyMock.replay(accountCreator); EasyMock.replay(accountCreator);
try (ProjectResetter resetProject = try (ProjectResetter resetProject =
builder(accountCreator, null, null).reset(project).reset(allUsers).build()) { builder(accountCreator, null, null)
.build(new ProjectResetter.Config().reset(project).reset(allUsers))) {
createRef(allUsersRepo, RefNames.refsUsers(accountId)); createRef(allUsersRepo, RefNames.refsUsers(accountId));
} }

View File

@@ -40,7 +40,6 @@ import com.google.gerrit.acceptance.AbstractDaemonTest;
import com.google.gerrit.acceptance.GerritConfig; import com.google.gerrit.acceptance.GerritConfig;
import com.google.gerrit.acceptance.NoHttpd; import com.google.gerrit.acceptance.NoHttpd;
import com.google.gerrit.acceptance.ProjectResetter; import com.google.gerrit.acceptance.ProjectResetter;
import com.google.gerrit.acceptance.ProjectResetter.Builder;
import com.google.gerrit.acceptance.PushOneCommit; import com.google.gerrit.acceptance.PushOneCommit;
import com.google.gerrit.acceptance.Sandboxed; import com.google.gerrit.acceptance.Sandboxed;
import com.google.gerrit.acceptance.TestAccount; import com.google.gerrit.acceptance.TestAccount;
@@ -166,11 +165,11 @@ public class GroupsIT extends AbstractDaemonTest {
} }
@Override @Override
protected ProjectResetter resetProjects(Builder resetter) throws IOException { protected ProjectResetter.Config resetProjects() {
// Don't reset All-Users since deleting users makes groups inconsistent (e.g. groups would // Don't reset All-Users since deleting users makes groups inconsistent (e.g. groups would
// contain members that no longer exist) and as result of this the group consistency checker // contain members that no longer exist) and as result of this the group consistency checker
// that is executed after each test would fail. // that is executed after each test would fail.
return resetter.reset(allProjects, RefNames.REFS_CONFIG).build(); return new ProjectResetter.Config().reset(allProjects, RefNames.REFS_CONFIG);
} }
@Test @Test
@@ -1076,7 +1075,9 @@ public class GroupsIT extends AbstractDaemonTest {
// Use ProjectResetter to restore the group names ref // Use ProjectResetter to restore the group names ref
try (ProjectResetter resetter = try (ProjectResetter resetter =
projectResetter.builder().reset(allUsers, RefNames.REFS_GROUPNAMES).build()) { projectResetter
.builder()
.build(new ProjectResetter.Config().reset(allUsers, RefNames.REFS_GROUPNAMES))) {
// Manually delete group names ref // Manually delete group names ref
try (Repository repo = repoManager.openRepository(allUsers); try (Repository repo = repoManager.openRepository(allUsers);
RevWalk rw = new RevWalk(repo)) { RevWalk rw = new RevWalk(repo)) {

View File

@@ -785,7 +785,8 @@ public class RefAdvertisementIT extends AbstractDaemonTest {
private ProjectResetter resetGroups() throws IOException { private ProjectResetter resetGroups() throws IOException {
return projectResetter return projectResetter
.builder() .builder()
.reset(allUsers, RefNames.REFS_GROUPS + "*", RefNames.REFS_GROUPNAMES) .build(
.build(); new ProjectResetter.Config()
.reset(allUsers, RefNames.REFS_GROUPS + "*", RefNames.REFS_GROUPNAMES));
} }
} }