diff --git a/java/google/registry/monitoring/metrics/StackdriverWriter.java b/java/google/registry/monitoring/metrics/StackdriverWriter.java index a212b295e..e7a568226 100644 --- a/java/google/registry/monitoring/metrics/StackdriverWriter.java +++ b/java/google/registry/monitoring/metrics/StackdriverWriter.java @@ -232,7 +232,7 @@ public class StackdriverWriter implements MetricWriter { logger.info(String.format("Registered new metric descriptor %s", descriptor.getType())); } catch (GoogleJsonResponseException jsonException) { // Not the error we were expecting, just give up - if (!jsonException.getStatusMessage().equals("ALREADY_EXISTS")) { + if (!"ALREADY_EXISTS".equals(jsonException.getStatusMessage())) { throw jsonException; } diff --git a/javatests/google/registry/monitoring/metrics/StackdriverWriterTest.java b/javatests/google/registry/monitoring/metrics/StackdriverWriterTest.java index 36035590d..6b527df53 100644 --- a/javatests/google/registry/monitoring/metrics/StackdriverWriterTest.java +++ b/javatests/google/registry/monitoring/metrics/StackdriverWriterTest.java @@ -203,6 +203,8 @@ public class StackdriverWriterTest { @Test public void registerMetric_fetchesStackdriverDefinition() throws Exception { + // Stackdriver throws an Exception with the status message "ALREADY_EXISTS" when you try to + // register a metric that's already been registered, so we fake one here. ByteArrayInputStream inputStream = new ByteArrayInputStream("".getBytes(UTF_8)); HttpResponse response = GoogleJsonResponseExceptionHelper.createHttpResponse(400, inputStream); HttpResponseException.Builder httpResponseExceptionBuilder = @@ -220,6 +222,27 @@ public class StackdriverWriterTest { verify(client.projects().metricDescriptors().get("metric")).execute(); } + @Test + public void registerMetric_rethrowsException() throws Exception { + ByteArrayInputStream inputStream = new ByteArrayInputStream("".getBytes(UTF_8)); + HttpResponse response = GoogleJsonResponseExceptionHelper.createHttpResponse(400, inputStream); + HttpResponseException.Builder httpResponseExceptionBuilder = + new HttpResponseException.Builder(response); + httpResponseExceptionBuilder.setStatusCode(404); + GoogleJsonResponseException exception = + new GoogleJsonResponseException(httpResponseExceptionBuilder, null); + when(metricDescriptorCreate.execute()).thenThrow(exception); + StackdriverWriter writer = + new StackdriverWriter(client, PROJECT, MONITORED_RESOURCE, MAX_QPS, MAX_POINTS_PER_REQUEST); + + try { + writer.registerMetric(metric); + fail("Expected GoogleJsonResponseException"); + } catch (GoogleJsonResponseException expected) { + assertThat(exception.getStatusCode()).isEqualTo(404); + } + } + @Test public void getEncodedTimeSeries_nullLabels_encodes() throws Exception { ByteArrayInputStream inputStream = new ByteArrayInputStream("".getBytes(UTF_8));