Merge branch 'stable-3.1' into stable-3.2 * stable-3.1: ReplicationIT: Enable task deletion when testing delete branch ReplicationIT: Test that branch deletion is replicated Make SecureCredentialsFactory public Change-Id: I07b9127c3e6930b96a38e115265e7cf7cff92b76
diff --git a/src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationIT.java b/src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationIT.java index 6ad5558..653e5a1 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationIT.java +++ b/src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationIT.java
@@ -331,6 +331,53 @@ } @Test + public void shouldReplicateBranchDeletionWhenMirror() throws Exception { + replicateBranchDeletion(true); + } + + @Test + public void shouldNotReplicateBranchDeletionWhenNotMirror() throws Exception { + replicateBranchDeletion(false); + } + + private void replicateBranchDeletion(boolean mirror) throws Exception { + tasksStorage.disableDeleteForTesting(false); + + setReplicationDestination("foo", "replica", ALL_PROJECTS, mirror); + reloadConfig(); + + Project.NameKey targetProject = createTestProject(project + "replica"); + String branchToDelete = "refs/heads/todelete"; + String master = "refs/heads/master"; + BranchInput input = new BranchInput(); + input.revision = master; + gApi.projects().name(project.get()).branch(branchToDelete).create(input); + + assertThat(listReplicationTasks("refs/heads/(todelete|master)")).hasSize(2); + + try (Repository repo = repoManager.openRepository(targetProject)) { + waitUntil(() -> checkedGetRef(repo, branchToDelete) != null); + } + + gApi.projects().name(project.get()).branch(branchToDelete).delete(); + + assertThat(listReplicationTasks(branchToDelete)).hasSize(1); + + try (Repository repo = repoManager.openRepository(targetProject)) { + if (mirror) { + waitUntil(() -> checkedGetRef(repo, branchToDelete) == null); + } + + Ref targetBranchRef = getRef(repo, branchToDelete); + if (mirror) { + assertThat(targetBranchRef).isNull(); + } else { + assertThat(targetBranchRef).isNotNull(); + } + } + } + + @Test public void shouldNotDrainTheQueueWhenReloading() throws Exception { // Setup repo to replicate Project.NameKey targetProject = createTestProject(project + "replica"); @@ -481,13 +528,24 @@ private void setReplicationDestination( String remoteName, String replicaSuffix, Optional<String> project) throws IOException { - setReplicationDestination(remoteName, Arrays.asList(replicaSuffix), project); + setReplicationDestination(remoteName, Arrays.asList(replicaSuffix), project, false); + } + + private void setReplicationDestination( + String remoteName, String replicaSuffix, Optional<String> project, boolean mirror) + throws IOException { + setReplicationDestination(remoteName, Arrays.asList(replicaSuffix), project, mirror); } private void setReplicationDestination( String remoteName, List<String> replicaSuffixes, Optional<String> project) throws IOException { + setReplicationDestination(remoteName, replicaSuffixes, project, false); + } + private void setReplicationDestination( + String remoteName, List<String> replicaSuffixes, Optional<String> project, boolean mirror) + throws IOException { List<String> replicaUrls = replicaSuffixes.stream() .map(suffix -> gitPath.resolve("${name}" + suffix + ".git").toString()) @@ -495,6 +553,7 @@ config.setStringList("remote", remoteName, "url", replicaUrls); config.setInt("remote", remoteName, "replicationDelay", TEST_REPLICATION_DELAY); config.setInt("remote", remoteName, "replicationRetry", TEST_REPLICATION_RETRY); + config.setBoolean("remote", remoteName, "mirror", mirror); project.ifPresent(prj -> config.setString("remote", remoteName, "projects", prj)); config.setBoolean("gerrit", null, "autoReload", true); config.save();