diff --git a/.bazelversion b/.bazelversion
index 9084fa2..fd2a018 100644
--- a/.bazelversion
+++ b/.bazelversion
@@ -1 +1 @@
-1.1.0
+3.1.0
diff --git a/.gitignore b/.gitignore
index 78857a0..4e7cb7d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,12 @@
+# LC_COLLATE=C sort
+/.apt_generated/
 /.classpath
 /.primary_build_tool
 /.project
 /.settings/
 /bazel-*
+/bin/gc-executor-pid
 /eclipse-out/
-/.apt_generated/
+/gc-executor.jar
+/gc.config
+/startup.log
diff --git a/BUILD b/BUILD
index cb02518..5ddfab4 100644
--- a/BUILD
+++ b/BUILD
@@ -7,26 +7,23 @@
     "gerrit_plugin",
 )
 
-CONDUCTOR_DEPS = [
-    "@postgresql//jar",
+EXECUTOR_DEPS = [
+    "@aopalliance//jar",
     "@dbcp//jar",
-    "@pool//jar",
-]
-
-EXECUTOR_DEPS = CONDUCTOR_DEPS + [
-    "@jgit//jar",
-    "@javaewah//jar",
     "@guava//jar",
     "@guice//jar",
     "@guice-assistedinject//jar",
+    "@javaewah//jar",
     "@javax_inject//jar",
-    "@aopalliance//jar",
-    "@slf4j-api//jar",
-    "@slf4j-ext//jar",
-    "@log4j-slf4j-impl//jar",
+    "@jgit//jar",
     "@log4j-api//jar",
     "@log4j-core//jar",
+    "@log4j-slf4j-impl//jar",
+    "@pool//jar",
+    "@postgresql//jar",
     "@retry//jar",
+    "@slf4j-api//jar",
+    "@slf4j-ext//jar",
 ]
 
 gerrit_plugin(
@@ -47,7 +44,6 @@
         ["src/main/resources/**/*"],
         exclude = ["src/main/resources/log4j2.xml"],
     ),
-    deps = CONDUCTOR_DEPS,
 )
 
 java_library(
@@ -91,7 +87,10 @@
         ":gc-conductor__plugin",
         ":gc-executor_lib",
         "@byte-buddy//jar",
+        "@docker-java-api//jar",
+        "@docker-java-transport//jar",
         "@duct_tape//jar",
+        "@jackson-annotations//jar",
         "@jna//jar",
         "@mockito//jar",
         "@objenesis//jar",
diff --git a/WORKSPACE b/WORKSPACE
index e9bd838..0c20233 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,7 +3,7 @@
 load("//:bazlets.bzl", "load_bazlets")
 
 load_bazlets(
-    commit = "9af263722b7eafe99af079d6ef7cf1de23e6f8d7",
+    commit = "6c39deb06f58bb62162ccb6865964f531739f512",
     #local_path = "/home/<user>/projects/bazlets",
 )
 
diff --git a/external_plugin_deps.bzl b/external_plugin_deps.bzl
index 7d9fdd6..db6208b 100644
--- a/external_plugin_deps.bzl
+++ b/external_plugin_deps.bzl
@@ -28,8 +28,8 @@
 
     maven_jar(
         name = "duct_tape",
-        artifact = "org.rnorth.duct-tape:duct-tape:1.0.7",
-        sha1 = "a26b5d90d88c91321dc7a3734ea72d2fc019ebb6",
+        artifact = "org.rnorth.duct-tape:duct-tape:1.0.8",
+        sha1 = "92edc22a9ab2f3e17c9bf700aaee377d50e8b530",
     )
 
     maven_jar(
@@ -38,18 +38,18 @@
         sha1 = "639033469776fd37c08358c6b92a4761feb2af4b",
     )
 
-    SLF4J_VERS = "1.7.26"
+    SLF4J_VERS = "1.7.30"
 
     maven_jar(
         name = "slf4j-api",
         artifact = "org.slf4j:slf4j-api:" + SLF4J_VERS,
-        sha1 = "77100a62c2e6f04b53977b9f541044d7d722693d",
+        sha1 = "b5a4b6d16ab13e34a88fae84c35cd5d68cac922c",
     )
 
     maven_jar(
         name = "slf4j-ext",
         artifact = "org.slf4j:slf4j-ext:" + SLF4J_VERS,
-        sha1 = "31cdf122e000322e9efcb38913e9ab07825b17ef",
+        sha1 = "595d5dabfeb29244b8c91776898cee78299080d5",
     )
 
     LOG4J2_VERS = "2.17.0"
@@ -74,8 +74,8 @@
 
     maven_jar(
         name = "postgresql",
-        artifact = "org.postgresql:postgresql:42.2.4",
-        sha1 = "dff98730c28a4b3a3263f0cf4abb9a3392f815a7",
+        artifact = "org.postgresql:postgresql:42.2.5",
+        sha1 = "951b7eda125f3137538a94e2cbdcf744088ad4c2",
     )
 
     maven_jar(
@@ -92,22 +92,22 @@
 
     maven_jar(
         name = "guava",
-        artifact = "com.google.guava:guava:25.1-jre",
-        sha1 = "6c57e4b22b44e89e548b5c9f70f0c45fe10fb0b4",
+        artifact = "com.google.guava:guava:26.0-jre",
+        sha1 = "6a806eff209f36f635f943e16d97491f00f6bfab",
     )
 
-    GUICE_VERS = "4.2.0"
+    GUICE_VERS = "4.2.1"
 
     maven_jar(
         name = "guice",
         artifact = "com.google.inject:guice:" + GUICE_VERS,
-        sha1 = "25e1f4c1d528a1cffabcca0d432f634f3132f6c8",
+        sha1 = "f77dfd89318fe3ff293bafceaa75fbf66e4e4b10",
     )
 
     maven_jar(
         name = "guice-assistedinject",
         artifact = "com.google.inject.extensions:guice-assistedinject:" + GUICE_VERS,
-        sha1 = "e7270305960ad7db56f7e30cb9df6be9ff1cfb45",
+        sha1 = "d327e4aee7c96f08cd657c17da231a1f4a8999ac",
     )
 
     maven_jar(
@@ -125,8 +125,8 @@
     maven_jar(
         name = "jgit",
         artifact =
-            "org.eclipse.jgit:org.eclipse.jgit:4.11.9.201909030838-r",
-        sha1 = "3bc74ffed6186bf2fc37404216e5ef16f904d0b0",
+            "org.eclipse.jgit:org.eclipse.jgit:5.1.16.202106041830-r",
+        sha1 = "1b32273b9b8326a14355374702799b6cd4a94050",
     )
 
     maven_jar(
@@ -149,32 +149,54 @@
 
     maven_jar(
         name = "jna",
-        artifact = "net.java.dev.jna:jna:5.2.0",
-        sha1 = "ed8b772eb077a9cb50e44e90899c66a9a6c00e67",
+        artifact = "net.java.dev.jna:jna:5.5.0",
+        sha1 = "0e0845217c4907822403912ad6828d8e0b256208",
     )
 
-    TESTCONTAINERS_VERS = "1.12.3"
+    DOCKER_JAVA_VERS = "3.2.5"
+
+    maven_jar(
+        name = "docker-java-api",
+        artifact = "com.github.docker-java:docker-java-api:" + DOCKER_JAVA_VERS,
+        sha1 = "8fe5c5e39f940ce58620e77cedc0a2a52d76f9d8",
+    )
+
+    maven_jar(
+        name = "docker-java-transport",
+        artifact = "com.github.docker-java:docker-java-transport:" + DOCKER_JAVA_VERS,
+        sha1 = "27af0ee7ebc2f5672e23ea64769497b5d55ce3ac",
+    )
+
+    # https://github.com/docker-java/docker-java/blob/3.2.5/pom.xml#L61
+    # <=> DOCKER_JAVA_VERS
+    maven_jar(
+        name = "jackson-annotations",
+        artifact = "com.fasterxml.jackson.core:jackson-annotations:2.10.3",
+        sha1 = "0f63b3b1da563767d04d2e4d3fc1ae0cdeffebe7",
+    )
+
+    TESTCONTAINERS_VERS = "1.15.0"
 
     maven_jar(
         name = "testcontainers",
         artifact = "org.testcontainers:testcontainers:" + TESTCONTAINERS_VERS,
-        sha1 = "e424a4549640e120acceac641ac909fcda58bf62",
+        sha1 = "b627535b444d88e7b14953bb953d80d9b7b3bd76",
     )
 
     maven_jar(
         name = "testcontainers-database-commons",
         artifact = "org.testcontainers:database-commons:" + TESTCONTAINERS_VERS,
-        sha1 = "69a857af8c90be1f2ba6d7f70a59bd5687854e8f",
+        sha1 = "bc52637643da33f8fadfb6220cb59a7d8da37325",
     )
 
     maven_jar(
         name = "testcontainers-jdbc",
         artifact = "org.testcontainers:jdbc:" + TESTCONTAINERS_VERS,
-        sha1 = "8f86e3ebf31b3a0439ba537bba770b5be219b55b",
+        sha1 = "3626ed0746c94b337b1872afa90331bf9e2e6e16",
     )
 
     maven_jar(
         name = "testcontainers-postgres",
         artifact = "org.testcontainers:postgresql:" + TESTCONTAINERS_VERS,
-        sha1 = "946fc6dc021b0b760da3fd005d2fd871fce10be4",
+        sha1 = "25daf6c0dd1d52e4a1b899c5b3e07b71d382c7ba",
     )
diff --git a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/EvaluationTask.java b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/EvaluationTask.java
index e8aba71..43803e4 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/EvaluationTask.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/EvaluationTask.java
@@ -197,7 +197,7 @@
 
   private Collection<Ref> getAllRefs(FileRepository repo) throws IOException {
     RefDatabase refdb = repo.getRefDatabase();
-    Collection<Ref> refs = refdb.getRefs(RefDatabase.ALL).values();
+    Collection<Ref> refs = refdb.getRefs();
     List<Ref> addl = refdb.getAdditionalRefs();
     if (!addl.isEmpty()) {
       List<Ref> all = new ArrayList<>(refs.size() + addl.size());
diff --git a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/command/ShowQueue.java b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/command/ShowQueue.java
index fe41af0..4cd7417 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/command/ShowQueue.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/command/ShowQueue.java
@@ -19,9 +19,9 @@
 import com.ericsson.gerrit.plugins.gcconductor.GcQueue;
 import com.ericsson.gerrit.plugins.gcconductor.RepositoryInfo;
 import com.google.common.base.Strings;
-import com.google.gerrit.common.TimeUtil;
 import com.google.gerrit.common.data.GlobalCapability;
 import com.google.gerrit.extensions.annotations.RequiresCapability;
+import com.google.gerrit.server.util.time.TimeUtil;
 import com.google.gerrit.sshd.AdminHighPriorityCommand;
 import com.google.gerrit.sshd.CommandMetaData;
 import com.google.gerrit.sshd.SshCommand;
diff --git a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/evaluator/Evaluator.java b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/evaluator/Evaluator.java
index 5ae7fac..eda5f96 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/evaluator/Evaluator.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/evaluator/Evaluator.java
@@ -31,8 +31,8 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Future;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
 import org.eclipse.jgit.errors.RepositoryNotFoundException;
 import org.eclipse.jgit.lib.Config;
 import org.eclipse.jgit.lib.ObjectId;
@@ -48,7 +48,7 @@
   private static final Logger log = LoggerFactory.getLogger(Evaluator.class);
   private static final ThreadLocal<String> uploadRepositoryPath = new ThreadLocal<String>() {};
 
-  private final ScheduledThreadPoolExecutor executor;
+  private final ExecutorService executor;
   private final EvaluationTask.Factory evaluationTaskFactory;
   private final GitRepositoryManager repoManager;
   private final Map<String, Long> timestamps;
@@ -59,7 +59,7 @@
 
   @Inject
   Evaluator(
-      @EvaluatorExecutor ScheduledThreadPoolExecutor executor,
+      @EvaluatorExecutor ExecutorService executor,
       EvaluationTask.Factory evaluationTaskFactory,
       GitRepositoryManager repoManager,
       EvaluatorConfig config,
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index e0049aa..4f2a958 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -52,7 +52,7 @@
 The configuration can be passed to the gc executor jar by using:
 
 ```
-  java -DconfigFile=/path/to/config_file.config -jar executor.jar
+  java -DconfigFile=/path/to/gc.config -jar gc-executor.jar
 ```
 
 ### File `gc.config`
@@ -62,7 +62,6 @@
 file is modified, gc executor needs to be restarted in order to be able to use the
 new values.
 
-
 #### Sample `gc.config`:
 
 ```
@@ -73,6 +72,7 @@
   javaOptions = -Xmx32g
   javaOptions = -XX:+UseG1GC
   javaOptions = -XX:MaxGCPauseMillis=2000
+
 [core]
   executors = 2
   pickOwnHostOnly = false
@@ -178,10 +178,10 @@
 
 ### GC execution
 
-Executors can be started/stopped using gcctl.sh script.
+Executors can be started/stopped using the gc_ctl script.
 
 ```
-  /opt/gerrit/gc-conductor/gcctl.sh {start|stop|restart|status|check}
+  /opt/gerrit/gc-conductor/bin/gc_ctl {start|stop|restart|status|check}
 ```
 
 [Back to @PLUGIN@ documentation index][index]
diff --git a/src/test/README.md b/src/test/README.md
new file mode 100644
index 0000000..885522e
--- /dev/null
+++ b/src/test/README.md
@@ -0,0 +1,27 @@
+# About this directory structure
+
+```bash
+  ./resources/com
+  ./scala
+```
+
+To start using the files under these directories above, consider the
+[instructions](https://gerrit-documentation.storage.googleapis.com/Documentation/2.16.19/dev-e2e-tests.html)
+on how to use Gerrit core's Gatling framework. These are about running
+non-core test scenarios such as this plugin one below:
+
+```bash
+  sbt "gatling:testOnly com.ericsson.gerrit.plugins.gcconductor.scenarios.CreateChangesTriggeringGc"
+
+```
+
+This is a scenario that can serve as an example for how to start testing
+this plugin, along with its executor component. Both of these components
+should be locally installed along with default configuration. Plugin's
+gc-executor component is assumed to be running alongside Gerrit.
+
+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/java/com/ericsson/gerrit/plugins/gcconductor/evaluator/EvaluatorTest.java b/src/test/java/com/ericsson/gerrit/plugins/gcconductor/evaluator/EvaluatorTest.java
index 7dc403b..c51d2a8 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/gcconductor/evaluator/EvaluatorTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/gcconductor/evaluator/EvaluatorTest.java
@@ -29,7 +29,7 @@
 import java.io.File;
 import java.io.IOException;
 import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.ExecutorService;
 import org.eclipse.jgit.errors.RepositoryNotFoundException;
 import org.eclipse.jgit.lib.Config;
 import org.eclipse.jgit.lib.Repository;
@@ -49,7 +49,7 @@
   @Mock private GitRepositoryManager repoManager;
   @Mock private Repository repository;
   @Mock private Repository repositoryOther;
-  @Mock private ScheduledThreadPoolExecutor executor;
+  @Mock private ExecutorService executor;
   @Mock private EvaluatorConfig config;
   @Mock private Config gerritConfig;
 
diff --git a/src/test/resources/com/ericsson/gerrit/plugins/gcconductor/scenarios/CheckProjectStatisticsAfterGc.json b/src/test/resources/com/ericsson/gerrit/plugins/gcconductor/scenarios/CheckProjectStatisticsAfterGc.json
new file mode 100644
index 0000000..e9df002
--- /dev/null
+++ b/src/test/resources/com/ericsson/gerrit/plugins/gcconductor/scenarios/CheckProjectStatisticsAfterGc.json
@@ -0,0 +1,5 @@
+[
+  {
+    "url": "http://HOSTNAME:HTTP_PORT/a/projects/PROJECT/statistics.git"
+  }
+]
diff --git a/src/test/resources/com/ericsson/gerrit/plugins/gcconductor/scenarios/CreateChangesTriggeringGc-body.json b/src/test/resources/com/ericsson/gerrit/plugins/gcconductor/scenarios/CreateChangesTriggeringGc-body.json
new file mode 100644
index 0000000..23bf26c
--- /dev/null
+++ b/src/test/resources/com/ericsson/gerrit/plugins/gcconductor/scenarios/CreateChangesTriggeringGc-body.json
@@ -0,0 +1,5 @@
+{
+  "project": "${project}",
+  "branch": "master",
+  "subject": "Change"
+}
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
new file mode 100644
index 0000000..c267ab3
--- /dev/null
+++ b/src/test/resources/com/ericsson/gerrit/plugins/gcconductor/scenarios/CreateChangesTriggeringGc.json
@@ -0,0 +1,6 @@
+[
+  {
+    "url": "http://HOSTNAME:HTTP_PORT/a/changes/",
+    "project": "_PROJECT"
+  }
+]
diff --git a/src/test/resources/com/ericsson/gerrit/plugins/gcconductor/scenarios/DeleteChangesAfterGc.json b/src/test/resources/com/ericsson/gerrit/plugins/gcconductor/scenarios/DeleteChangesAfterGc.json
new file mode 100644
index 0000000..a371757
--- /dev/null
+++ b/src/test/resources/com/ericsson/gerrit/plugins/gcconductor/scenarios/DeleteChangesAfterGc.json
@@ -0,0 +1,5 @@
+[
+  {
+    "url": "http://HOSTNAME:HTTP_PORT/a/changes/"
+  }
+]
diff --git a/src/test/resources/log4j2.xml b/src/test/resources/log4j2.xml
index 7ee8d38..7f63ec5 100644
--- a/src/test/resources/log4j2.xml
+++ b/src/test/resources/log4j2.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Configuration status="WARN" shutdownHook="disable">
 	<Properties>
-		<Property name="log.path">opt/gerrit/review_site/logs/gc</Property>
+		<Property name="log.path">/opt/gerrit/review_site/logs/gc</Property>
 	</Properties>
 	<Appenders>
 		<RollingFile name="RollingFile" fileName="${log.path}/gc.log"
diff --git a/src/test/scala/com/ericsson/gerrit/plugins/gcconductor/scenarios/CheckProjectStatisticsAfterGc.scala b/src/test/scala/com/ericsson/gerrit/plugins/gcconductor/scenarios/CheckProjectStatisticsAfterGc.scala
new file mode 100644
index 0000000..fa43e22
--- /dev/null
+++ b/src/test/scala/com/ericsson/gerrit/plugins/gcconductor/scenarios/CheckProjectStatisticsAfterGc.scala
@@ -0,0 +1,41 @@
+// 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.ProjectSimulation
+import io.gatling.core.Predef._
+import io.gatling.core.feeder.FeederBuilder
+import io.gatling.core.structure.ScenarioBuilder
+import io.gatling.http.Predef._
+
+class CheckProjectStatisticsAfterGc extends ProjectSimulation {
+  private val data: FeederBuilder = jsonFile(resource).convert(keys).queue
+
+  def this(default: String) {
+    this()
+    this.default = default
+  }
+
+  val test: ScenarioBuilder = scenario(unique)
+    .feed(data)
+    .exec(http(unique).get("${url}")
+      .check(regex("\"number_of_loose_objects\": (\\d+),")
+        .is("0")))
+
+  setUp(
+    test.inject(
+      atOnceUsers(1)
+    )).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
new file mode 100644
index 0000000..a61b376
--- /dev/null
+++ b/src/test/scala/com/ericsson/gerrit/plugins/gcconductor/scenarios/CreateChangesTriggeringGc.scala
@@ -0,0 +1,88 @@
+// 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 io.gatling.core.feeder.FeederBuilder
+import io.gatling.core.structure.ScenarioBuilder
+import io.gatling.http.Predef._
+
+import scala.concurrent.duration._
+
+class CreateChangesTriggeringGc extends GerritSimulation {
+  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
+  private lazy val DefaultLooseObjectsToEnqueueGc = 400
+  private lazy val LooseObjectsPerChange = 2
+  private lazy val ChangesPerSecond = 4
+  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 maxSecondsToEnqueueGc = secondsToChanges + DefaultSecondsToNextEvaluation + secondsForLastEvaluation
+  private lazy val maxSecondsToExecuteGc = maxSecondsToEnqueueGc + DefaultSecondsToNextGcDequeue + secondsForLastGcExecution
+
+  override def relativeRuntimeWeight: Int = maxSecondsToExecuteGc / SecondsPerWeightUnit
+
+  private val test: ScenarioBuilder = scenario(unique)
+    .feed(data)
+    .exec(httpRequest
+      .body(ElFileBody(body)).asJson
+      .check(regex("\"" + numberKey + "\":(\\d+),").saveAs(numberKey)))
+    .exec(session => {
+      deleteChanges.upToNumber = session(numberKey).as[Int]
+      session
+    })
+
+  private val createProject = new CreateProject(default)
+  private val checkStatsAfterGc = new CheckProjectStatisticsAfterGc(default)
+  private val deleteChanges = new DeleteChangesAfterGc
+  private val deleteProject = new DeleteProject(default)
+
+  setUp(
+    createProject.test.inject(
+      nothingFor(stepWaitTime(createProject) seconds),
+      atOnceUsers(1)
+    ),
+    test.inject(
+      nothingFor(stepWaitTime(this) 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)
+    ),
+    deleteChanges.test.inject(
+      nothingFor(stepWaitTime(deleteChanges) 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/DeleteChangesAfterGc.scala b/src/test/scala/com/ericsson/gerrit/plugins/gcconductor/scenarios/DeleteChangesAfterGc.scala
new file mode 100644
index 0000000..d72f635
--- /dev/null
+++ b/src/test/scala/com/ericsson/gerrit/plugins/gcconductor/scenarios/DeleteChangesAfterGc.scala
@@ -0,0 +1,42 @@
+// 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.GerritSimulation
+import io.gatling.core.Predef._
+import io.gatling.core.feeder.FeederBuilder
+import io.gatling.core.structure.ScenarioBuilder
+import io.gatling.http.Predef.http
+
+class DeleteChangesAfterGc extends GerritSimulation {
+  private val data: FeederBuilder = jsonFile(resource).convert(keys).circular
+  private val numberKey = "number"
+  var upToNumber = 1
+
+  private lazy val OrderOfChangesToDelete = 200
+  private lazy val PerSecond = 4
+  private lazy val secondsToDeleted = OrderOfChangesToDelete / PerSecond
+
+  override def relativeRuntimeWeight: Int = (secondsToDeleted + SecondsPerWeightUnit) / SecondsPerWeightUnit
+
+  val test: ScenarioBuilder = scenario(unique)
+    .feed(data)
+    .exec(session => {
+      val numbered: Session = session.set(numberKey, upToNumber)
+      upToNumber -= 1
+      numbered
+    })
+    .exec(http(unique).delete("${url}${" + numberKey + "}"))
+}
diff --git a/tools/BUILD b/tools/BUILD
new file mode 100644
index 0000000..1fa2160
--- /dev/null
+++ b/tools/BUILD
@@ -0,0 +1 @@
+# Empty file - bazel treat directories with BUILD file as a package
\ No newline at end of file
