blob: 99cd0777acfc656e1411431811fd6775f0734da3 [file] [log] [blame]
// Copyright (C) 2019 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.plugins.checks.db;
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
import static com.google.gerrit.plugins.checks.testing.CheckerConfigSubject.assertThat;
import static com.google.gerrit.testing.GerritJUnit.assertThrows;
import com.google.common.collect.ImmutableSortedSet;
import com.google.common.truth.StringSubject;
import com.google.gerrit.entities.Project;
import com.google.gerrit.plugins.checks.CheckerCreation;
import com.google.gerrit.plugins.checks.CheckerQuery;
import com.google.gerrit.plugins.checks.CheckerUpdate;
import com.google.gerrit.plugins.checks.CheckerUuid;
import com.google.gerrit.plugins.checks.api.BlockingCondition;
import com.google.gerrit.plugins.checks.api.CheckerStatus;
import com.google.gerrit.server.extensions.events.GitReferenceUpdated;
import com.google.gerrit.server.git.meta.MetaDataUpdate;
import com.google.gerrit.server.util.time.TimeUtil;
import java.io.IOException;
import java.sql.Timestamp;
import java.util.TimeZone;
import org.eclipse.jgit.errors.ConfigInvalidException;
import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription;
import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
import org.eclipse.jgit.junit.TestRepository;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.PersonIdent;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevWalk;
import org.junit.Before;
import org.junit.Test;
public class CheckerConfigTest {
private Project.NameKey projectName;
private Repository repository;
private TestRepository<?> testRepository;
private final CheckerUuid checkerUuid = CheckerUuid.parse("test:my-checker");
private final String checkerName = "My Checker";
private final Project.NameKey checkerRepository = Project.nameKey("my-repo");
private final TimeZone timeZone = TimeZone.getTimeZone("America/Los_Angeles");
@Before
public void setUp() throws Exception {
projectName = Project.nameKey("Test Repository");
repository = new InMemoryRepository(new DfsRepositoryDescription("Test Repository"));
testRepository = new TestRepository<>(repository);
}
@Test
public void correctCommitMessageForCheckerCreation() throws Exception {
CheckerCreation checkerCreation =
getPrefilledCheckerCreationBuilder().setCheckerUuid(checkerUuid).build();
createChecker(checkerCreation);
assertThatCommitMessage(checkerUuid).isEqualTo("Create checker");
}
@Test
public void specifiedCheckerUuidIsRespectedForNewChecker() throws Exception {
CheckerCreation checkerCreation =
getPrefilledCheckerCreationBuilder().setCheckerUuid(checkerUuid).build();
createChecker(checkerCreation);
CheckerConfig checkerConfig = loadChecker(checkerUuid);
assertThat(checkerConfig).hasUuid(checkerUuid);
assertThat(checkerConfig).configStringList("uuid").containsExactly("test:my-checker");
}
@Test
public void specifiedCheckerNameIsRespectedForNewChecker() throws Exception {
CheckerCreation checkerCreation =
getPrefilledCheckerCreationBuilder().setName(checkerName).build();
createChecker(checkerCreation);
CheckerConfig checkerConfig = loadChecker(checkerUuid);
assertThat(checkerConfig).hasName(checkerName);
assertThat(checkerConfig).configStringList("name").containsExactly("My Checker");
}
@Test
public void nameOfCheckerUpdateOverridesCheckerCreation() throws Exception {
String anotherName = "Another Name";
CheckerCreation checkerCreation =
getPrefilledCheckerCreationBuilder().setName(checkerName).build();
CheckerUpdate checkerUpdate = CheckerUpdate.builder().setName(anotherName).build();
createChecker(checkerCreation, checkerUpdate);
CheckerConfig checkerConfig = loadChecker(checkerCreation.getCheckerUuid());
assertThat(checkerConfig).hasName(anotherName);
assertThat(checkerConfig).configStringList("name").containsExactly(anotherName);
}
@Test
public void nameOfNewCheckerMustNotBeEmpty() throws Exception {
CheckerCreation checkerCreation =
getPrefilledCheckerCreationBuilder().setName("").buildWithoutValidationForTesting();
CheckerConfig checkerConfig =
CheckerConfig.createForNewChecker(projectName, repository, checkerCreation);
try (MetaDataUpdate metaDataUpdate = createMetaDataUpdate()) {
Throwable thrown = assertThrows(Throwable.class, () -> checkerConfig.commit(metaDataUpdate));
assertThat(thrown).hasCauseThat().isInstanceOf(ConfigInvalidException.class);
assertThat(thrown)
.hasMessageThat()
.contains(String.format("Name of the checker %s must be defined", checkerUuid));
}
}
@Test
public void descriptionDefaultsToOptionalEmpty() throws Exception {
CheckerCreation checkerCreation =
CheckerCreation.builder()
.setCheckerUuid(checkerUuid)
.setName(checkerName)
.setRepository(checkerRepository)
.build();
createChecker(checkerCreation);
CheckerConfig checkerConfig = loadChecker(checkerCreation.getCheckerUuid());
assertThat(checkerConfig).hasDescriptionThat().isEmpty();
assertThat(checkerConfig).configStringList("description").isEmpty();
}
@Test
public void specifiedDescriptionIsRespectedForNewChecker() throws Exception {
String description = "This is a test checker.";
CheckerCreation checkerCreation = getPrefilledCheckerCreationBuilder().build();
CheckerUpdate checkerUpdate = CheckerUpdate.builder().setDescription(description).build();
createChecker(checkerCreation, checkerUpdate);
CheckerConfig checkerConfig = loadChecker(checkerCreation.getCheckerUuid());
assertThat(checkerConfig).hasDescriptionThat().value().isEqualTo(description);
assertThat(checkerConfig).configStringList("description").containsExactly(description);
}
@Test
public void emptyDescriptionForNewCheckerIsIgnored() throws Exception {
CheckerCreation checkerCreation = getPrefilledCheckerCreationBuilder().build();
CheckerUpdate checkerUpdate = CheckerUpdate.builder().setDescription("").build();
createChecker(checkerCreation, checkerUpdate);
CheckerConfig checkerConfig = loadChecker(checkerCreation.getCheckerUuid());
assertThat(checkerConfig).hasDescriptionThat().isEmpty();
assertThat(checkerConfig).configStringList("description").isEmpty();
}
@Test
public void urlDefaultsToOptionalEmpty() throws Exception {
CheckerCreation checkerCreation =
CheckerCreation.builder()
.setCheckerUuid(checkerUuid)
.setName(checkerName)
.setRepository(checkerRepository)
.build();
createChecker(checkerCreation);
CheckerConfig checkerConfig = loadChecker(checkerCreation.getCheckerUuid());
assertThat(checkerConfig).hasUrlThat().isEmpty();
assertThat(checkerConfig).configStringList("url").isEmpty();
}
@Test
public void specifiedUrlIsRespectedForNewChecker() throws Exception {
String url = "http://example.com/my-checker";
CheckerCreation checkerCreation = getPrefilledCheckerCreationBuilder().build();
CheckerUpdate checkerUpdate = CheckerUpdate.builder().setUrl(url).build();
createChecker(checkerCreation, checkerUpdate);
CheckerConfig checkerConfig = loadChecker(checkerCreation.getCheckerUuid());
assertThat(checkerConfig).hasUrlThat().value().isEqualTo(url);
assertThat(checkerConfig).configStringList("url").containsExactly(url);
}
@Test
public void emptyUrlForNewCheckerIsIgnored() throws Exception {
CheckerCreation checkerCreation = getPrefilledCheckerCreationBuilder().build();
CheckerUpdate checkerUpdate = CheckerUpdate.builder().setUrl("").build();
createChecker(checkerCreation, checkerUpdate);
CheckerConfig checkerConfig = loadChecker(checkerCreation.getCheckerUuid());
assertThat(checkerConfig).hasUrlThat().isEmpty();
assertThat(checkerConfig).configStringList("url").isEmpty();
}
@Test
public void specifiedRepositoryIsRespectedForNewChecker() throws Exception {
CheckerCreation checkerCreation =
getPrefilledCheckerCreationBuilder().setRepository(checkerRepository).build();
createChecker(checkerCreation);
CheckerConfig checkerConfig = loadChecker(checkerCreation.getCheckerUuid());
assertThat(checkerConfig).hasRepository(checkerRepository);
assertThat(checkerConfig)
.configStringList("repository")
.containsExactly(checkerRepository.get());
}
@Test
public void repositoryOfCheckerUpdateOverridesCheckerCreation() throws Exception {
Project.NameKey anotherRepository = Project.nameKey("another-repo");
CheckerCreation checkerCreation =
getPrefilledCheckerCreationBuilder().setRepository(checkerRepository).build();
CheckerUpdate checkerUpdate = CheckerUpdate.builder().setRepository(anotherRepository).build();
createChecker(checkerCreation, checkerUpdate);
CheckerConfig checkerConfig = loadChecker(checkerCreation.getCheckerUuid());
assertThat(checkerConfig).hasRepository(anotherRepository);
assertThat(checkerConfig)
.configStringList("repository")
.containsExactly(anotherRepository.get());
}
@Test
public void repositoryOfNewCheckerMustNotBeEmpty() throws Exception {
CheckerCreation checkerCreation =
getPrefilledCheckerCreationBuilder()
.setRepository(Project.nameKey(""))
.buildWithoutValidationForTesting();
CheckerConfig checkerConfig =
CheckerConfig.createForNewChecker(projectName, repository, checkerCreation);
try (MetaDataUpdate metaDataUpdate = createMetaDataUpdate()) {
Throwable thrown = assertThrows(Throwable.class, () -> checkerConfig.commit(metaDataUpdate));
assertThat(thrown).hasCauseThat().isInstanceOf(ConfigInvalidException.class);
assertThat(thrown)
.hasMessageThat()
.contains(String.format("Repository of the checker %s must be defined", checkerUuid));
}
}
@Test
public void createdDefaultsToNow() throws Exception {
// Git timestamps are only precise to the second.
Timestamp testStart = TimeUtil.truncateToSecond(TimeUtil.nowTs());
createArbitraryChecker(checkerUuid);
CheckerConfig checkerConfig = loadChecker(checkerUuid);
assertThat(checkerConfig).hasCreatedThat().isAtLeast(testStart);
}
@Test
public void uuidInConfigMayNotBeUndefined() throws Exception {
populateCheckerConfig(checkerUuid, "[checker]");
ConfigInvalidException thrown =
assertThrows(ConfigInvalidException.class, () -> loadChecker(checkerUuid));
assertThat(thrown)
.hasMessageThat()
.contains("checker.uuid is not set in config file for checker " + checkerUuid);
}
@Test
public void nameInConfigMayNotBeUndefined() throws Exception {
populateCheckerConfig(
checkerUuid,
"[checker]\n uuid = "
+ checkerUuid
+ "\n repository = "
+ checkerRepository
+ "\n status = ENABLED");
ConfigInvalidException thrown =
assertThrows(ConfigInvalidException.class, () -> loadChecker(checkerUuid));
assertThat(thrown)
.hasMessageThat()
.contains("checker.name is not set in config file for checker " + checkerUuid);
}
@Test
public void correctCommitMessageForCheckerUpdate() throws Exception {
createArbitraryChecker(checkerUuid);
assertThatCommitMessage(checkerUuid).isEqualTo("Create checker");
CheckerUpdate checkerUpdate = CheckerUpdate.builder().setDescription("A description.").build();
updateChecker(checkerUuid, checkerUpdate);
assertThatCommitMessage(checkerUuid).isEqualTo("Update checker");
}
@Test
public void nameCanBeUpdated() throws Exception {
CheckerCreation checkerCreation =
CheckerCreation.builder()
.setCheckerUuid(checkerUuid)
.setName(checkerName)
.setRepository(checkerRepository)
.build();
createChecker(checkerCreation);
CheckerConfig checkerConfig = loadChecker(checkerUuid);
assertThat(checkerConfig).hasName(checkerName);
String newName = "New Name";
CheckerUpdate checkerUpdate = CheckerUpdate.builder().setName(newName).build();
updateChecker(checkerUuid, checkerUpdate);
checkerConfig = loadChecker(checkerUuid);
assertThat(checkerConfig).hasName(newName);
assertThat(checkerConfig).configStringList("name").containsExactly(newName);
}
@Test
public void nameCannotBeRemoved() throws Exception {
createArbitraryChecker(checkerUuid);
CheckerUpdate checkerUpdate =
CheckerUpdate.builder().setName("").buildWithoutValidationForTesting();
IOException thrown =
assertThrows(IOException.class, () -> updateChecker(checkerUuid, checkerUpdate));
assertThat(thrown)
.hasMessageThat()
.contains(String.format("Name of the checker %s must be defined", checkerUuid));
}
@Test
public void descriptionCanBeUpdated() throws Exception {
createArbitraryChecker(checkerUuid);
String newDescription = "New description";
CheckerUpdate checkerUpdate = CheckerUpdate.builder().setDescription(newDescription).build();
updateChecker(checkerUuid, checkerUpdate);
CheckerConfig checkerConfig = loadChecker(checkerUuid);
assertThat(checkerConfig).hasDescriptionThat().value().isEqualTo(newDescription);
assertThat(checkerConfig).configStringList("description").containsExactly(newDescription);
}
@Test
public void descriptionCanBeRemoved() throws Exception {
createArbitraryChecker(checkerUuid);
CheckerUpdate checkerUpdate = CheckerUpdate.builder().setDescription("").build();
CheckerConfig checkerConfig = updateChecker(checkerUuid, checkerUpdate);
assertThat(checkerConfig).hasDescriptionThat().isEmpty();
assertThat(checkerConfig).configStringList("description").isEmpty();
}
@Test
public void urlCanBeUpdated() throws Exception {
createArbitraryChecker(checkerUuid);
String newUrl = "http://example.com/my-checker";
CheckerUpdate checkerUpdate = CheckerUpdate.builder().setUrl(newUrl).build();
updateChecker(checkerUuid, checkerUpdate);
CheckerConfig checkerConfig = loadChecker(checkerUuid);
assertThat(checkerConfig).hasUrlThat().value().isEqualTo(newUrl);
assertThat(checkerConfig).configStringList("url").containsExactly(newUrl);
}
@Test
public void urlCanBeRemoved() throws Exception {
createArbitraryChecker(checkerUuid);
CheckerUpdate checkerUpdate = CheckerUpdate.builder().setUrl("").build();
CheckerConfig checkerConfig = updateChecker(checkerUuid, checkerUpdate);
assertThat(checkerConfig).hasUrlThat().isEmpty();
assertThat(checkerConfig).configStringList("url").isEmpty();
}
@Test
public void repositoryCanBeUpdated() throws Exception {
CheckerCreation checkerCreation =
CheckerCreation.builder()
.setCheckerUuid(checkerUuid)
.setName(checkerName)
.setRepository(checkerRepository)
.build();
createChecker(checkerCreation);
Project.NameKey newRepository = Project.nameKey("another-repo");
CheckerUpdate checkerUpdate = CheckerUpdate.builder().setRepository(newRepository).build();
updateChecker(checkerUuid, checkerUpdate);
CheckerConfig checkerConfig = loadChecker(checkerUuid);
assertThat(checkerConfig).hasRepository(newRepository);
assertThat(checkerConfig).configStringList("repository").containsExactly(newRepository.get());
assertThatCommitMessage(checkerUuid).isEqualTo("Update checker");
}
@Test
public void repositoryCannotBeRemoved() throws Exception {
createArbitraryChecker(checkerUuid);
CheckerUpdate checkerUpdate =
CheckerUpdate.builder()
.setRepository(Project.nameKey(""))
.buildWithoutValidationForTesting();
IOException thrown =
assertThrows(IOException.class, () -> updateChecker(checkerUuid, checkerUpdate));
assertThat(thrown)
.hasMessageThat()
.contains(String.format("Repository of the checker %s must be defined", checkerUuid));
}
@Test
public void createDisabledChecker() throws Exception {
CheckerCreation checkerCreation = getPrefilledCheckerCreationBuilder().build();
CheckerUpdate checkerUpdate = CheckerUpdate.builder().setStatus(CheckerStatus.DISABLED).build();
CheckerConfig checker = createChecker(checkerCreation, checkerUpdate);
assertThat(checker).hasStatus(CheckerStatus.DISABLED);
assertThat(checker).configStringList("status").containsExactly("disabled");
assertThatCommitMessage(checkerUuid).isEqualTo("Create checker");
}
@Test
public void updateStatusToSameStatus() throws Exception {
CheckerConfig checker = createArbitraryChecker(checkerUuid);
assertThat(checker).hasStatus(CheckerStatus.ENABLED);
assertThat(checker).configStringList("status").containsExactly("enabled");
CheckerUpdate checkerUpdate = CheckerUpdate.builder().setStatus(CheckerStatus.ENABLED).build();
checker = updateChecker(checkerUuid, checkerUpdate);
assertThat(checker).hasStatus(CheckerStatus.ENABLED);
assertThat(checker).configStringList("status").containsExactly("enabled");
}
@Test
public void disableAndReenable() throws Exception {
createArbitraryChecker(checkerUuid);
CheckerUpdate checkerUpdate = CheckerUpdate.builder().setStatus(CheckerStatus.DISABLED).build();
CheckerConfig checker = updateChecker(checkerUuid, checkerUpdate);
assertThat(checker).hasStatus(CheckerStatus.DISABLED);
assertThat(checker).configStringList("status").containsExactly("disabled");
checkerUpdate = CheckerUpdate.builder().setStatus(CheckerStatus.ENABLED).build();
checker = updateChecker(checkerUuid, checkerUpdate);
assertThat(checker).hasStatus(CheckerStatus.ENABLED);
assertThat(checker).configStringList("status").containsExactly("enabled");
}
@Test
public void setBlockingConditions() throws Exception {
CheckerConfig checker = createArbitraryChecker(checkerUuid);
assertThat(checker).hasBlockingConditionSetThat().isEmpty();
assertThat(checker).configStringList("blocking").isEmpty();
CheckerUpdate checkerUpdate =
CheckerUpdate.builder()
.setBlockingConditions(ImmutableSortedSet.of(BlockingCondition.STATE_NOT_PASSING))
.build();
checker = updateChecker(checkerUuid, checkerUpdate);
assertThat(checker)
.hasBlockingConditionSetThat()
.containsExactly(BlockingCondition.STATE_NOT_PASSING);
assertThat(checker).configStringList("blocking").containsExactly("state not passing");
checkerUpdate = CheckerUpdate.builder().setBlockingConditions(ImmutableSortedSet.of()).build();
checker = updateChecker(checkerUuid, checkerUpdate);
assertThat(checker).hasBlockingConditionSetThat().isEmpty();
assertThat(checker).configStringList("blocking").isEmpty();
}
@Test
public void setBlockingConditionsDuringCreate() throws Exception {
CheckerCreation checkerCreation = getPrefilledCheckerCreationBuilder().build();
CheckerUpdate checkerUpdate =
CheckerUpdate.builder()
.setBlockingConditions(ImmutableSortedSet.of(BlockingCondition.STATE_NOT_PASSING))
.build();
CheckerConfig checker = createChecker(checkerCreation, checkerUpdate);
assertThat(checker)
.hasBlockingConditionSetThat()
.containsExactly(BlockingCondition.STATE_NOT_PASSING);
assertThat(checker).configStringList("blocking").containsExactly("state not passing");
}
@Test
public void setQuery() throws Exception {
CheckerConfig checker = createArbitraryChecker(checkerUuid);
String expectedQuery = "status:open";
assertThat(checker).hasQuery(expectedQuery);
// Default query must be a valid query.
assertThat(CheckerQuery.clean(expectedQuery)).isEqualTo(expectedQuery);
CheckerUpdate checkerUpdate = CheckerUpdate.builder().setQuery("f:foo").build();
checker = updateChecker(checkerUuid, checkerUpdate);
assertThat(checker).hasQuery("f:foo");
assertThat(checker).configStringList("query").containsExactly("f:foo");
checkerUpdate = CheckerUpdate.builder().setQuery("").build();
checker = updateChecker(checkerUuid, checkerUpdate);
assertThat(checker).hasNoQuery();
assertThat(checker).configStringList("query").isEmpty();
}
@Test
public void setQueryDuringCreate() throws Exception {
CheckerCreation checkerCreation = getPrefilledCheckerCreationBuilder().build();
CheckerUpdate checkerUpdate = CheckerUpdate.builder().setQuery("f:foo").build();
CheckerConfig checker = createChecker(checkerCreation, checkerUpdate);
assertThat(checker).hasQuery("f:foo");
assertThat(checker).configStringList("query").containsExactly("f:foo");
}
@Test
public void setQueryDoesNotValidateQuery() throws Exception {
String query = "foo:bar";
assertThrows(ConfigInvalidException.class, () -> CheckerQuery.clean(query));
createArbitraryChecker(checkerUuid);
CheckerUpdate checkerUpdate = CheckerUpdate.builder().setQuery("f:foo").build();
CheckerConfig checker = updateChecker(checkerUuid, checkerUpdate);
assertThat(checker).hasQuery("f:foo");
assertThat(checker).configStringList("query").containsExactly("f:foo");
}
@Test
public void refStateIsCorrectlySet() throws Exception {
CheckerCreation checkerCreation =
getPrefilledCheckerCreationBuilder().setCheckerUuid(checkerUuid).build();
CheckerConfig newChecker = createChecker(checkerCreation);
ObjectId expectedRefStateAfterCreation = getCheckerRefState(checkerUuid);
assertThat(newChecker).hasRefStateThat().isEqualTo(expectedRefStateAfterCreation);
CheckerConfig checker = loadChecker(checkerUuid);
assertThat(checker).hasRefStateThat().isEqualTo(expectedRefStateAfterCreation);
CheckerUpdate checkerUpdate = CheckerUpdate.builder().setDescription("A description.").build();
CheckerConfig updatedChecker = updateChecker(checkerUuid, checkerUpdate);
ObjectId expectedRefStateAfterUpdate = getCheckerRefState(checkerUuid);
assertThat(expectedRefStateAfterUpdate).isNotEqualTo(expectedRefStateAfterCreation);
assertThat(updatedChecker).hasRefStateThat().isEqualTo(expectedRefStateAfterUpdate);
}
@Test
public void noNewCommitOnNoOpUpdate() throws Exception {
CheckerCreation checkerCreation =
getPrefilledCheckerCreationBuilder().setCheckerUuid(checkerUuid).build();
createChecker(checkerCreation);
ObjectId refState = getCheckerRefState(checkerUuid);
// Setting a description updates the ref.
CheckerUpdate checkerUpdate = CheckerUpdate.builder().setDescription("A description.").build();
updateChecker(checkerUuid, checkerUpdate);
ObjectId refState2 = getCheckerRefState(checkerUuid);
assertThat(refState2).isNotEqualTo(refState);
// Setting the same description again is a no-op and the ref is not updated.
updateChecker(checkerUuid, checkerUpdate);
assertThat(getCheckerRefState(checkerUuid)).isEqualTo(refState2);
}
private CheckerConfig createArbitraryChecker(CheckerUuid checkerUuid) throws Exception {
CheckerCreation checkerCreation =
getPrefilledCheckerCreationBuilder().setCheckerUuid(checkerUuid).build();
return createChecker(checkerCreation);
}
private CheckerCreation.Builder getPrefilledCheckerCreationBuilder() {
return CheckerCreation.builder()
.setCheckerUuid(checkerUuid)
.setName(checkerName)
.setRepository(checkerRepository);
}
private CheckerConfig createChecker(CheckerCreation checkerCreation) throws Exception {
CheckerConfig checkerConfig =
CheckerConfig.createForNewChecker(projectName, repository, checkerCreation);
commit(checkerConfig);
return loadChecker(checkerCreation.getCheckerUuid());
}
private CheckerConfig createChecker(CheckerCreation checkerCreation, CheckerUpdate checkerUpdate)
throws Exception {
CheckerConfig checkerConfig =
CheckerConfig.createForNewChecker(projectName, repository, checkerCreation);
checkerConfig.setCheckerUpdate(checkerUpdate);
commit(checkerConfig);
return loadChecker(checkerCreation.getCheckerUuid());
}
private CheckerConfig updateChecker(CheckerUuid checkerUuid, CheckerUpdate checkerUpdate)
throws Exception {
CheckerConfig checkerConfig =
CheckerConfig.loadForChecker(projectName, repository, checkerUuid);
checkerConfig.setCheckerUpdate(checkerUpdate);
commit(checkerConfig);
return loadChecker(checkerUuid);
}
private CheckerConfig loadChecker(CheckerUuid checkerUuid) throws Exception {
return CheckerConfig.loadForChecker(projectName, repository, checkerUuid);
}
private void commit(CheckerConfig checkerConfig) throws IOException {
try (MetaDataUpdate metaDataUpdate = createMetaDataUpdate()) {
checkerConfig.commit(metaDataUpdate);
}
}
private MetaDataUpdate createMetaDataUpdate() {
PersonIdent serverIdent =
new PersonIdent(
"Gerrit Server", "noreply@gerritcodereview.com", TimeUtil.nowTs(), timeZone);
MetaDataUpdate metaDataUpdate =
new MetaDataUpdate(
GitReferenceUpdated.DISABLED, Project.nameKey("Test Repository"), repository);
metaDataUpdate.getCommitBuilder().setCommitter(serverIdent);
metaDataUpdate.getCommitBuilder().setAuthor(serverIdent);
return metaDataUpdate;
}
private void populateCheckerConfig(CheckerUuid checkerUuid, String fileContent) throws Exception {
testRepository
.branch(checkerUuid.toRefName())
.commit()
.message("Prepopulate checker.config")
.add(CheckerConfig.CHECKER_CONFIG_FILE, fileContent)
.create();
}
private ObjectId getCheckerRefState(CheckerUuid checkerUuid) throws IOException {
return repository.exactRef(checkerUuid.toRefName()).getObjectId();
}
private StringSubject assertThatCommitMessage(CheckerUuid checkerUuid) throws IOException {
try (RevWalk rw = new RevWalk(repository)) {
RevCommit commit = rw.parseCommit(getCheckerRefState(checkerUuid));
return assertWithMessage("commit message").that(commit.getFullMessage());
}
}
}