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:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user