Merge branch 'stable-3.1'
* stable-3.1:
Upgrade bazlets to latest stable-3.1 to build with 3.1.7 API
CreateChangesTriggeringGc: Support existing project
Upgrade bazlets to latest stable-3.0 to build with 3.0.11 API
Remove the commented-out snapshot plugin api lines
Adapt SNAPSHOT plugin api example to the 3.1 version
Upgrade bazlets to latest stable-3.1
e2e Scenarios: Refine the gc checking resolution
Prepare for new gerrit_api snapshot version usage
Upgrade bazlets to latest stable-3.0
Upgrade bazlets to latest stable-3.0
CheckProjectStatisticsAfterGc: Make tests circular
Change-Id: I912453b22511f9ab395b50e6cd52befde2eb1701
diff --git a/WORKSPACE b/WORKSPACE
index ea302bd..8829d22 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -7,22 +7,11 @@
#local_path = "/home/<user>/projects/bazlets",
)
-# Snapshot Plugin API
-#load(
-# "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl",
-# "gerrit_api_maven_local",
-#)
-
-# Load snapshot Plugin API
-#gerrit_api_maven_local()
-
-# Release Plugin API
load(
"@com_googlesource_gerrit_bazlets//:gerrit_api.bzl",
"gerrit_api",
)
-# Load release Plugin API
gerrit_api()
load("//:external_plugin_deps.bzl", "external_plugin_deps")
diff --git a/src/test/resources/com/ericsson/gerrit/plugins/gcconductor/scenarios/CheckProjectStatisticsAfterGc.json b/src/test/resources/com/ericsson/gerrit/plugins/gcconductor/scenarios/CheckProjectStatisticsUpToGc.json
similarity index 100%
rename from src/test/resources/com/ericsson/gerrit/plugins/gcconductor/scenarios/CheckProjectStatisticsAfterGc.json
rename to src/test/resources/com/ericsson/gerrit/plugins/gcconductor/scenarios/CheckProjectStatisticsUpToGc.json
diff --git a/src/test/resources/com/ericsson/gerrit/plugins/gcconductor/scenarios/CreateChangesTriggeringGc.json b/src/test/resources/com/ericsson/gerrit/plugins/gcconductor/scenarios/CreateChangesTriggeringGc.json
index c267ab3..b4ee549 100644
--- a/src/test/resources/com/ericsson/gerrit/plugins/gcconductor/scenarios/CreateChangesTriggeringGc.json
+++ b/src/test/resources/com/ericsson/gerrit/plugins/gcconductor/scenarios/CreateChangesTriggeringGc.json
@@ -1,6 +1,6 @@
[
{
"url": "http://HOSTNAME:HTTP_PORT/a/changes/",
- "project": "_PROJECT"
+ "project": "PROJECT"
}
]
diff --git a/src/test/scala/com/ericsson/gerrit/plugins/gcconductor/scenarios/CheckProjectStatisticsAfterGc.scala b/src/test/scala/com/ericsson/gerrit/plugins/gcconductor/scenarios/CheckProjectStatisticsUpToGc.scala
similarity index 77%
rename from src/test/scala/com/ericsson/gerrit/plugins/gcconductor/scenarios/CheckProjectStatisticsAfterGc.scala
rename to src/test/scala/com/ericsson/gerrit/plugins/gcconductor/scenarios/CheckProjectStatisticsUpToGc.scala
index fa43e22..2487a85 100644
--- a/src/test/scala/com/ericsson/gerrit/plugins/gcconductor/scenarios/CheckProjectStatisticsAfterGc.scala
+++ b/src/test/scala/com/ericsson/gerrit/plugins/gcconductor/scenarios/CheckProjectStatisticsUpToGc.scala
@@ -20,8 +20,14 @@
import io.gatling.core.structure.ScenarioBuilder
import io.gatling.http.Predef._
-class CheckProjectStatisticsAfterGc extends ProjectSimulation {
- private val data: FeederBuilder = jsonFile(resource).convert(keys).queue
+import scala.concurrent.duration._
+
+class CheckProjectStatisticsUpToGc extends ProjectSimulation {
+ private val data: FeederBuilder = jsonFile(resource).convert(keys).circular
+ lazy val MaxSecondsForGcToComplete = 20
+ val ChecksPerSecond = 4
+
+ override def relativeRuntimeWeight: Int = MaxSecondsForGcToComplete / SecondsPerWeightUnit
def this(default: String) {
this()
@@ -36,6 +42,6 @@
setUp(
test.inject(
- atOnceUsers(1)
+ constantUsersPerSec(ChecksPerSecond) during (MaxSecondsForGcToComplete seconds),
)).protocols(httpProtocol)
}
diff --git a/src/test/scala/com/ericsson/gerrit/plugins/gcconductor/scenarios/CreateChangesTriggeringGc.scala b/src/test/scala/com/ericsson/gerrit/plugins/gcconductor/scenarios/CreateChangesTriggeringGc.scala
index a61b376..404df73 100644
--- a/src/test/scala/com/ericsson/gerrit/plugins/gcconductor/scenarios/CreateChangesTriggeringGc.scala
+++ b/src/test/scala/com/ericsson/gerrit/plugins/gcconductor/scenarios/CreateChangesTriggeringGc.scala
@@ -22,28 +22,31 @@
import scala.concurrent.duration._
-class CreateChangesTriggeringGc extends GerritSimulation {
+class CreateChangesTriggeringGc extends ProjectSimulation {
private val data: FeederBuilder = jsonFile(resource).convert(keys).circular
- private val default: String = name
private val numberKey = "_number"
- private lazy val DefaultSecondsToNextEvaluation = 60
- private lazy val DefaultSecondsToNextGcDequeue = 60
+ lazy val DefaultSecondsToNextEvaluation = 60
private lazy val DefaultLooseObjectsToEnqueueGc = 400
private lazy val LooseObjectsPerChange = 2
- private lazy val ChangesPerSecond = 4
- private val ChangesForLastEvaluation = 1
+ private lazy val ChangesMultiplier = 8
+ lazy val changesPerSecond: Int = 4 * ChangesMultiplier
+ val ChangesForLastEvaluation = 1
- private lazy val secondsForLastEvaluation = SecondsPerWeightUnit * 2
- private lazy val secondsForLastGcExecution = secondsForLastEvaluation * 2
- private lazy val changesToEnqueueGc = DefaultLooseObjectsToEnqueueGc / LooseObjectsPerChange
- private lazy val secondsToChanges = changesToEnqueueGc / ChangesPerSecond
+ lazy val secondsForLastEvaluation: Int = SecondsPerWeightUnit
+ private lazy val changesToEnqueueGc = DefaultLooseObjectsToEnqueueGc * ChangesMultiplier / LooseObjectsPerChange
+ lazy val secondsToChanges: Int = changesToEnqueueGc / changesPerSecond
private lazy val maxSecondsToEnqueueGc = secondsToChanges + DefaultSecondsToNextEvaluation + secondsForLastEvaluation
- private lazy val maxSecondsToExecuteGc = maxSecondsToEnqueueGc + DefaultSecondsToNextGcDequeue + secondsForLastGcExecution
- override def relativeRuntimeWeight: Int = maxSecondsToExecuteGc / SecondsPerWeightUnit
+ override def relativeRuntimeWeight: Int = maxSecondsToEnqueueGc / SecondsPerWeightUnit
- private val test: ScenarioBuilder = scenario(unique)
+ def this(default: String, deleteChanges: DeleteChangesAfterGc) {
+ this()
+ this.default = default
+ this.deleteChanges = deleteChanges
+ }
+
+ val test: ScenarioBuilder = scenario(unique)
.feed(data)
.exec(httpRequest
.body(ElFileBody(body)).asJson
@@ -53,36 +56,26 @@
session
})
- private val createProject = new CreateProject(default)
- private val checkStatsAfterGc = new CheckProjectStatisticsAfterGc(default)
- private val deleteChanges = new DeleteChangesAfterGc
- private val deleteProject = new DeleteProject(default)
+ private val checkStatsUpToGc = new CheckProjectStatisticsUpToGc(default)
+ private var deleteChanges = new DeleteChangesAfterGc
setUp(
- createProject.test.inject(
- nothingFor(stepWaitTime(createProject) seconds),
- atOnceUsers(1)
- ),
test.inject(
nothingFor(stepWaitTime(this) seconds),
- constantUsersPerSec(ChangesPerSecond) during (secondsToChanges seconds),
+ constantUsersPerSec(changesPerSecond) during (secondsToChanges seconds),
nothingFor(DefaultSecondsToNextEvaluation seconds),
nothingFor(secondsForLastEvaluation / 2 seconds),
atOnceUsers(ChangesForLastEvaluation),
nothingFor(secondsForLastEvaluation / 2 seconds)
),
- checkStatsAfterGc.test.inject(
- nothingFor(stepWaitTime(checkStatsAfterGc) seconds),
- atOnceUsers(1)
+ checkStatsUpToGc.test.inject(
+ nothingFor(stepWaitTime(checkStatsUpToGc) seconds),
+ constantUsersPerSec(checkStatsUpToGc.ChecksPerSecond) during (checkStatsUpToGc.MaxSecondsForGcToComplete seconds)
),
deleteChanges.test.inject(
nothingFor(stepWaitTime(deleteChanges) seconds),
- constantUsersPerSec(ChangesPerSecond) during (secondsToChanges seconds),
+ constantUsersPerSec(changesPerSecond) during (secondsToChanges seconds),
atOnceUsers(ChangesForLastEvaluation)
),
- deleteProject.test.inject(
- nothingFor(stepWaitTime(deleteProject) seconds),
- atOnceUsers(1)
- ),
).protocols(httpProtocol)
}
diff --git a/src/test/scala/com/ericsson/gerrit/plugins/gcconductor/scenarios/CreateChangesTriggeringGcWithProject.scala b/src/test/scala/com/ericsson/gerrit/plugins/gcconductor/scenarios/CreateChangesTriggeringGcWithProject.scala
new file mode 100644
index 0000000..a6d5f63
--- /dev/null
+++ b/src/test/scala/com/ericsson/gerrit/plugins/gcconductor/scenarios/CreateChangesTriggeringGcWithProject.scala
@@ -0,0 +1,57 @@
+// 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.ericsson.gerrit.plugins.gcconductor.scenarios
+
+import com.google.gerrit.scenarios._
+import io.gatling.core.Predef.{atOnceUsers, nothingFor, _}
+
+import scala.concurrent.duration._
+
+class CreateChangesTriggeringGcWithProject extends GerritSimulation {
+ private val default: String = name
+
+ private val createProject = new CreateProject(default)
+ private val deleteChanges = new DeleteChangesAfterGc
+ private val createChanges = new CreateChangesTriggeringGc(default, deleteChanges)
+ private val checkStatsUpToGc = new CheckProjectStatisticsUpToGc(default)
+ private val deleteProject = new DeleteProject(default)
+
+ setUp(
+ createProject.test.inject(
+ nothingFor(stepWaitTime(createProject) seconds),
+ atOnceUsers(1)
+ ),
+ createChanges.test.inject(
+ nothingFor(stepWaitTime(createChanges) seconds),
+ constantUsersPerSec(createChanges.changesPerSecond) during (createChanges.secondsToChanges seconds),
+ nothingFor(createChanges.DefaultSecondsToNextEvaluation seconds),
+ nothingFor(createChanges.secondsForLastEvaluation / 2 seconds),
+ atOnceUsers(createChanges.ChangesForLastEvaluation)
+ ),
+ checkStatsUpToGc.test.inject(
+ nothingFor(stepWaitTime(checkStatsUpToGc) seconds),
+ constantUsersPerSec(checkStatsUpToGc.ChecksPerSecond) during (checkStatsUpToGc.MaxSecondsForGcToComplete seconds)
+ ),
+ deleteChanges.test.inject(
+ nothingFor(stepWaitTime(deleteChanges) seconds),
+ constantUsersPerSec(createChanges.changesPerSecond) during (createChanges.secondsToChanges seconds),
+ atOnceUsers(createChanges.ChangesForLastEvaluation)
+ ),
+ deleteProject.test.inject(
+ nothingFor(stepWaitTime(deleteProject) seconds),
+ atOnceUsers(1)
+ ),
+ ).protocols(httpProtocol)
+}