Merge "Configure ProjectResetter through a plain data class."
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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)) {
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user