Merge changes I064d5d83,I1370945f
* changes:
QuotaException: Add missing serialVersionUID
Merge branch 'stable-2.16'
diff --git a/Documentation/rest-api-projects.txt b/Documentation/rest-api-projects.txt
index 49ab36f..238eda6 100644
--- a/Documentation/rest-api-projects.txt
+++ b/Documentation/rest-api-projects.txt
@@ -1192,21 +1192,19 @@
Content-Type: application/json; charset=UTF-8
{
- "remove": [
- {
- "refs/*": {
- "permissions": {
- "read": {
- "rules": {
- "c2ce4749a32ceb82cd6adcce65b8216e12afb41c": {
- "action": "ALLOW"
- }
+ "remove": {
+ "refs/*": {
+ "permissions": {
+ "read": {
+ "rules": {
+ "c2ce4749a32ceb82cd6adcce65b8216e12afb41c": {
+ "action": "ALLOW"
}
}
}
}
}
- ]
+ }
}
----
diff --git a/WORKSPACE b/WORKSPACE
index 6daa686..f0bdc70 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -1034,10 +1034,18 @@
sha1 = "4b7f0e0dc527fab032e9800ed231080fdc3ac015",
)
+TESTCONTAINERS_VERSION = "1.10.2"
+
maven_jar(
name = "testcontainers",
- artifact = "org.testcontainers:testcontainers:1.8.0",
- sha1 = "bc413912f7044f9f12aa0782853aef0a067ee52a",
+ artifact = "org.testcontainers:testcontainers:" + TESTCONTAINERS_VERSION,
+ sha1 = "dfe35b1887685000fecee7f102bd8ce55643665c",
+)
+
+maven_jar(
+ name = "testcontainers-elasticsearch",
+ artifact = "org.testcontainers:elasticsearch:" + TESTCONTAINERS_VERSION,
+ sha1 = "c6eb4a3a0ad114929b659fa59c2ee9fe1c1d6a58",
)
maven_jar(
diff --git a/java/com/google/gerrit/server/quota/QuotaException.java b/java/com/google/gerrit/server/quota/QuotaException.java
index 56877b2..be13c0ec0 100644
--- a/java/com/google/gerrit/server/quota/QuotaException.java
+++ b/java/com/google/gerrit/server/quota/QuotaException.java
@@ -21,6 +21,8 @@
* Can be propagated directly to the REST API.
*/
public class QuotaException extends RestApiException {
+ private static final long serialVersionUID = 1L;
+
public QuotaException(String reason) {
super(reason);
}
diff --git a/java/com/google/gerrit/sshd/commands/KillCommand.java b/java/com/google/gerrit/sshd/commands/KillCommand.java
index ef12f5f..df74f86 100644
--- a/java/com/google/gerrit/sshd/commands/KillCommand.java
+++ b/java/com/google/gerrit/sshd/commands/KillCommand.java
@@ -43,7 +43,7 @@
@Inject private DeleteTask deleteTask;
@Argument(index = 0, multiValued = true, required = true, metaVar = "ID")
- private final List<String> taskIds = new ArrayList<>();
+ private List<String> taskIds = new ArrayList<>();
@Override
protected void run() {
diff --git a/javatests/com/google/gerrit/acceptance/ssh/SshCommandsIT.java b/javatests/com/google/gerrit/acceptance/ssh/SshCommandsIT.java
index e603413..eb79c18 100644
--- a/javatests/com/google/gerrit/acceptance/ssh/SshCommandsIT.java
+++ b/javatests/com/google/gerrit/acceptance/ssh/SshCommandsIT.java
@@ -28,7 +28,6 @@
import com.google.gerrit.acceptance.Sandboxed;
import com.google.gerrit.acceptance.UseSsh;
import com.google.gerrit.common.data.GlobalCapability;
-import com.google.gerrit.sshd.Commands;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -80,27 +79,35 @@
"stream-events",
"test-submit");
+ private static final ImmutableList<String> EMPTY = ImmutableList.of();
private static final ImmutableMap<String, List<String>> MASTER_COMMANDS =
- ImmutableMap.of(
- Commands.ROOT,
- Streams.concat(COMMON_ROOT_COMMANDS.stream(), MASTER_ONLY_ROOT_COMMANDS.stream())
- .sorted()
- .collect(toImmutableList()),
- "index",
- ImmutableList.of(
- "changes", "changes-in-project"), // "activate" and "start" are not included
- "logging",
- ImmutableList.of("ls", "set"),
- "plugin",
- ImmutableList.of("add", "enable", "install", "ls", "reload", "remove", "rm"),
- "test-submit",
- ImmutableList.of("rule", "type"));
+ ImmutableMap.<String, List<String>>builder()
+ .put("kill", EMPTY)
+ .put("ps", EMPTY)
+ // TODO(dpursehouse): Add "scp" and "suexec"
+ .put(
+ "gerrit",
+ Streams.concat(COMMON_ROOT_COMMANDS.stream(), MASTER_ONLY_ROOT_COMMANDS.stream())
+ .sorted()
+ .collect(toImmutableList()))
+ .put(
+ "gerrit index",
+ ImmutableList.of(
+ "changes", "changes-in-project")) // "activate" and "start" are not included
+ .put("gerrit logging", ImmutableList.of("ls", "set"))
+ .put(
+ "gerrit plugin",
+ ImmutableList.of("add", "enable", "install", "ls", "reload", "remove", "rm"))
+ .put("gerrit test-submit", ImmutableList.of("rule", "type"))
+ .build();
private static final ImmutableMap<String, List<String>> SLAVE_COMMANDS =
ImmutableMap.of(
- Commands.ROOT,
+ "kill",
+ EMPTY,
+ "gerrit",
COMMON_ROOT_COMMANDS,
- "plugin",
+ "gerrit plugin",
ImmutableList.of("add", "enable", "install", "ls", "reload", "remove", "rm"));
@Test
@@ -117,22 +124,30 @@
private void testCommandExecution(Map<String, List<String>> commands) throws Exception {
for (String root : commands.keySet()) {
- for (String command : commands.get(root)) {
- // We can't assert that adminSshSession.hasError() is false, because using the --help
- // option causes the usage info to be written to stderr. Instead, we assert on the
- // content of the stderr, which will always start with "gerrit command" when the --help
- // option is used.
- String cmd = String.format("gerrit%s%s %s", root.isEmpty() ? "" : " ", root, command);
- logger.atFine().log(cmd);
- adminSshSession.exec(String.format("%s --help", cmd));
- String response = adminSshSession.getError();
- assertWithMessage(String.format("command %s failed: %s", command, response))
- .that(response)
- .startsWith(cmd);
+ List<String> cmds = commands.get(root);
+ if (cmds.isEmpty()) {
+ testCommandExecution(root);
+ } else {
+ for (String cmd : cmds) {
+ testCommandExecution(String.format("%s %s", root, cmd));
+ }
}
}
}
+ private void testCommandExecution(String cmd) throws Exception {
+ // We can't assert that adminSshSession.hasError() is false, because using the --help
+ // option causes the usage info to be written to stderr. Instead, we assert on the
+ // content of the stderr, which will always start with "gerrit command" when the --help
+ // option is used.
+ logger.atFine().log(cmd);
+ adminSshSession.exec(String.format("%s --help", cmd));
+ String response = adminSshSession.getError();
+ assertWithMessage(String.format("command %s failed: %s", cmd, response))
+ .that(response)
+ .startsWith(cmd);
+ }
+
@Test
public void nonExistingCommandFails() throws Exception {
adminSshSession.exec("gerrit non-existing-command --help");
@@ -145,12 +160,12 @@
public void listCommands() throws Exception {
adminSshSession.exec("gerrit --help");
List<String> commands = parseCommandsFromGerritHelpText(adminSshSession.getError());
- assertThat(commands).containsExactlyElementsIn(MASTER_COMMANDS.get(Commands.ROOT)).inOrder();
+ assertThat(commands).containsExactlyElementsIn(MASTER_COMMANDS.get("gerrit")).inOrder();
restartAsSlave();
adminSshSession.exec("gerrit --help");
commands = parseCommandsFromGerritHelpText(adminSshSession.getError());
- assertThat(commands).containsExactlyElementsIn(SLAVE_COMMANDS.get(Commands.ROOT)).inOrder();
+ assertThat(commands).containsExactlyElementsIn(SLAVE_COMMANDS.get("gerrit")).inOrder();
}
private List<String> parseCommandsFromGerritHelpText(String helpText) {
diff --git a/javatests/com/google/gerrit/elasticsearch/BUILD b/javatests/com/google/gerrit/elasticsearch/BUILD
index 20ef2fa..61bd263 100644
--- a/javatests/com/google/gerrit/elasticsearch/BUILD
+++ b/javatests/com/google/gerrit/elasticsearch/BUILD
@@ -18,6 +18,7 @@
"//lib/httpcomponents:httpcore",
"//lib/jgit/org.eclipse.jgit:jgit",
"//lib/testcontainers",
+ "//lib/testcontainers:testcontainers-elasticsearch",
],
)
@@ -73,7 +74,10 @@
size = "large",
srcs = [src],
tags = ELASTICSEARCH_TAGS + ["flaky"],
- deps = ELASTICSEARCH_DEPS + [QUERY_TESTS_DEP % name],
+ deps = ELASTICSEARCH_DEPS + [QUERY_TESTS_DEP % name] + [
+ "//lib/httpcomponents:httpasyncclient",
+ "//lib/httpcomponents:httpclient",
+ ],
) for name, src in ELASTICSEARCH_TESTS_V7.items()]
junit_tests(
diff --git a/javatests/com/google/gerrit/elasticsearch/ElasticContainer.java b/javatests/com/google/gerrit/elasticsearch/ElasticContainer.java
index 79e2853..14fe4de 100644
--- a/javatests/com/google/gerrit/elasticsearch/ElasticContainer.java
+++ b/javatests/com/google/gerrit/elasticsearch/ElasticContainer.java
@@ -14,21 +14,19 @@
package com.google.gerrit.elasticsearch;
-import com.google.common.collect.ImmutableSet;
-import java.util.Set;
import org.apache.http.HttpHost;
import org.junit.AssumptionViolatedException;
-import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.elasticsearch.ElasticsearchContainer;
/* Helper class for running ES integration tests in docker container */
-public class ElasticContainer<SELF extends ElasticContainer<SELF>> extends GenericContainer<SELF> {
+public class ElasticContainer extends ElasticsearchContainer {
private static final int ELASTICSEARCH_DEFAULT_PORT = 9200;
- public static ElasticContainer<?> createAndStart(ElasticVersion version) {
+ public static ElasticContainer createAndStart(ElasticVersion version) {
// Assumption violation is not natively supported by Testcontainers.
// See https://github.com/testcontainers/testcontainers-java/issues/343
try {
- ElasticContainer<?> container = new ElasticContainer<>(version);
+ ElasticContainer container = new ElasticContainer(version);
container.start();
return container;
} catch (Throwable t) {
@@ -58,16 +56,6 @@
super(getImageName(version));
}
- @Override
- protected void configure() {
- addExposedPort(ELASTICSEARCH_DEFAULT_PORT);
- }
-
- @Override
- public Set<Integer> getLivenessCheckPortNumbers() {
- return ImmutableSet.of(getMappedPort(ELASTICSEARCH_DEFAULT_PORT));
- }
-
public HttpHost getHttpHost() {
return new HttpHost(getContainerIpAddress(), getMappedPort(ELASTICSEARCH_DEFAULT_PORT));
}
diff --git a/javatests/com/google/gerrit/elasticsearch/ElasticTestUtils.java b/javatests/com/google/gerrit/elasticsearch/ElasticTestUtils.java
index 9f7b60c..020a158 100644
--- a/javatests/com/google/gerrit/elasticsearch/ElasticTestUtils.java
+++ b/javatests/com/google/gerrit/elasticsearch/ElasticTestUtils.java
@@ -58,7 +58,7 @@
public static Config getConfig(ElasticVersion version) {
ElasticNodeInfo elasticNodeInfo;
- ElasticContainer<?> container = ElasticContainer.createAndStart(version);
+ ElasticContainer container = ElasticContainer.createAndStart(version);
elasticNodeInfo = new ElasticNodeInfo(container.getHttpHost().getPort());
String indicesPrefix = UUID.randomUUID().toString();
Config cfg = new Config();
diff --git a/javatests/com/google/gerrit/elasticsearch/ElasticV5QueryAccountsTest.java b/javatests/com/google/gerrit/elasticsearch/ElasticV5QueryAccountsTest.java
index 074debc..c8ce54a 100644
--- a/javatests/com/google/gerrit/elasticsearch/ElasticV5QueryAccountsTest.java
+++ b/javatests/com/google/gerrit/elasticsearch/ElasticV5QueryAccountsTest.java
@@ -32,7 +32,7 @@
}
private static ElasticNodeInfo nodeInfo;
- private static ElasticContainer<?> container;
+ private static ElasticContainer container;
@BeforeClass
public static void startIndexService() {
diff --git a/javatests/com/google/gerrit/elasticsearch/ElasticV5QueryChangesTest.java b/javatests/com/google/gerrit/elasticsearch/ElasticV5QueryChangesTest.java
index 89d0168..cfdfa98 100644
--- a/javatests/com/google/gerrit/elasticsearch/ElasticV5QueryChangesTest.java
+++ b/javatests/com/google/gerrit/elasticsearch/ElasticV5QueryChangesTest.java
@@ -32,7 +32,7 @@
}
private static ElasticNodeInfo nodeInfo;
- private static ElasticContainer<?> container;
+ private static ElasticContainer container;
@BeforeClass
public static void startIndexService() {
diff --git a/javatests/com/google/gerrit/elasticsearch/ElasticV5QueryGroupsTest.java b/javatests/com/google/gerrit/elasticsearch/ElasticV5QueryGroupsTest.java
index 79d3ca5..832a7bd 100644
--- a/javatests/com/google/gerrit/elasticsearch/ElasticV5QueryGroupsTest.java
+++ b/javatests/com/google/gerrit/elasticsearch/ElasticV5QueryGroupsTest.java
@@ -32,7 +32,7 @@
}
private static ElasticNodeInfo nodeInfo;
- private static ElasticContainer<?> container;
+ private static ElasticContainer container;
@BeforeClass
public static void startIndexService() {
diff --git a/javatests/com/google/gerrit/elasticsearch/ElasticV5QueryProjectsTest.java b/javatests/com/google/gerrit/elasticsearch/ElasticV5QueryProjectsTest.java
index 247cb29..29d3fa4 100644
--- a/javatests/com/google/gerrit/elasticsearch/ElasticV5QueryProjectsTest.java
+++ b/javatests/com/google/gerrit/elasticsearch/ElasticV5QueryProjectsTest.java
@@ -32,7 +32,7 @@
}
private static ElasticNodeInfo nodeInfo;
- private static ElasticContainer<?> container;
+ private static ElasticContainer container;
@BeforeClass
public static void startIndexService() {
diff --git a/javatests/com/google/gerrit/elasticsearch/ElasticV6QueryAccountsTest.java b/javatests/com/google/gerrit/elasticsearch/ElasticV6QueryAccountsTest.java
index 519a9c3..8833907 100644
--- a/javatests/com/google/gerrit/elasticsearch/ElasticV6QueryAccountsTest.java
+++ b/javatests/com/google/gerrit/elasticsearch/ElasticV6QueryAccountsTest.java
@@ -32,7 +32,7 @@
}
private static ElasticNodeInfo nodeInfo;
- private static ElasticContainer<?> container;
+ private static ElasticContainer container;
@BeforeClass
public static void startIndexService() {
diff --git a/javatests/com/google/gerrit/elasticsearch/ElasticV6QueryChangesTest.java b/javatests/com/google/gerrit/elasticsearch/ElasticV6QueryChangesTest.java
index 690734c..8ba753c 100644
--- a/javatests/com/google/gerrit/elasticsearch/ElasticV6QueryChangesTest.java
+++ b/javatests/com/google/gerrit/elasticsearch/ElasticV6QueryChangesTest.java
@@ -32,7 +32,7 @@
}
private static ElasticNodeInfo nodeInfo;
- private static ElasticContainer<?> container;
+ private static ElasticContainer container;
@BeforeClass
public static void startIndexService() {
diff --git a/javatests/com/google/gerrit/elasticsearch/ElasticV6QueryGroupsTest.java b/javatests/com/google/gerrit/elasticsearch/ElasticV6QueryGroupsTest.java
index bf0095a..cecb085 100644
--- a/javatests/com/google/gerrit/elasticsearch/ElasticV6QueryGroupsTest.java
+++ b/javatests/com/google/gerrit/elasticsearch/ElasticV6QueryGroupsTest.java
@@ -32,7 +32,7 @@
}
private static ElasticNodeInfo nodeInfo;
- private static ElasticContainer<?> container;
+ private static ElasticContainer container;
@BeforeClass
public static void startIndexService() {
diff --git a/javatests/com/google/gerrit/elasticsearch/ElasticV6QueryProjectsTest.java b/javatests/com/google/gerrit/elasticsearch/ElasticV6QueryProjectsTest.java
index f2227a9..47e9b10 100644
--- a/javatests/com/google/gerrit/elasticsearch/ElasticV6QueryProjectsTest.java
+++ b/javatests/com/google/gerrit/elasticsearch/ElasticV6QueryProjectsTest.java
@@ -32,7 +32,7 @@
}
private static ElasticNodeInfo nodeInfo;
- private static ElasticContainer<?> container;
+ private static ElasticContainer container;
@BeforeClass
public static void startIndexService() {
diff --git a/javatests/com/google/gerrit/elasticsearch/ElasticV7QueryAccountsTest.java b/javatests/com/google/gerrit/elasticsearch/ElasticV7QueryAccountsTest.java
index 7ac9f21..bddbbc9 100644
--- a/javatests/com/google/gerrit/elasticsearch/ElasticV7QueryAccountsTest.java
+++ b/javatests/com/google/gerrit/elasticsearch/ElasticV7QueryAccountsTest.java
@@ -32,7 +32,7 @@
}
private static ElasticNodeInfo nodeInfo;
- private static ElasticContainer<?> container;
+ private static ElasticContainer container;
@BeforeClass
public static void startIndexService() {
diff --git a/javatests/com/google/gerrit/elasticsearch/ElasticV7QueryChangesTest.java b/javatests/com/google/gerrit/elasticsearch/ElasticV7QueryChangesTest.java
index ed6f95b..5dcf159 100644
--- a/javatests/com/google/gerrit/elasticsearch/ElasticV7QueryChangesTest.java
+++ b/javatests/com/google/gerrit/elasticsearch/ElasticV7QueryChangesTest.java
@@ -21,7 +21,12 @@
import com.google.gerrit.testing.IndexConfig;
import com.google.inject.Guice;
import com.google.inject.Injector;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.protocol.HttpClientContext;
+import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
+import org.apache.http.impl.nio.client.HttpAsyncClients;
import org.eclipse.jgit.lib.Config;
+import org.junit.After;
import org.junit.AfterClass;
import org.junit.BeforeClass;
@@ -32,7 +37,8 @@
}
private static ElasticNodeInfo nodeInfo;
- private static ElasticContainer<?> container;
+ private static ElasticContainer container;
+ private static CloseableHttpAsyncClient client;
@BeforeClass
public static void startIndexService() {
@@ -43,6 +49,8 @@
container = ElasticContainer.createAndStart(ElasticVersion.V7_0);
nodeInfo = new ElasticNodeInfo(container.getHttpHost().getPort());
+ client = HttpAsyncClients.createDefault();
+ client.start();
}
@AfterClass
@@ -52,6 +60,16 @@
}
}
+ @After
+ public void closeIndex() {
+ client.execute(
+ new HttpPost(
+ String.format(
+ "http://localhost:%d/%s*/_close", nodeInfo.port, getSanitizedMethodName())),
+ HttpClientContext.create(),
+ null);
+ }
+
@Override
protected void initAfterLifecycleStart() throws Exception {
super.initAfterLifecycleStart();
diff --git a/javatests/com/google/gerrit/elasticsearch/ElasticV7QueryGroupsTest.java b/javatests/com/google/gerrit/elasticsearch/ElasticV7QueryGroupsTest.java
index 5efaa4a..54be7b9 100644
--- a/javatests/com/google/gerrit/elasticsearch/ElasticV7QueryGroupsTest.java
+++ b/javatests/com/google/gerrit/elasticsearch/ElasticV7QueryGroupsTest.java
@@ -32,7 +32,7 @@
}
private static ElasticNodeInfo nodeInfo;
- private static ElasticContainer<?> container;
+ private static ElasticContainer container;
@BeforeClass
public static void startIndexService() {
diff --git a/javatests/com/google/gerrit/elasticsearch/ElasticV7QueryProjectsTest.java b/javatests/com/google/gerrit/elasticsearch/ElasticV7QueryProjectsTest.java
index 02b3641..e8b4a2c 100644
--- a/javatests/com/google/gerrit/elasticsearch/ElasticV7QueryProjectsTest.java
+++ b/javatests/com/google/gerrit/elasticsearch/ElasticV7QueryProjectsTest.java
@@ -32,7 +32,7 @@
}
private static ElasticNodeInfo nodeInfo;
- private static ElasticContainer<?> container;
+ private static ElasticContainer container;
@BeforeClass
public static void startIndexService() {
diff --git a/javatests/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java b/javatests/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java
index de2234e..0ea5241 100644
--- a/javatests/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java
+++ b/javatests/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java
@@ -1709,6 +1709,10 @@
accountManager.authenticate(AuthRequest.forUser("anotheruser")).getAccountId();
assertQuery(q + " visibleto:" + user2.get(), change1);
+ String g1 = createGroup("group1", "Administrators");
+ gApi.groups().id(g1).addMembers("anotheruser");
+ assertQuery(q + " visibleto:" + g1, change1);
+
requestContext.setContext(
newRequestContext(
accountManager.authenticate(AuthRequest.forUser("anotheruser")).getAccountId()));
diff --git a/lib/httpcomponents/BUILD b/lib/httpcomponents/BUILD
index a875eaf..74cca14 100644
--- a/lib/httpcomponents/BUILD
+++ b/lib/httpcomponents/BUILD
@@ -30,7 +30,10 @@
java_library(
name = "httpasyncclient",
data = ["//lib:LICENSE-Apache2.0"],
- visibility = ["//java/com/google/gerrit/elasticsearch:__pkg__"],
+ visibility = [
+ "//java/com/google/gerrit/elasticsearch:__pkg__",
+ "//javatests/com/google/gerrit/elasticsearch:__pkg__",
+ ],
exports = ["@httpasyncclient//jar"],
)
diff --git a/lib/testcontainers/BUILD b/lib/testcontainers/BUILD
index f99365d..5e2d039 100644
--- a/lib/testcontainers/BUILD
+++ b/lib/testcontainers/BUILD
@@ -35,3 +35,12 @@
"//lib/log:ext",
],
)
+
+java_library(
+ name = "testcontainers-elasticsearch",
+ testonly = 1,
+ data = ["//lib:LICENSE-testcontainers"],
+ visibility = ["//visibility:public"],
+ exports = ["@testcontainers-elasticsearch//jar"],
+ runtime_deps = [":testcontainers"],
+)