Block Fetch Rest API call when instanceLabel is missing Bug: Issue 12728 Change-Id: I547b587f8ccad9676739ba9565381b622ddae3ce
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/client/FetchRestApiClient.java b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/client/FetchRestApiClient.java index 502d3b7..bdfc1c3 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/client/FetchRestApiClient.java +++ b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/client/FetchRestApiClient.java
@@ -14,6 +14,9 @@ package com.googlesource.gerrit.plugins.replication.pull.client; +import static java.util.Objects.requireNonNull; + +import com.google.common.base.Strings; import com.google.common.flogger.FluentLogger; import com.google.gerrit.entities.Project; import com.google.gerrit.extensions.restapi.Url; @@ -64,7 +67,11 @@ this.httpClientFactory = httpClientFactory; this.source = source; this.instanceLabel = - replicationConfig.getConfig().getString("replication", null, "instanceLabel"); + Strings.nullToEmpty( + replicationConfig.getConfig().getString("replication", null, "instanceLabel")) + .trim(); + requireNonNull( + Strings.emptyToNull(instanceLabel), "replication.instanceLabel cannot be null or empty"); } public HttpResult callFetch(Project.NameKey project, String refName, URIish targetUri)
diff --git a/src/test/java/com/googlesource/gerrit/plugins/replication/pull/client/FetchRestApiClientTest.java b/src/test/java/com/googlesource/gerrit/plugins/replication/pull/client/FetchRestApiClientTest.java index 669161f..c62ddab 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/replication/pull/client/FetchRestApiClientTest.java +++ b/src/test/java/com/googlesource/gerrit/plugins/replication/pull/client/FetchRestApiClientTest.java
@@ -15,6 +15,7 @@ package com.googlesource.gerrit.plugins.replication.pull.client; import static com.google.common.truth.Truth.assertThat; +import static com.google.gerrit.testing.GerritJUnit.assertThrows; import static javax.servlet.http.HttpServletResponse.SC_CREATED; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyString; @@ -140,6 +141,30 @@ .isEqualTo(expectedHeader.getValue()); } + @Test + public void shouldThrowExceptionWhenInstanceLabelIsNull() { + when(config.getString("replication", null, "instanceLabel")).thenReturn(null); + assertThrows( + NullPointerException.class, + () -> new FetchRestApiClient(credentials, httpClientFactory, replicationConfig, source)); + } + + @Test + public void shouldTrimInstanceLabel() { + when(config.getString("replication", null, "instanceLabel")).thenReturn(" "); + assertThrows( + NullPointerException.class, + () -> new FetchRestApiClient(credentials, httpClientFactory, replicationConfig, source)); + } + + @Test + public void shouldThrowExceptionWhenInstanceLabelIsEmpty() { + when(config.getString("replication", null, "instanceLabel")).thenReturn(""); + assertThrows( + NullPointerException.class, + () -> new FetchRestApiClient(credentials, httpClientFactory, replicationConfig, source)); + } + public String readPayload(HttpPost entity) throws UnsupportedOperationException, IOException { ByteBuffer buf = IO.readWholeStream(entity.getEntity().getContent(), 1024); return RawParseUtils.decode(buf.array(), buf.arrayOffset(), buf.limit()).trim();