Merge changes from topics "e2e-plugin-props", "e2e-project-names" into stable-2.16 * changes: e2e-tests: Add support for automated project names e2e-tests: Support non-core JAVA_OPTS overriding
diff --git a/Documentation/dev-e2e-tests.txt b/Documentation/dev-e2e-tests.txt index 56668c7..f45e9e0 100644 --- a/Documentation/dev-e2e-tests.txt +++ b/Documentation/dev-e2e-tests.txt
@@ -110,11 +110,11 @@ ---- [ { - "url": "ssh://admin@HOSTNAME:SSH_PORT/loadtest-repo", + "url": "ssh://admin@HOSTNAME:SSH_PORT/_PROJECT", "cmd": "clone" }, { - "url": "http://HOSTNAME:HTTP_PORT/loadtest-repo", + "url": "http://HOSTNAME:HTTP_PORT/_PROJECT", "cmd": "clone" } ] @@ -154,7 +154,18 @@ Above, the properties can be set with values matching specific deployment topologies under test. The example values shown above are the currently coded default ones. The framework could support -differing or more properties over time. Plugin (non-core) scenarios may do so just as well. +differing or more properties over time. + +Plugin or otherwise non-core scenarios may do so just as well. The core java package +`com.google.gerrit.scenarios` from the example above has to be replaced with the one under which +those scenario classes are. Such extending scenarios can also add extension-specific properties. +Early examples of this can be found in the Gerrit +`link:https://gerrit.googlesource.com/plugins/high-availability[high-availability]` and +`link:https://gerrit.googlesource.com/plugins/multi-site[multi-site]` plugins test code. + +Further above, the `_PROJECT` keyword is prefixed with an underscore, which means that its value +gets automatically generated by the scenario. Any property setting for it is therefore not +applicable. Its usage differs from the non-prefixed `PROJECT` keyword, in that sense. == How to run tests
diff --git a/e2e-tests/src/test/resources/data/com/google/gerrit/scenarios/CloneUsingBothProtocols.json b/e2e-tests/src/test/resources/data/com/google/gerrit/scenarios/CloneUsingBothProtocols.json index 1125687..2389124 100644 --- a/e2e-tests/src/test/resources/data/com/google/gerrit/scenarios/CloneUsingBothProtocols.json +++ b/e2e-tests/src/test/resources/data/com/google/gerrit/scenarios/CloneUsingBothProtocols.json
@@ -1,10 +1,10 @@ [ { - "url": "ssh://admin@HOSTNAME:SSH_PORT/loadtest-repo", + "url": "ssh://admin@HOSTNAME:SSH_PORT/_PROJECT", "cmd": "clone" }, { - "url": "http://HOSTNAME:HTTP_PORT/loadtest-repo", + "url": "http://HOSTNAME:HTTP_PORT/_PROJECT", "cmd": "clone" } ]
diff --git a/e2e-tests/src/test/resources/data/com/google/gerrit/scenarios/CreateProject.json b/e2e-tests/src/test/resources/data/com/google/gerrit/scenarios/CreateProject.json index f1a38ae..40e5a45 100644 --- a/e2e-tests/src/test/resources/data/com/google/gerrit/scenarios/CreateProject.json +++ b/e2e-tests/src/test/resources/data/com/google/gerrit/scenarios/CreateProject.json
@@ -1,5 +1,5 @@ [ { - "url": "http://HOSTNAME:HTTP_PORT/a/projects/loadtest-repo" + "url": "http://HOSTNAME:HTTP_PORT/a/projects/PROJECT" } ]
diff --git a/e2e-tests/src/test/resources/data/com/google/gerrit/scenarios/DeleteProject.json b/e2e-tests/src/test/resources/data/com/google/gerrit/scenarios/DeleteProject.json index e5167b5..7cc8293 100644 --- a/e2e-tests/src/test/resources/data/com/google/gerrit/scenarios/DeleteProject.json +++ b/e2e-tests/src/test/resources/data/com/google/gerrit/scenarios/DeleteProject.json
@@ -1,5 +1,5 @@ [ { - "url": "http://HOSTNAME:HTTP_PORT/a/projects/loadtest-repo/delete-project~delete" + "url": "http://HOSTNAME:HTTP_PORT/a/projects/PROJECT/delete-project~delete" } ]
diff --git a/e2e-tests/src/test/scala/com/google/gerrit/scenarios/CloneUsingBothProtocols.scala b/e2e-tests/src/test/scala/com/google/gerrit/scenarios/CloneUsingBothProtocols.scala index 182ac48..86a336d 100644 --- a/e2e-tests/src/test/scala/com/google/gerrit/scenarios/CloneUsingBothProtocols.scala +++ b/e2e-tests/src/test/scala/com/google/gerrit/scenarios/CloneUsingBothProtocols.scala
@@ -22,13 +22,18 @@ class CloneUsingBothProtocols extends GitSimulation { private val data: FileBasedFeederBuilder[Any]#F#F = jsonFile(resource).convert(url).queue + private val default: String = name + + override def replaceOverride(in: String): String = { + replaceKeyWith("_project", default, in) + } private val test: ScenarioBuilder = scenario(name) .feed(data) .exec(gitRequest) - private val createProject = new CreateProject - private val deleteProject = new DeleteProject + private val createProject = new CreateProject(default) + private val deleteProject = new DeleteProject(default) setUp( createProject.test.inject(
diff --git a/e2e-tests/src/test/scala/com/google/gerrit/scenarios/CreateProject.scala b/e2e-tests/src/test/scala/com/google/gerrit/scenarios/CreateProject.scala index 13d3519..931ff02 100644 --- a/e2e-tests/src/test/scala/com/google/gerrit/scenarios/CreateProject.scala +++ b/e2e-tests/src/test/scala/com/google/gerrit/scenarios/CreateProject.scala
@@ -18,9 +18,14 @@ import io.gatling.core.feeder.FileBasedFeederBuilder import io.gatling.core.structure.ScenarioBuilder -class CreateProject extends GerritSimulation { +class CreateProject extends ProjectSimulation { private val data: FileBasedFeederBuilder[Any]#F#F = jsonFile(resource).convert(url).queue + def this(default: String) { + this() + this.default = default + } + val test: ScenarioBuilder = scenario(name) .feed(data) .exec(httpRequest)
diff --git a/e2e-tests/src/test/scala/com/google/gerrit/scenarios/DeleteProject.scala b/e2e-tests/src/test/scala/com/google/gerrit/scenarios/DeleteProject.scala index 70b901d..bf13f83 100644 --- a/e2e-tests/src/test/scala/com/google/gerrit/scenarios/DeleteProject.scala +++ b/e2e-tests/src/test/scala/com/google/gerrit/scenarios/DeleteProject.scala
@@ -18,9 +18,14 @@ import io.gatling.core.feeder.FileBasedFeederBuilder import io.gatling.core.structure.ScenarioBuilder -class DeleteProject extends GerritSimulation { +class DeleteProject extends ProjectSimulation { private val data: FileBasedFeederBuilder[Any]#F#F = jsonFile(resource).convert(url).queue + def this(default: String) { + this() + this.default = default + } + val test: ScenarioBuilder = scenario(name) .feed(data) .exec(httpRequest)
diff --git a/e2e-tests/src/test/scala/com/google/gerrit/scenarios/GerritSimulation.scala b/e2e-tests/src/test/scala/com/google/gerrit/scenarios/GerritSimulation.scala index a159977..d47af01 100644 --- a/e2e-tests/src/test/scala/com/google/gerrit/scenarios/GerritSimulation.scala +++ b/e2e-tests/src/test/scala/com/google/gerrit/scenarios/GerritSimulation.scala
@@ -35,13 +35,13 @@ protected val url: PartialFunction[(String, Any), Any] = { case ("url", url) => - var in = replaceProperty("hostname", "localhost", url.toString) + var in = replaceOverride(url.toString) + in = replaceProperty("hostname", "localhost", in) in = replaceProperty("http_port", 8080, in) replaceProperty("ssh_port", 29418, in) } - private def replaceProperty(term: String, default: Any, in: String): String = { - val key: String = term.toUpperCase + protected def replaceProperty(term: String, default: Any, in: String): String = { val property = pack + "." + term var value = default default match { @@ -53,6 +53,26 @@ case _: Integer => value = Integer.getInteger(property, default.asInstanceOf[Integer]) } + replaceKeyWith(term, value, in) + } + + protected def replaceKeyWith(term: String, value: Any, in: String): String = { + val key: String = term.toUpperCase in.replaceAllLiterally(key, value.toString) } + + /** + * Meant to be optionally overridden by plugins or other extensions. + * Such potential overriding methods, such as the example below, + * typically return resulting call(s) to [[replaceProperty()]]. + * This is usually similar to how [[url]] is implemented above. + * + * <pre> + * override def replaceOverride(in: String): String = { + * // Simple e.g., replaceProperty("EXTENSION_JSON_KEY", "default", in) + * </pre> + */ + def replaceOverride(in: String): String = { + in + } }
diff --git a/e2e-tests/src/test/scala/com/google/gerrit/scenarios/ProjectSimulation.scala b/e2e-tests/src/test/scala/com/google/gerrit/scenarios/ProjectSimulation.scala new file mode 100644 index 0000000..141c3cf --- /dev/null +++ b/e2e-tests/src/test/scala/com/google/gerrit/scenarios/ProjectSimulation.scala
@@ -0,0 +1,23 @@ +// 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.google.gerrit.scenarios + +class ProjectSimulation extends GerritSimulation { + protected var default: String = "project" + + override def replaceOverride(in: String): String = { + replaceProperty("project", default, in) + } +}