diff --git a/java/google/registry/monitoring/whitebox/EppMetric.java b/java/google/registry/monitoring/whitebox/EppMetric.java index 7ca133f3f..6e72d48c8 100644 --- a/java/google/registry/monitoring/whitebox/EppMetric.java +++ b/java/google/registry/monitoring/whitebox/EppMetric.java @@ -123,7 +123,9 @@ public abstract class EppMetric implements BigQueryMetric { addOptional("clientId", getClientId(), map); addOptional("privilegeLevel", getPrivilegeLevel(), map); addOptional("eppTarget", getEppTarget(), map); - addOptional("status", getStatus(), map); + if (getStatus().isPresent()) { + map.put("eppStatus", Integer.toString(getStatus().get().code)); + } return map.build(); } diff --git a/javatests/google/registry/monitoring/whitebox/EppMetricTest.java b/javatests/google/registry/monitoring/whitebox/EppMetricTest.java new file mode 100644 index 000000000..69e2a1494 --- /dev/null +++ b/javatests/google/registry/monitoring/whitebox/EppMetricTest.java @@ -0,0 +1,83 @@ +// Copyright 2016 The Domain Registry Authors. All Rights Reserved. +// +// 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 google.registry.monitoring.whitebox; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.api.services.bigquery.model.TableFieldSchema; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import google.registry.model.eppoutput.Result.Code; +import google.registry.testing.AppEngineRule; +import org.joda.time.DateTime; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** Unit tests for {@link EppMetric}. */ +@RunWith(JUnit4.class) +public class EppMetricTest { + + @Rule public final AppEngineRule appEngine = AppEngineRule.builder().build(); + + @Test + public void testGetBigQueryRowEncoding_encodesCorrectly() throws Exception { + EppMetric metric = + new EppMetric.Builder(new DateTime(1337)) + .setEppTarget("target") + .setPrivilegeLevel("level") + .setCommandName("command") + .setClientId("client") + .setStatus(Code.CommandUseError) + .incrementAttempts() + .build(new DateTime(1338)); + + // The request_id is randomly generated and hard to mock without a lot of supporting code + // so we just use the tested metric's request_id verbatim. + assertThat(metric.getBigQueryRowEncoding()) + .containsExactlyEntriesIn( + new ImmutableMap.Builder() + .put("requestId", metric.getRequestId()) + .put("startTime", "1.337000") + .put("endTime", "1.338000") + .put("commandName", "command") + .put("clientId", "client") + .put("privilegeLevel", "level") + .put("eppTarget", "target") + .put("eppStatus", "2002") + .put("attempts", "1") + .build()); + } + + @Test + public void testGetBigQueryRowEncoding_hasAllSchemaFields() throws Exception { + EppMetric metric = + new EppMetric.Builder(new DateTime(1337)) + .setEppTarget("target") + .setPrivilegeLevel("level") + .setCommandName("command") + .setClientId("client") + .setStatus(Code.CommandUseError) + .incrementAttempts() + .build(new DateTime(1338)); + ImmutableSet.Builder schemaFieldNames = new ImmutableSet.Builder<>(); + for (TableFieldSchema schemaField : metric.getSchemaFields()) { + schemaFieldNames.add(schemaField.getName()); + } + + assertThat(metric.getBigQueryRowEncoding().keySet()).isEqualTo(schemaFieldNames.build()); + } +}