Merge changes I2f26ff5d,I46993b48 into stable-3.3 * changes: Fix flaky test for group renaming in ProjectConfig ProjectConfig: Write resolved groups to file
diff --git a/java/com/google/gerrit/server/project/ProjectConfig.java b/java/com/google/gerrit/server/project/ProjectConfig.java index 54d9176..89038e2 100644 --- a/java/com/google/gerrit/server/project/ProjectConfig.java +++ b/java/com/google/gerrit/server/project/ProjectConfig.java
@@ -1425,7 +1425,7 @@ if (group.getUUID() != null) { keepGroups.add(group.getUUID()); } - rules.add(rule.asString(needRange)); + rules.add(rule.toBuilder().setGroup(group).build().asString(needRange)); } rc.setStringList(CAPABILITY, null, permission.getName(), rules); } @@ -1470,7 +1470,7 @@ if (group.getUUID() != null) { keepGroups.add(group.getUUID()); } - rules.add(rule.asString(needRange)); + rules.add(rule.toBuilder().setGroup(group).build().asString(needRange)); } rc.setStringList(ACCESS, refName, permission.getName(), rules); }
diff --git a/javatests/com/google/gerrit/acceptance/api/project/ProjectIT.java b/javatests/com/google/gerrit/acceptance/api/project/ProjectIT.java index e99a6f5..d5fc1c1 100644 --- a/javatests/com/google/gerrit/acceptance/api/project/ProjectIT.java +++ b/javatests/com/google/gerrit/acceptance/api/project/ProjectIT.java
@@ -15,6 +15,7 @@ package com.google.gerrit.acceptance.api.project; import static com.google.common.truth.Truth.assertThat; +import static com.google.common.truth.Truth8.assertThat; import static com.google.gerrit.acceptance.testsuite.project.TestProjectUpdate.allow; import static com.google.gerrit.acceptance.testsuite.project.TestProjectUpdate.block; import static com.google.gerrit.server.project.ProjectState.INHERITED_FROM_GLOBAL; @@ -39,7 +40,9 @@ import com.google.gerrit.acceptance.config.GerritConfig; import com.google.gerrit.acceptance.testsuite.project.ProjectOperations; import com.google.gerrit.acceptance.testsuite.request.RequestScopeOperations; +import com.google.gerrit.entities.AccountGroup; import com.google.gerrit.entities.Change; +import com.google.gerrit.entities.GroupReference; import com.google.gerrit.entities.Permission; import com.google.gerrit.entities.Project; import com.google.gerrit.entities.RefNames; @@ -55,6 +58,7 @@ import com.google.gerrit.extensions.client.InheritableBoolean; import com.google.gerrit.extensions.client.ProjectState; import com.google.gerrit.extensions.client.SubmitType; +import com.google.gerrit.extensions.common.GroupInfo; import com.google.gerrit.extensions.common.ProjectInfo; import com.google.gerrit.extensions.events.ChangeIndexedListener; import com.google.gerrit.extensions.events.ProjectIndexedListener; @@ -63,6 +67,7 @@ import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.extensions.restapi.UnprocessableEntityException; import com.google.gerrit.server.config.ProjectConfigEntry; +import com.google.gerrit.server.git.meta.MetaDataUpdate; import com.google.gerrit.server.group.SystemGroupBackend; import com.google.gerrit.server.project.ProjectConfig; import com.google.inject.AbstractModule; @@ -70,6 +75,7 @@ import com.google.inject.Module; import java.util.HashMap; import java.util.Map; +import java.util.Optional; import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository; import org.eclipse.jgit.junit.TestRepository; import org.eclipse.jgit.lib.Config; @@ -939,6 +945,42 @@ projectOperations.project(allProjects).getHead(RefNames.REFS_CONFIG).name())); } + @Test + public void renamingGroupGetsPersisted() throws Exception { + String name = name("Name1"); + GroupInfo group = gApi.groups().create(name).get(); + + // Use group in a permission + projectOperations + .project(project) + .forUpdate() + .add(allow(Permission.READ).ref(RefNames.REFS_CONFIG).group(AccountGroup.uuid(group.id))) + .update(); + Optional<String> beforeRename = + projectCache.get(project).get().getLocalGroups().stream() + .filter(g -> g.getUUID().get().equals(group.id)) + .map(GroupReference::getName) + .findAny(); + // Groups created with ProjectOperations always have their UUID as local name + assertThat(beforeRename).hasValue(group.id); + + // Rename the group directly on the project config + String newName = name("Name2"); + try (MetaDataUpdate md = metaDataUpdateFactory.create(project)) { + ProjectConfig config = projectConfigFactory.read(md); + config.renameGroup(AccountGroup.uuid(group.id), newName); + config.commit(md); + projectCache.evict(config.getProject()); + } + + Optional<String> afterRename = + projectCache.get(project).get().getLocalGroups().stream() + .filter(g -> g.getUUID().get().equals(group.id)) + .map(GroupReference::getName) + .findAny(); + assertThat(afterRename).hasValue(newName); + } + private CommentLinkInfo commentLinkInfo(String name, String match, String link) { CommentLinkInfo info = new CommentLinkInfo(); info.name = name;