ReviewersIT: Stop using Thread#sleep
Instead run reviewer adding with a direct executor in tests.
Feature: Issue 12610
Change-Id: I234f2d0abb3be8de86884cf88b3a828ae26a69c3
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/Module.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/Module.java
index 5f5b8ae..bcf586e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/Module.java
@@ -47,6 +47,7 @@
@Override
protected void configure() {
+ bindWorkQueue();
bind(CapabilityDefinition.class)
.annotatedWith(Exports.named(MODIFY_REVIEWERS_CONFIG))
.to(ModifyReviewersConfigCapability.class);
@@ -89,4 +90,8 @@
}
});
}
+
+ protected void bindWorkQueue() {
+ bind(ReviewerWorkQueue.class).to(ReviewerWorkQueue.Scheduled.class);
+ }
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewerWorkQueue.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewerWorkQueue.java
new file mode 100644
index 0000000..d4241c7
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/ReviewerWorkQueue.java
@@ -0,0 +1,46 @@
+// 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.googlesource.gerrit.plugins.reviewers;
+
+import static com.google.common.util.concurrent.MoreExecutors.directExecutor;
+
+import com.google.gerrit.server.git.WorkQueue;
+import com.google.inject.Inject;
+
+interface ReviewerWorkQueue {
+ void submit(AddReviewers addReviewers);
+
+ static class Scheduled implements ReviewerWorkQueue {
+ private final WorkQueue workQueue;
+
+ @Inject
+ Scheduled(WorkQueue workQueue) {
+ this.workQueue = workQueue;
+ }
+
+ @Override
+ public void submit(AddReviewers addReviewers) {
+ workQueue.getDefaultQueue().submit(addReviewers);
+ }
+ }
+
+ static class Direct implements ReviewerWorkQueue {
+
+ @Override
+ public void submit(AddReviewers addReviewers) {
+ directExecutor().execute(addReviewers);
+ }
+ }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/Reviewers.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/Reviewers.java
index b7c5f49..1aea95e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/Reviewers.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/Reviewers.java
@@ -36,7 +36,6 @@
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.change.ReviewerSuggestion;
import com.google.gerrit.server.change.SuggestedReviewer;
-import com.google.gerrit.server.git.WorkQueue;
import com.google.gerrit.server.query.change.ChangeQueryBuilder;
import com.google.gerrit.server.query.change.InternalChangeQuery;
import com.google.inject.Inject;
@@ -44,7 +43,6 @@
import com.google.inject.Singleton;
import java.util.List;
import java.util.Set;
-import java.util.concurrent.Future;
/** Handles automatic adding of reviewers and reviewer suggestions. */
@Singleton
@@ -57,7 +55,7 @@
private final ReviewersResolver resolver;
private final AddReviewers.Factory addReviewersFactory;
- private final WorkQueue workQueue;
+ private final ReviewerWorkQueue workQueue;
private final ReviewersConfig config;
private final Provider<CurrentUser> user;
private final ChangeQueryBuilder queryBuilder;
@@ -67,7 +65,7 @@
Reviewers(
ReviewersResolver resolver,
AddReviewers.Factory addReviewersFactory,
- WorkQueue workQueue,
+ ReviewerWorkQueue workQueue,
ReviewersConfig config,
Provider<CurrentUser> user,
ChangeQueryBuilder queryBuilder,
@@ -159,9 +157,7 @@
final AddReviewers addReviewers =
addReviewersFactory.create(
c, resolver.resolve(reviewers, projectName, changeNumber, uploader));
-
- @SuppressWarnings("unused")
- Future<?> ignored = workQueue.getDefaultQueue().submit(addReviewers);
+ workQueue.submit(addReviewers);
} catch (QueryParseException e) {
logger.atWarning().log(
"Could not add default reviewers for change %d of project %s, filter is invalid: %s",
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/TestModule.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/TestModule.java
new file mode 100644
index 0000000..380280a
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/TestModule.java
@@ -0,0 +1,27 @@
+// 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.googlesource.gerrit.plugins.reviewers;
+
+public class TestModule extends Module {
+
+ public TestModule() {
+ super(true, false);
+ }
+
+ @Override
+ protected void bindWorkQueue() {
+ bind(ReviewerWorkQueue.class).to(ReviewerWorkQueue.Direct.class);
+ }
+}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersIT.java b/src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersIT.java
index 592f9ca..df25b27 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersIT.java
@@ -15,7 +15,6 @@
package com.googlesource.gerrit.plugins.reviewers;
import static com.google.common.truth.Truth.assertThat;
-import static com.google.common.truth.Truth.assertWithMessage;
import static com.google.gerrit.acceptance.GitUtil.fetch;
import static com.google.gerrit.extensions.client.ReviewerState.REVIEWER;
import static com.googlesource.gerrit.plugins.reviewers.ReviewersConfig.FILENAME;
@@ -33,17 +32,14 @@
import com.google.gerrit.entities.Account;
import com.google.gerrit.entities.BranchNameKey;
import com.google.gerrit.entities.RefNames;
-import com.google.gerrit.extensions.common.AccountInfo;
-import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.inject.Inject;
-import java.util.Collection;
import java.util.List;
import java.util.Set;
import org.eclipse.jgit.lib.Config;
import org.junit.Test;
@NoHttpd
-@TestPlugin(name = "reviewers", sysModule = "com.googlesource.gerrit.plugins.reviewers.Module")
+@TestPlugin(name = "reviewers", sysModule = "com.googlesource.gerrit.plugins.reviewers.TestModule")
public class ReviewersIT extends LightweightPluginDaemonTest {
@Inject private ProjectOperations projectOperations;
@@ -101,36 +97,14 @@
testRepo.reset(projectOperations.project(project).getHead("master"));
}
- private Set<Account.Id> reviewersFor(String changeId)
- throws RestApiException, InterruptedException {
- Collection<AccountInfo> reviewers;
- // Wait for 100 ms until the create patch set event
- // is processed by the reviewers plugin
- long wait = 0;
- do {
- reviewers = gApi.changes().id(changeId).get().reviewers.get(REVIEWER);
- if (reviewers == null) {
- Thread.sleep(10);
- wait += 10;
- if (wait > 100) {
- assertWithMessage("Timeout of 100 ms exceeded").fail();
- }
- }
- } while (reviewers == null);
- return reviewers.stream().map(a -> Account.id(a._accountId)).collect(toSet());
+ private Set<Account.Id> reviewersFor(String changeId) throws Exception {
+ return gApi.changes().id(changeId).get().reviewers.get(REVIEWER).stream()
+ .map(a -> Account.id(a._accountId))
+ .collect(toSet());
}
- private void assertNoReviewersAddedFor(String changeId)
- throws InterruptedException, RestApiException {
- Collection<AccountInfo> reviewers;
- long wait = 0;
- do {
- Thread.sleep(10);
- wait += 10;
- reviewers = gApi.changes().id(changeId).get().reviewers.get(REVIEWER);
- } while (reviewers == null && wait < 100);
-
- assertThat(reviewers).isNull();
+ private void assertNoReviewersAddedFor(String changeId) throws Exception {
+ assertThat(gApi.changes().id(changeId).get().reviewers.get(REVIEWER)).isNull();
}
private Filter filter(String filter) {