Add test to abandon inactive open changes

This increases the test coverage of AbandonUtil from 15% to 75%.

Change-Id: Ifc1c3c98a0e9557f568a0ea4643e572dd0af200d
Signed-off-by: Edwin Kempin <ekempin@google.com>
This commit is contained in:
Edwin Kempin
2017-05-18 16:09:21 +02:00
committed by David Pursehouse
parent 63daa534c0
commit aba0d645c4

View File

@@ -16,10 +16,14 @@ package com.google.gerrit.acceptance.api.change;
import static com.google.common.truth.Truth.assertThat;
import static com.google.gerrit.server.group.SystemGroupBackend.REGISTERED_USERS;
import static java.util.concurrent.TimeUnit.HOURS;
import static java.util.concurrent.TimeUnit.SECONDS;
import static java.util.stream.Collectors.toList;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.gerrit.acceptance.AbstractDaemonTest;
import com.google.gerrit.acceptance.GerritConfig;
import com.google.gerrit.acceptance.PushOneCommit;
import com.google.gerrit.common.data.Permission;
import com.google.gerrit.extensions.client.ChangeStatus;
@@ -28,13 +32,19 @@ import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.ResourceConflictException;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.change.AbandonUtil;
import com.google.gerrit.server.project.ChangeControl;
import com.google.gerrit.server.query.change.ChangeData;
import com.google.gerrit.testutil.TestTimeUtil;
import com.google.inject.Inject;
import java.util.List;
import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
import org.eclipse.jgit.junit.TestRepository;
import org.junit.Test;
public class AbandonIT extends AbstractDaemonTest {
@Inject private AbandonUtil abandonUtil;
@Test
public void abandon() throws Exception {
PushOneCommit.Result r = createChange();
@@ -108,6 +118,30 @@ public class AbandonIT extends AbstractDaemonTest {
gApi.changes().id(changeId).abandon();
}
@Test
@GerritConfig(name = "changeCleanup.abandonAfter", value = "1w")
public void abandonInactiveOpenChanges() throws Exception {
TestTimeUtil.resetWithClockStep(1, SECONDS);
// create 2 changes which will be abandoned ...
int id1 = createChange().getChange().getId().get();
int id2 = createChange().getChange().getId().get();
// ... because they are older than 1 week
TestTimeUtil.incrementClock(7 * 24, HOURS);
// create 1 new change that will not be abandoned
ChangeData cd = createChange().getChange();
int id3 = cd.getId().get();
assertThat(toChangeNumbers(query("is:open"))).containsExactly(id1, id2, id3);
assertThat(query("is:abandoned")).isEmpty();
abandonUtil.abandonInactiveOpenChanges(batchUpdateFactory);
assertThat(toChangeNumbers(query("is:open"))).containsExactly(id3);
assertThat(toChangeNumbers(query("is:abandoned"))).containsExactly(id1, id2);
}
@Test
public void abandonNotAllowedWithoutPermission() throws Exception {
PushOneCommit.Result r = createChange();
@@ -162,4 +196,8 @@ public class AbandonIT extends AbstractDaemonTest {
exception.expectMessage("restore not permitted");
gApi.changes().id(changeId).restore();
}
private List<Integer> toChangeNumbers(List<ChangeInfo> changes) {
return changes.stream().map(i -> i._number).collect(toList());
}
}