Merge branch 'stable-2.14' into stable-2.15
* stable-2.14:
Upgrade bazlets to latest stable-2.14 to build with 2.14.21 API
Change-Id: I29312ca62064128b0d2b5f2dc97e7649bf35a542
diff --git a/WORKSPACE b/WORKSPACE
index 93544cf..cf972b5 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,7 +3,7 @@
load("//:bazlets.bzl", "load_bazlets")
load_bazlets(
- commit = "78c35a7eb33ee5ea0980923e246c7dba37347193",
+ commit = "f53f51fb660552d0581aa0ba52c3836ed63d56a3",
#local_path = "/home/<user>/projects/bazlets",
)
diff --git a/src/main/java/com/googlesource/gerrit/plugins/readonly/ReadOnly.java b/src/main/java/com/googlesource/gerrit/plugins/readonly/ReadOnly.java
index f84101c..f0ffbbd 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/readonly/ReadOnly.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/readonly/ReadOnly.java
@@ -17,6 +17,7 @@
import static javax.servlet.http.HttpServletResponse.SC_SERVICE_UNAVAILABLE;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Sets;
import com.google.gerrit.extensions.annotations.PluginName;
import com.google.gerrit.httpd.AllRequestFilter;
import com.google.gerrit.server.events.CommitReceivedEvent;
@@ -26,6 +27,7 @@
import com.google.inject.Inject;
import com.google.inject.Singleton;
import java.io.IOException;
+import java.util.HashSet;
import java.util.List;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
@@ -42,13 +44,15 @@
private final ReadOnlyState state;
private final ReadOnlyConfig config;
- private final String endpoint;
+ private final HashSet<String> endpoints;
@Inject
ReadOnly(ReadOnlyState state, ReadOnlyConfig config, @PluginName String pluginName) {
this.state = state;
this.config = config;
- this.endpoint = String.format("/config/server/%s~readonly", pluginName);
+ this.endpoints =
+ Sets.newHashSet(
+ String.format("/config/server/%s~readonly", pluginName), "/config/server/readonly");
}
@Override
@@ -76,12 +80,16 @@
private boolean shouldBlock(HttpServletRequest request) {
String method = request.getMethod();
String servletPath = request.getServletPath();
- return !servletPath.endsWith(endpoint)
- && (("POST".equals(method)
- && !servletPath.endsWith(GIT_UPLOAD_PACK_PROTOCOL)
- && !servletPath.equals(LOGIN_PREFIX)
- && !servletPath.contains(LOGIN_INFIX))
- || "PUT".equals(method)
- || "DELETE".equals(method));
+ for (String endpoint : endpoints) {
+ if (servletPath.endsWith(endpoint)) {
+ return false;
+ }
+ }
+ return ("POST".equals(method)
+ && !servletPath.endsWith(GIT_UPLOAD_PACK_PROTOCOL)
+ && !servletPath.equals(LOGIN_PREFIX)
+ && !servletPath.contains(LOGIN_INFIX))
+ || "PUT".equals(method)
+ || "DELETE".equals(method);
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/readonly/ReadOnlyEndpoint.java b/src/main/java/com/googlesource/gerrit/plugins/readonly/ReadOnlyEndpoint.java
index caabb57..2482cab 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/readonly/ReadOnlyEndpoint.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/readonly/ReadOnlyEndpoint.java
@@ -58,7 +58,7 @@
@Override
public Response<String> apply(ConfigResource resource, Input input) throws IOException {
state.setReadOnly(true);
- return Response.ok("");
+ return Response.ok("on");
}
}
@@ -75,7 +75,7 @@
@Override
public Response<String> apply(ConfigResource resource, Input input) throws IOException {
state.setReadOnly(false);
- return Response.ok("");
+ return Response.ok("off");
}
}
}
diff --git a/src/main/resources/Documentation/rest-api-config.md b/src/main/resources/Documentation/rest-api-config.md
new file mode 100644
index 0000000..b4cb0c3
--- /dev/null
+++ b/src/main/resources/Documentation/rest-api-config.md
@@ -0,0 +1,87 @@
+@PLUGIN@ - /config/ REST API
+==============================
+
+This page describes the REST endpoints that are added by the @PLUGIN@
+plugin.
+
+Please also take note of the general information on the
+[REST API](../../../Documentation/rest-api.html).
+
+<a id="config-endpoints" />
+Readonly Endpoints
+------------------------------------------
+
+<a id="get-readonly-status" />
+### Get Readonly Status
+_GET /config/server/@PLUGIN@~readonly_
+
+Get the Readonly status.
+
+#### Request
+
+```
+ GET /config/server/@PLUGIN@~readonly HTTP/1.0
+```
+
+As response a string is returned with the Readonly status, either `on` or `off`.
+
+#### Response
+
+```
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ "on"
+```
+
+<a id="set-readonly" />
+### Set Readonly Status
+_PUT /config/server/@PLUGIN@~readonly_
+
+Set the system in Readonly status.
+
+#### Request
+
+```
+ PUT /config/server/@PLUGIN@~readonly HTTP/1.0
+```
+
+As response a string is returned with the Readonly status, either `on` or `off`.
+
+#### Response
+
+```
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ "on"
+```
+
+<a id="delete-readonly" />
+### Remove Readonly Status
+_DELETE /config/server/@PLUGIN@~readonly_
+
+Set the system in Read-Write status.
+
+#### Request
+
+```
+ DELETE /config/server/@PLUGIN@~readonly HTTP/1.0
+```
+
+As response a string is returned with the Readonly status, either `on` or `off`.
+
+#### Response
+
+```
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ "off"
+```
diff --git a/src/test/java/com/googlesource/gerrit/plugins/readonly/ReadOnlyByHttpIT.java b/src/test/java/com/googlesource/gerrit/plugins/readonly/ReadOnlyByHttpIT.java
index 43f241c..b078dae 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/readonly/ReadOnlyByHttpIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/readonly/ReadOnlyByHttpIT.java
@@ -17,18 +17,45 @@
import static com.google.common.truth.Truth.assertThat;
import com.google.gerrit.acceptance.RestResponse;
+import com.google.gerrit.server.config.GerritServerConfig;
+import com.google.gerrit.testutil.ConfigSuite;
+import com.google.inject.Inject;
+import org.eclipse.jgit.lib.Config;
public class ReadOnlyByHttpIT extends AbstractReadOnlyTest {
+ @ConfigSuite.Default
+ public static Config withPluginNamePrefix() {
+ Config cfg = new Config();
+ cfg.setString("readonly", "test", "endpoint", "readonly~readonly");
+ return cfg;
+ }
+
+ @ConfigSuite.Config
+ public static Config withoutPluginNamePrefix() {
+ Config cfg = new Config();
+ cfg.setString("readonly", "test", "endpoint", "readonly");
+ return cfg;
+ }
+
+ @Inject @GerritServerConfig private Config config;
+
@Override
protected void setReadOnly(boolean readOnly) throws Exception {
- if (readOnly) {
- adminRestSession.put("/config/server/readonly~readonly").assertOK();
- } else {
- adminRestSession.delete("/config/server/readonly~readonly").assertOK();
- }
- RestResponse response = adminRestSession.get("/config/server/readonly~readonly");
- response.assertOK();
+ String endpoint =
+ String.format("/config/server/%s", config.getString("readonly", "test", "endpoint"));
String expectedStatus = readOnly ? "on" : "off";
+ RestResponse response;
+ if (readOnly) {
+ response = adminRestSession.put(endpoint);
+ response.assertOK();
+ assertThat(response.getEntityContent()).contains(expectedStatus);
+ } else {
+ response = adminRestSession.delete(endpoint);
+ response.assertOK();
+ assertThat(response.getEntityContent()).contains(expectedStatus);
+ }
+ response = adminRestSession.get(endpoint);
+ response.assertOK();
assertThat(response.getEntityContent()).contains(expectedStatus);
}
}