Add tests for pushing without Change-Id and with invalid Change-Ids

Change-Id: I9a177debbdde7cf6205b40d4807077636d1f5775
Signed-off-by: Edwin Kempin <ekempin@google.com>
This commit is contained in:
Edwin Kempin
2017-02-01 14:28:55 +01:00
parent 86ab42542b
commit 5ac0209bce
2 changed files with 94 additions and 0 deletions

View File

@@ -55,12 +55,14 @@ import com.google.gerrit.server.query.change.ChangeData;
import com.google.gerrit.testutil.FakeEmailSender.Message;
import com.google.gerrit.testutil.TestTimeUtil;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.junit.TestRepository;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.transport.PushResult;
import org.eclipse.jgit.transport.RefSpec;
import org.eclipse.jgit.transport.RemoteRefUpdate;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
@@ -656,6 +658,70 @@ public abstract class AbstractPushForReview extends AbstractDaemonTest {
assertPushRejected(pushHead(testRepo, r, false), r, "no new changes");
}
@Test
public void pushWithoutChangeId() throws Exception {
RevCommit c = createCommit(testRepo, "Message without Change-Id");
assertThat(GitUtil.getChangeId(testRepo, c).isPresent()).isFalse();
pushForReviewRejected(testRepo,
"missing Change-Id in commit message footer");
ProjectConfig config = projectCache.checkedGet(project).getConfig();
config.getProject().setRequireChangeID(InheritableBoolean.FALSE);
saveProjectConfig(project, config);
pushForReviewOk(testRepo);
}
@Test
public void pushWithMultipleChangeIds() throws Exception {
createCommit(testRepo,
"Message with multiple Change-Id\n"
+ "\n"
+ "Change-Id: I10f98c2ef76e52e23aa23be5afeb71e40b350e86\n"
+ "Change-Id: Ie9a132e107def33bdd513b7854b50de911edba0a\n");
pushForReviewRejected(testRepo,
"multiple Change-Id lines in commit message footer");
ProjectConfig config = projectCache.checkedGet(project).getConfig();
config.getProject().setRequireChangeID(InheritableBoolean.FALSE);
saveProjectConfig(project, config);
pushForReviewRejected(testRepo,
"multiple Change-Id lines in commit message footer");
}
@Test
public void pushWithInvalidChangeId() throws Exception {
createCommit(testRepo, "Message with invalid Change-Id\n"
+ "\n"
+ "Change-Id: X\n");
pushForReviewRejected(testRepo,
"invalid Change-Id line format in commit message footer");
ProjectConfig config = projectCache.checkedGet(project).getConfig();
config.getProject().setRequireChangeID(InheritableBoolean.FALSE);
saveProjectConfig(project, config);
pushForReviewRejected(testRepo,
"invalid Change-Id line format in commit message footer");
}
@Test
public void pushWithInvalidChangeIdFromEgit() throws Exception {
createCommit(testRepo, "Message with invalid Change-Id\n"
+ "\n"
+ "Change-Id: I0000000000000000000000000000000000000000\n");
pushForReviewRejected(testRepo, "invalid Change-Id");
ProjectConfig config = projectCache.checkedGet(project).getConfig();
config.getProject().setRequireChangeID(InheritableBoolean.FALSE);
saveProjectConfig(project, config);
pushForReviewRejected(testRepo, "invalid Change-Id");
}
private static RevCommit createCommit(TestRepository<?> testRepo,
String message) throws Exception {
return testRepo.branch("HEAD").commit().message(message)
.add("a.txt", "content").create();
}
@Test
public void cantAutoCloseChangeAlreadyMergedToBranch() throws Exception {
PushOneCommit.Result r1 = createChange();
@@ -891,4 +957,27 @@ public abstract class AbstractPushForReview extends AbstractDaemonTest {
assertThat(cds).named("change " + id).hasSize(1);
return cds.get(0);
}
private static void pushForReviewOk(TestRepository<?> testRepo)
throws GitAPIException {
pushForReview(testRepo, RemoteRefUpdate.Status.OK, null);
}
private static void pushForReviewRejected(TestRepository<?> testRepo,
String expectedMessage) throws GitAPIException {
pushForReview(testRepo, RemoteRefUpdate.Status.REJECTED_OTHER_REASON,
expectedMessage);
}
private static void pushForReview(TestRepository<?> testRepo,
RemoteRefUpdate.Status expectedStatus, String expectedMessage)
throws GitAPIException {
String ref = "refs/for/master";
PushResult r = pushHead(testRepo, ref);
RemoteRefUpdate refUpdate = r.getRemoteUpdate(ref);
assertThat(refUpdate.getStatus()).isEqualTo(expectedStatus);
if (expectedMessage != null) {
assertThat(refUpdate.getMessage()).contains(expectedMessage);
}
}
}