diff options
author | Nguyen Tuan Khang Phan <nguyen.tuan.khang.phan@ericsson.com> | 2021-02-18 15:22:50 -0500 |
---|---|---|
committer | Marco Miller <marco.mmiller@gmail.com> | 2021-03-09 13:43:27 +0000 |
commit | 2005b5bfb438adbea7dd1446fc50b0e13e996a04 (patch) | |
tree | f8c2051df1ce62e9f75bd740f52cab5cad8bb82d | |
parent | 6b9f91592b3f675b399127bd6818584de8e06a51 (diff) |
e2e-tests: add RestoreChange scenario
Add restore functionality to be used with existing abandon scenario.
Change-Id: I49dbc9a62925b219288dce5472fe8062e07303ef
3 files changed, 95 insertions, 6 deletions
diff --git a/e2e-tests/src/test/resources/data/com/google/gerrit/scenarios/RestoreChange.json b/e2e-tests/src/test/resources/data/com/google/gerrit/scenarios/RestoreChange.json new file mode 100644 index 0000000000..665cc4d0b4 --- /dev/null +++ b/e2e-tests/src/test/resources/data/com/google/gerrit/scenarios/RestoreChange.json @@ -0,0 +1,6 @@ +[ + { + "url": "HTTP_SCHEME://HOSTNAME:HTTP_PORT/a/changes/", + "number": "NUMBER" + } +] diff --git a/e2e-tests/src/test/scala/com/google/gerrit/scenarios/AbandonChange.scala b/e2e-tests/src/test/scala/com/google/gerrit/scenarios/AbandonChange.scala index 11249e3f15..51bcb9e76b 100644 --- a/e2e-tests/src/test/scala/com/google/gerrit/scenarios/AbandonChange.scala +++ b/e2e-tests/src/test/scala/com/google/gerrit/scenarios/AbandonChange.scala @@ -26,19 +26,28 @@ class AbandonChange extends GerritSimulation { private val data: FeederBuilder = jsonFile(resource).convert(keys).circular private val projectName = className private var numbersCopy: mutable.Queue[Int] = mutable.Queue[Int]() + private var createChange: Option[CreateChange] = Some(new CreateChange(projectName)) - private val test: ScenarioBuilder = scenario(uniqueName) + override def relativeRuntimeWeight = 10 + + def this(createChange: CreateChange) { + this() + this.createChange = Some(createChange) + } + + val test: ScenarioBuilder = scenario(uniqueName) .feed(data) .exec(session => { - if (numbersCopy.isEmpty) { - numbersCopy = createChange.numbers.clone() + if (createChange.nonEmpty) { + if (numbersCopy.isEmpty) { + numbersCopy = createChange.get.numbers.clone() + } } session.set("number", numbersCopy.dequeue()) }) .exec(http(uniqueName).post("${url}${number}/abandon")) private val createProject = new CreateProject(projectName) - private val createChange = new CreateChange(projectName) private val deleteProject = new DeleteProject(projectName) setUp( @@ -46,8 +55,8 @@ class AbandonChange extends GerritSimulation { nothingFor(stepWaitTime(createProject) seconds), atOnceUsers(single) ), - createChange.test.inject( - nothingFor(stepWaitTime(createChange) seconds), + createChange.get.test.inject( + nothingFor(stepWaitTime(createChange.get) seconds), atOnceUsers(numberOfUsers) ), test.inject( diff --git a/e2e-tests/src/test/scala/com/google/gerrit/scenarios/RestoreChange.scala b/e2e-tests/src/test/scala/com/google/gerrit/scenarios/RestoreChange.scala new file mode 100644 index 0000000000..b952670d10 --- /dev/null +++ b/e2e-tests/src/test/scala/com/google/gerrit/scenarios/RestoreChange.scala @@ -0,0 +1,74 @@ +// Copyright (C) 2021 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 + +import io.gatling.core.Predef.{atOnceUsers, _} +import io.gatling.core.feeder.FeederBuilder +import io.gatling.core.structure.ScenarioBuilder +import io.gatling.http.Predef.http + +import scala.collection.mutable +import scala.concurrent.duration.DurationInt + +class RestoreChange extends GerritSimulation { + private val data: FeederBuilder = jsonFile(resource).convert(keys).circular + private val projectName = className + private var numbersCopy: mutable.Queue[Int] = mutable.Queue[Int]() + + override def relativeRuntimeWeight = 10 + + private val test: ScenarioBuilder = scenario(uniqueName) + .feed(data) + .exec(session => { + if (numbersCopy.isEmpty) { + numbersCopy = createChange.numbers.clone() + } + session.set("number", numbersCopy.dequeue()) + } + ).exec(http(uniqueName).post("${url}${number}/restore")) + + private val createProject = new CreateProject(projectName) + private val createChange = new CreateChange(projectName) + private val abandonChange = new AbandonChange(createChange) + private val deleteChange = new DeleteChange(createChange) + private val deleteProject = new DeleteProject(projectName) + + setUp( + createProject.test.inject( + nothingFor(stepWaitTime(createProject) seconds), + atOnceUsers(single) + ), + createChange.test.inject( + nothingFor(stepWaitTime(createChange) seconds), + atOnceUsers(numberOfUsers) + ), + abandonChange.test.inject( + nothingFor(stepWaitTime(abandonChange) seconds), + atOnceUsers(numberOfUsers) + ), + test.inject( + nothingFor(stepWaitTime(this) seconds), + atOnceUsers(numberOfUsers) + ), + deleteChange.test.inject( + nothingFor(stepWaitTime(deleteChange) seconds), + atOnceUsers(numberOfUsers) + ), + deleteProject.test.inject( + nothingFor(stepWaitTime(deleteProject) seconds), + atOnceUsers(single) + ), + ).protocols(httpProtocol) +} |