| // 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.acceptance.testsuite; |
| |
| import com.google.common.collect.ImmutableSet; |
| import com.google.gerrit.entities.Project; |
| import com.google.gerrit.plugins.checks.Checker; |
| import com.google.gerrit.plugins.checks.CheckerUuid; |
| import com.google.gerrit.plugins.checks.api.CheckerInfo; |
| import java.io.IOException; |
| import org.eclipse.jgit.errors.ConfigInvalidException; |
| import org.eclipse.jgit.lib.ObjectId; |
| import org.eclipse.jgit.revwalk.RevCommit; |
| |
| /** |
| * An aggregation of operations on checkers for test purposes. |
| * |
| * <p>To execute the operations, no Gerrit permissions are necessary. |
| * |
| * <p><strong>Note:</strong> This interface is not implemented using the REST or extension API. |
| * Hence, it cannot be used for testing those APIs. |
| */ |
| public interface CheckerOperations { |
| /** |
| * Starts the fluent chain for querying or modifying a checker. Please see the methods of {@link |
| * PerCheckerOperations} for details on possible operations. |
| * |
| * @param checkerUuid parsed UUID. |
| * @return an aggregation of operations on a specific checker |
| */ |
| PerCheckerOperations checker(CheckerUuid checkerUuid); |
| |
| /** |
| * Starts the fluent chain for querying or modifying a checker. Please see the methods of {@link |
| * PerCheckerOperations} for details on possible operations. |
| * |
| * @param checkerUuid UUID string to parse |
| * @return an aggregation of operations on a specific checker |
| */ |
| default PerCheckerOperations checker(String checkerUuid) { |
| return checker(CheckerUuid.parse(checkerUuid)); |
| } |
| |
| /** |
| * Starts the fluent chain to create a checker. The returned builder can be used to specify the |
| * attributes of the new checker. To create the checker for real, {@link |
| * TestCheckerCreation.Builder#create()} must be called. |
| * |
| * <p>Example: |
| * |
| * <pre> |
| * String createdCheckerUuid = checkerOperations |
| * .newChecker() |
| * .name("my-checker") |
| * .description("A simple checker.") |
| * .create(); |
| * </pre> |
| * |
| * <p><strong>Note:</strong> If another checker with the provided name already exists, the |
| * creation of the checker will succeed since checker names are not unique. |
| * |
| * @return a builder to create the new checker |
| */ |
| TestCheckerCreation.Builder newChecker(); |
| |
| /** |
| * Returns the UUIDs of the checkers that apply to the given repository. |
| * |
| * @param repositoryName repository name |
| * @return set of UUIDs of the checkers that apply to the given repository |
| * @throws IOException if reading the checker list fails |
| */ |
| ImmutableSet<CheckerUuid> checkersOf(Project.NameKey repositoryName) throws IOException; |
| |
| /** |
| * Returns the SHA1s of the repositories that have applying checkers. |
| * |
| * <p>These are the keys used in the {@code NoteMap} of {@code refs/meta/checkers}. |
| * |
| * @return the SHA1s of the repositories that have applying checkers |
| * @throws IOException if reading the repository SHA1s fails |
| */ |
| ImmutableSet<ObjectId> sha1sOfRepositoriesWithCheckers() throws IOException; |
| |
| /** An aggregation of methods on a specific checker. */ |
| interface PerCheckerOperations { |
| |
| /** |
| * Checks whether the checker exists. |
| * |
| * @return {@code true} if the checker exists |
| */ |
| boolean exists(); |
| |
| /** |
| * Retrieves the checker. |
| * |
| * <p><strong>Note:</strong> This call will fail with an exception if the requested checker |
| * doesn't exist. If you want to check for the existence of a checker, use {@link #exists()} |
| * instead. |
| * |
| * @return the corresponding {@code Checker} |
| */ |
| Checker get(); |
| |
| /** |
| * Retrieves the tip commit of the checker ref. |
| * |
| * <p><strong>Note:</strong>This call will fail with an exception if the checker doesn't exist. |
| * |
| * @return the tip commit of the checker ref |
| * @throws IOException if reading the commit fails |
| */ |
| RevCommit commit() throws IOException; |
| |
| /** |
| * Retrieves the checker config as text. |
| * |
| * <p>This call reads the checker config from the checker ref and returns it as text. |
| * |
| * <p><strong>Note:</strong>This call will fail with an exception if the checker doesn't exist. |
| * |
| * @return the checker config as text |
| * @throws IOException if reading the checker config fails |
| * @throws ConfigInvalidException if the checker config is invalid |
| */ |
| String configText() throws IOException, ConfigInvalidException; |
| |
| /** |
| * Returns this checker as {@link CheckerInfo}. |
| * |
| * <p><strong>Note:</strong>This call will fail with an exception if the checker doesn't exist. |
| * |
| * @return this checker as {@link CheckerInfo} |
| */ |
| CheckerInfo asInfo(); |
| |
| /** |
| * Starts the fluent chain to update a checker. The returned builder can be used to specify how |
| * the attributes of the checker should be modified. To update the checker for real, {@link |
| * TestCheckerUpdate.Builder#update()} must be called. |
| * |
| * <p>Example: |
| * |
| * <pre> |
| * checkerOperations.forUpdate().description("Another description for this checker").update(); |
| * </pre> |
| * |
| * <p><strong>Note:</strong> The update will fail with an exception if the checker to update |
| * doesn't exist. If you want to check for the existence of a checker, use {@link #exists()}. |
| * |
| * @return a builder to update the checker |
| */ |
| TestCheckerUpdate.Builder forUpdate(); |
| |
| /** |
| * Starts the fluent chain to invalidate a checker. The returned builder can be used to specify |
| * how the checker should be made invalid. To invalidate the checker for real, {@link |
| * TestCheckerInvalidation.Builder#invalidate()} must be called. |
| * |
| * <p>Example: |
| * |
| * <pre> |
| * checkerOperations.forInvalidation().invalidConfig().invalidate(); |
| * </pre> |
| * |
| * <p><strong>Note:</strong> The invalidation will fail with an exception if the checker to |
| * invalidate doesn't exist. |
| * |
| * @return a builder to invalidate the checker |
| */ |
| TestCheckerInvalidation.Builder forInvalidation(); |
| } |
| } |