Merge branch 'stable-3.1' into stable-3.2 * stable-3.1: Add Gatling e2e-test for rename-project Bump Bazel version to 3.5.0 Change-Id: I8d03a6b4974fd262cb0f5da13479fc0985128385
diff --git a/.bazelversion b/.bazelversion index 47b322c..1545d96 100644 --- a/.bazelversion +++ b/.bazelversion
@@ -1 +1 @@ -3.4.1 +3.5.0
diff --git a/src/test/README.md b/src/test/README.md new file mode 100644 index 0000000..f6147ff --- /dev/null +++ b/src/test/README.md
@@ -0,0 +1,16 @@ +# How to e2e-test this plugin + +Consider the +[instructions](https://gerrit-review.googlesource.com/Documentation/dev-e2e-tests.html) +on how to use Gerrit core's Gatling framework, to run non-core test +scenarios such as this plugin one below: + +``` + $ sbt "gatling:testOnly com.googlesource.gerrit.plugins.renameproject.scenarios.RenameProject" +``` + +Scenario scala source files and their companion json resource ones are +stored under the usual src/test directories. That structure follows the +scala package one from the scenario classes. The core framework expects +such a directory structure for both the scala and resources (json data) +files.
diff --git a/src/test/resources/com/googlesource/gerrit/plugins/renameproject/scenarios/RenameProject-body.json b/src/test/resources/com/googlesource/gerrit/plugins/renameproject/scenarios/RenameProject-body.json new file mode 100644 index 0000000..fd49984 --- /dev/null +++ b/src/test/resources/com/googlesource/gerrit/plugins/renameproject/scenarios/RenameProject-body.json
@@ -0,0 +1,3 @@ +{ + "name": "${project}" +}
diff --git a/src/test/resources/com/googlesource/gerrit/plugins/renameproject/scenarios/RenameProject.json b/src/test/resources/com/googlesource/gerrit/plugins/renameproject/scenarios/RenameProject.json new file mode 100644 index 0000000..6be790c --- /dev/null +++ b/src/test/resources/com/googlesource/gerrit/plugins/renameproject/scenarios/RenameProject.json
@@ -0,0 +1,6 @@ +[ + { + "url": "HTTP_SCHEME://HOSTNAME:HTTP_PORT/a/projects/_PROJECT/rename-project~rename", + "project": "_RENAMED" + } +]
diff --git a/src/test/scala/com/googlesource/gerrit/plugins/renameproject/scenarios/RenameProject.scala b/src/test/scala/com/googlesource/gerrit/plugins/renameproject/scenarios/RenameProject.scala new file mode 100644 index 0000000..744f245 --- /dev/null +++ b/src/test/scala/com/googlesource/gerrit/plugins/renameproject/scenarios/RenameProject.scala
@@ -0,0 +1,55 @@ +// Copyright (C) 2020 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.googlesource.gerrit.plugins.renameproject.scenarios + +import com.google.gerrit.scenarios.{CreateProject, DeleteProject, GerritSimulation} +import io.gatling.core.Predef._ +import io.gatling.core.feeder.FeederBuilder +import io.gatling.core.structure.ScenarioBuilder + +import scala.concurrent.duration._ + +class RenameProject extends GerritSimulation { + private val data: FeederBuilder = jsonFile(resource).convert(keys).queue + private val default = name + private val renamedTo = unique + + override def replaceOverride(in: String): String = { + val next = replaceKeyWith("_project", default, in) + replaceKeyWith("_renamed", renamedTo, next) + } + + private val createProject = new CreateProject(default) + private val deleteProject = new DeleteProject(renamedTo) + + private val test: ScenarioBuilder = scenario(unique) + .feed(data) + .exec(httpRequest.body(ElFileBody(body)).asJson) + + setUp( + createProject.test.inject( + nothingFor(stepWaitTime(createProject) seconds), + atOnceUsers(1) + ), + test.inject( + nothingFor(stepWaitTime(this) seconds), + atOnceUsers(1) + ), + deleteProject.test.inject( + nothingFor(stepWaitTime(deleteProject) seconds), + atOnceUsers(1) + ), + ).protocols(httpProtocol) +}