summaryrefslogtreecommitdiffstats
path: root/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/SubmitTypeRuleIT.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/SubmitTypeRuleIT.java')
-rw-r--r--gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/SubmitTypeRuleIT.java271
1 files changed, 0 insertions, 271 deletions
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/SubmitTypeRuleIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/SubmitTypeRuleIT.java
deleted file mode 100644
index 6036dc5570..0000000000
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/SubmitTypeRuleIT.java
+++ /dev/null
@@ -1,271 +0,0 @@
-// Copyright (C) 2015 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.gerrit.acceptance.api.change;
-
-import static com.google.common.truth.Truth.assertThat;
-import static com.google.gerrit.extensions.client.SubmitType.CHERRY_PICK;
-import static com.google.gerrit.extensions.client.SubmitType.FAST_FORWARD_ONLY;
-import static com.google.gerrit.extensions.client.SubmitType.MERGE_ALWAYS;
-import static com.google.gerrit.extensions.client.SubmitType.MERGE_IF_NECESSARY;
-import static com.google.gerrit.extensions.client.SubmitType.REBASE_ALWAYS;
-import static com.google.gerrit.extensions.client.SubmitType.REBASE_IF_NECESSARY;
-import static org.junit.Assert.fail;
-
-import com.google.common.collect.ImmutableList;
-import com.google.gerrit.acceptance.AbstractDaemonTest;
-import com.google.gerrit.acceptance.NoHttpd;
-import com.google.gerrit.acceptance.PushOneCommit;
-import com.google.gerrit.extensions.api.changes.ReviewInput;
-import com.google.gerrit.extensions.api.projects.BranchInput;
-import com.google.gerrit.extensions.client.SubmitType;
-import com.google.gerrit.extensions.common.TestSubmitRuleInput;
-import com.google.gerrit.extensions.restapi.ResourceConflictException;
-import com.google.gerrit.extensions.restapi.RestApiException;
-import com.google.gerrit.reviewdb.client.Change;
-import com.google.gerrit.reviewdb.client.RefNames;
-import com.google.gerrit.server.git.MetaDataUpdate;
-import com.google.gerrit.server.git.VersionedMetaData;
-import com.google.gerrit.testutil.ConfigSuite;
-import java.io.IOException;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicInteger;
-import org.eclipse.jgit.api.Git;
-import org.eclipse.jgit.errors.ConfigInvalidException;
-import org.eclipse.jgit.lib.CommitBuilder;
-import org.eclipse.jgit.lib.Config;
-import org.eclipse.jgit.lib.ObjectId;
-import org.eclipse.jgit.lib.Repository;
-import org.eclipse.jgit.revwalk.RevCommit;
-import org.junit.Before;
-import org.junit.Test;
-
-@NoHttpd
-public class SubmitTypeRuleIT extends AbstractDaemonTest {
- @ConfigSuite.Default
- public static Config submitWholeTopicEnabled() {
- return submitWholeTopicEnabledConfig();
- }
-
- private class RulesPl extends VersionedMetaData {
- private static final String FILENAME = "rules.pl";
-
- private String rule;
-
- @Override
- protected String getRefName() {
- return RefNames.REFS_CONFIG;
- }
-
- @Override
- protected void onLoad() throws IOException, ConfigInvalidException {
- rule = readUTF8(FILENAME);
- }
-
- @Override
- protected boolean onSave(CommitBuilder commit) throws IOException, ConfigInvalidException {
- TestSubmitRuleInput in = new TestSubmitRuleInput();
- in.rule = rule;
- try {
- gApi.changes().id(testChangeId.get()).current().testSubmitType(in);
- } catch (RestApiException e) {
- throw new ConfigInvalidException("Invalid submit type rule", e);
- }
-
- saveUTF8(FILENAME, rule);
- return true;
- }
- }
-
- private AtomicInteger fileCounter;
- private Change.Id testChangeId;
-
- @Before
- public void setUp() throws Exception {
- fileCounter = new AtomicInteger();
- gApi.projects().name(project.get()).branch("test").create(new BranchInput());
- testChangeId = createChange("test", "test change").getChange().getId();
- }
-
- private void setRulesPl(String rule) throws Exception {
- try (MetaDataUpdate md = metaDataUpdateFactory.create(project)) {
- RulesPl r = new RulesPl();
- r.load(md);
- r.rule = rule;
- r.commit(md);
- }
- }
-
- private static final String SUBMIT_TYPE_FROM_SUBJECT =
- "submit_type(fast_forward_only) :-"
- + "gerrit:commit_message(M),"
- + "regex_matches('.*FAST_FORWARD_ONLY.*', M),"
- + "!.\n"
- + "submit_type(merge_if_necessary) :-"
- + "gerrit:commit_message(M),"
- + "regex_matches('.*MERGE_IF_NECESSARY.*', M),"
- + "!.\n"
- + "submit_type(rebase_if_necessary) :-"
- + "gerrit:commit_message(M),"
- + "regex_matches('.*REBASE_IF_NECESSARY.*', M),"
- + "!.\n"
- + "submit_type(rebase_always) :-"
- + "gerrit:commit_message(M),"
- + "regex_matches('.*REBASE_ALWAYS.*', M),"
- + "!.\n"
- + "submit_type(merge_always) :-"
- + "gerrit:commit_message(M),"
- + "regex_matches('.*MERGE_ALWAYS.*', M),"
- + "!.\n"
- + "submit_type(cherry_pick) :-"
- + "gerrit:commit_message(M),"
- + "regex_matches('.*CHERRY_PICK.*', M),"
- + "!.\n"
- + "submit_type(T) :- gerrit:project_default_submit_type(T).";
-
- private PushOneCommit.Result createChange(String dest, String subject) throws Exception {
- PushOneCommit push =
- pushFactory.create(
- db,
- admin.getIdent(),
- testRepo,
- subject,
- "file" + fileCounter.incrementAndGet(),
- PushOneCommit.FILE_CONTENT);
- PushOneCommit.Result r = push.to("refs/for/" + dest);
- r.assertOkStatus();
- return r;
- }
-
- @Test
- public void unconditionalCherryPick() throws Exception {
- PushOneCommit.Result r = createChange();
- assertSubmitType(MERGE_IF_NECESSARY, r.getChangeId());
- setRulesPl("submit_type(cherry_pick).");
- assertSubmitType(CHERRY_PICK, r.getChangeId());
- }
-
- @Test
- public void submitTypeFromSubject() throws Exception {
- PushOneCommit.Result r1 = createChange("master", "Default 1");
- PushOneCommit.Result r2 = createChange("master", "FAST_FORWARD_ONLY 2");
- PushOneCommit.Result r3 = createChange("master", "MERGE_IF_NECESSARY 3");
- PushOneCommit.Result r4 = createChange("master", "REBASE_IF_NECESSARY 4");
- PushOneCommit.Result r5 = createChange("master", "REBASE_ALWAYS 5");
- PushOneCommit.Result r6 = createChange("master", "MERGE_ALWAYS 6");
- PushOneCommit.Result r7 = createChange("master", "CHERRY_PICK 7");
-
- assertSubmitType(MERGE_IF_NECESSARY, r1.getChangeId());
- assertSubmitType(MERGE_IF_NECESSARY, r2.getChangeId());
- assertSubmitType(MERGE_IF_NECESSARY, r3.getChangeId());
- assertSubmitType(MERGE_IF_NECESSARY, r4.getChangeId());
- assertSubmitType(MERGE_IF_NECESSARY, r5.getChangeId());
- assertSubmitType(MERGE_IF_NECESSARY, r6.getChangeId());
- assertSubmitType(MERGE_IF_NECESSARY, r7.getChangeId());
-
- setRulesPl(SUBMIT_TYPE_FROM_SUBJECT);
-
- assertSubmitType(MERGE_IF_NECESSARY, r1.getChangeId());
- assertSubmitType(FAST_FORWARD_ONLY, r2.getChangeId());
- assertSubmitType(MERGE_IF_NECESSARY, r3.getChangeId());
- assertSubmitType(REBASE_IF_NECESSARY, r4.getChangeId());
- assertSubmitType(REBASE_ALWAYS, r5.getChangeId());
- assertSubmitType(MERGE_ALWAYS, r6.getChangeId());
- assertSubmitType(CHERRY_PICK, r7.getChangeId());
- }
-
- @Test
- public void submitTypeIsUsedForSubmit() throws Exception {
- setRulesPl(SUBMIT_TYPE_FROM_SUBJECT);
-
- PushOneCommit.Result r = createChange("master", "CHERRY_PICK 1");
-
- gApi.changes().id(r.getChangeId()).current().review(ReviewInput.approve());
- gApi.changes().id(r.getChangeId()).current().submit();
-
- List<RevCommit> log = log("master", 1);
- assertThat(log.get(0).getShortMessage()).isEqualTo("CHERRY_PICK 1");
- assertThat(log.get(0).name()).isNotEqualTo(r.getCommit().name());
- assertThat(log.get(0).getFullMessage()).contains("Change-Id: " + r.getChangeId());
- assertThat(log.get(0).getFullMessage()).contains("Reviewed-on: ");
- }
-
- @Test
- public void mixingSubmitTypesAcrossBranchesSucceeds() throws Exception {
- setRulesPl(SUBMIT_TYPE_FROM_SUBJECT);
-
- PushOneCommit.Result r1 = createChange("master", "MERGE_IF_NECESSARY 1");
-
- RevCommit initialCommit = r1.getCommit().getParent(0);
- BranchInput bin = new BranchInput();
- bin.revision = initialCommit.name();
- gApi.projects().name(project.get()).branch("branch").create(bin);
-
- testRepo.reset(initialCommit);
- PushOneCommit.Result r2 = createChange("branch", "MERGE_ALWAYS 1");
-
- gApi.changes().id(r1.getChangeId()).topic(name("topic"));
- gApi.changes().id(r1.getChangeId()).current().review(ReviewInput.approve());
- gApi.changes().id(r2.getChangeId()).topic(name("topic"));
- gApi.changes().id(r2.getChangeId()).current().review(ReviewInput.approve());
- gApi.changes().id(r2.getChangeId()).current().submit();
-
- assertThat(log("master", 1).get(0).name()).isEqualTo(r1.getCommit().name());
-
- List<RevCommit> branchLog = log("branch", 1);
- assertThat(branchLog.get(0).getParents()).hasLength(2);
- assertThat(branchLog.get(0).getParent(1).name()).isEqualTo(r2.getCommit().name());
- }
-
- @Test
- public void mixingSubmitTypesOnOneBranchFails() throws Exception {
- setRulesPl(SUBMIT_TYPE_FROM_SUBJECT);
-
- PushOneCommit.Result r1 = createChange("master", "CHERRY_PICK 1");
- PushOneCommit.Result r2 = createChange("master", "MERGE_IF_NECESSARY 2");
-
- gApi.changes().id(r1.getChangeId()).current().review(ReviewInput.approve());
- gApi.changes().id(r2.getChangeId()).current().review(ReviewInput.approve());
-
- try {
- gApi.changes().id(r2.getChangeId()).current().submit();
- fail("Expected ResourceConflictException");
- } catch (ResourceConflictException e) {
- assertThat(e)
- .hasMessageThat()
- .isEqualTo(
- "Failed to submit 2 changes due to the following problems:\n"
- + "Change "
- + r1.getChange().getId()
- + ": Change has submit type "
- + "CHERRY_PICK, but previously chose submit type MERGE_IF_NECESSARY "
- + "from change "
- + r2.getChange().getId()
- + " in the same batch");
- }
- }
-
- private List<RevCommit> log(String commitish, int n) throws Exception {
- try (Repository repo = repoManager.openRepository(project);
- Git git = new Git(repo)) {
- ObjectId id = repo.resolve(commitish);
- assertThat(id).isNotNull();
- return ImmutableList.copyOf(git.log().add(id).setMaxCount(n).call());
- }
- }
-
- private void assertSubmitType(SubmitType expected, String id) throws Exception {
- assertThat(gApi.changes().id(id).current().submitType()).isEqualTo(expected);
- }
-}