Merge branch 'stable-3.0' into stable-3.1

* stable-3.0:
  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: I6a141f5a356c8ea8ffc08f656a7f39b3bab39bd7
diff --git a/WORKSPACE b/WORKSPACE
index ab1657c..e679330 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -7,16 +7,6 @@
     #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",
@@ -25,6 +15,9 @@
 # Load release Plugin API
 gerrit_api()
 
+# Load snapshot Plugin API
+#gerrit_api(version = "3.0.xy-SNAPSHOT")
+
 load("//:external_plugin_deps.bzl", "external_plugin_deps")
 
 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/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..ea02a32 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 = 10
+  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..393397c 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
@@ -28,20 +28,18 @@
   private val numberKey = "_number"
 
   private lazy val DefaultSecondsToNextEvaluation = 60
-  private lazy val DefaultSecondsToNextGcDequeue = 60
   private lazy val DefaultLooseObjectsToEnqueueGc = 400
   private lazy val LooseObjectsPerChange = 2
-  private lazy val ChangesPerSecond = 4
+  private lazy val ChangesMultiplier = 8
+  private lazy val changesPerSecond = 4 * ChangesMultiplier
   private 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
+  private lazy val secondsForLastEvaluation = SecondsPerWeightUnit
+  private lazy val changesToEnqueueGc = DefaultLooseObjectsToEnqueueGc * ChangesMultiplier / LooseObjectsPerChange
+  private lazy val secondsToChanges = 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)
     .feed(data)
@@ -54,7 +52,7 @@
     })
 
   private val createProject = new CreateProject(default)
-  private val checkStatsAfterGc = new CheckProjectStatisticsAfterGc(default)
+  private val checkStatsUpToGc = new CheckProjectStatisticsUpToGc(default)
   private val deleteChanges = new DeleteChangesAfterGc
   private val deleteProject = new DeleteProject(default)
 
@@ -65,19 +63,19 @@
     ),
     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(