mirror of
https://github.com/google/nomulus.git
synced 2025-08-01 23:42:12 +02:00
Add RDAP metric class
The code to use this class will come in future CLs, to avoid a huge CL. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=175162557
This commit is contained in:
parent
2aa897e698
commit
ff1ab08302
10 changed files with 570 additions and 10 deletions
290
javatests/google/registry/rdap/RdapMetricsTest.java
Normal file
290
javatests/google/registry/rdap/RdapMetricsTest.java
Normal file
|
@ -0,0 +1,290 @@
|
|||
// Copyright 2017 The Nomulus 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.rdap;
|
||||
|
||||
import static google.registry.monitoring.metrics.contrib.DistributionMetricSubject.assertThat;
|
||||
import static google.registry.monitoring.metrics.contrib.LongMetricSubject.assertThat;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import google.registry.rdap.RdapMetrics.EndpointType;
|
||||
import google.registry.rdap.RdapMetrics.SearchType;
|
||||
import google.registry.rdap.RdapMetrics.WildcardType;
|
||||
import google.registry.rdap.RdapSearchResults.IncompletenessWarningType;
|
||||
import google.registry.request.Action;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.runners.JUnit4;
|
||||
|
||||
/** Unit tests for {@link RdapMetrics}. */
|
||||
@RunWith(JUnit4.class)
|
||||
public class RdapMetricsTest {
|
||||
|
||||
private final RdapMetrics rdapMetrics = new RdapMetrics();
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
RdapMetrics.requests.reset();
|
||||
RdapMetrics.responses.reset();
|
||||
RdapMetrics.numberOfDomainsRetrieved.reset();
|
||||
RdapMetrics.numberOfHostsRetrieved.reset();
|
||||
RdapMetrics.numberOfContactsRetrieved.reset();
|
||||
}
|
||||
|
||||
private RdapMetrics.RdapMetricInformation.Builder getBuilder() {
|
||||
return RdapMetrics.RdapMetricInformation.builder()
|
||||
.setEndpointType(EndpointType.DOMAINS)
|
||||
.setSearchType(SearchType.NONE)
|
||||
.setWildcardType(WildcardType.NO_WILDCARD)
|
||||
.setPrefixLength(0)
|
||||
.setIncludeDeleted(false)
|
||||
.setRegistrarSpecified(false)
|
||||
.setRole(RdapAuthorization.Role.PUBLIC)
|
||||
.setRequestMethod(Action.Method.GET)
|
||||
.setStatusCode(200)
|
||||
.setIncompletenessWarningType(IncompletenessWarningType.COMPLETE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPost() throws Exception {
|
||||
rdapMetrics.updateMetrics(getBuilder().setRequestMethod(Action.Method.POST).build());
|
||||
assertThat(RdapMetrics.requests)
|
||||
.hasValueForLabels(1, "DOMAINS", "NO", "NO", "PUBLIC", "POST")
|
||||
.and()
|
||||
.hasNoOtherValues();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHead() throws Exception {
|
||||
rdapMetrics.updateMetrics(getBuilder().setRequestMethod(Action.Method.HEAD).build());
|
||||
assertThat(RdapMetrics.requests)
|
||||
.hasValueForLabels(1, "DOMAINS", "NO", "NO", "PUBLIC", "HEAD")
|
||||
.and()
|
||||
.hasNoOtherValues();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPrefixLength_cappedAt5() throws Exception {
|
||||
rdapMetrics.updateMetrics(
|
||||
getBuilder().setPrefixLength(6).setNumDomainsRetrieved(1).build());
|
||||
assertThat(RdapMetrics.numberOfDomainsRetrieved)
|
||||
.hasDataSetForLabels(ImmutableSet.of(1), "DOMAINS", "NONE", "NO_WILDCARD", "5+", "NO")
|
||||
.and()
|
||||
.hasNoOtherValues();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIncludeDeleted() throws Exception {
|
||||
rdapMetrics.updateMetrics(getBuilder().setIncludeDeleted(true).build());
|
||||
assertThat(RdapMetrics.requests)
|
||||
.hasValueForLabels(1, "DOMAINS", "YES", "NO", "PUBLIC", "GET")
|
||||
.and()
|
||||
.hasNoOtherValues();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDesiredRegistrar() throws Exception {
|
||||
rdapMetrics.updateMetrics(getBuilder().setRegistrarSpecified(true).build());
|
||||
assertThat(RdapMetrics.requests)
|
||||
.hasValueForLabels(1, "DOMAINS", "NO", "YES", "PUBLIC", "GET")
|
||||
.and()
|
||||
.hasNoOtherValues();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCompleteResultSet() throws Exception {
|
||||
rdapMetrics.updateMetrics(
|
||||
getBuilder()
|
||||
.setIncompletenessWarningType(IncompletenessWarningType.COMPLETE)
|
||||
.build());
|
||||
assertThat(RdapMetrics.responses)
|
||||
.hasValueForLabels(1, "DOMAINS", "NONE", "NO_WILDCARD", "200", "COMPLETE")
|
||||
.and()
|
||||
.hasNoOtherValues();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTruncatedResultSet() throws Exception {
|
||||
rdapMetrics.updateMetrics(
|
||||
getBuilder()
|
||||
.setIncompletenessWarningType(IncompletenessWarningType.TRUNCATED)
|
||||
.build());
|
||||
assertThat(RdapMetrics.responses)
|
||||
.hasValueForLabels(1, "DOMAINS", "NONE", "NO_WILDCARD", "200", "TRUNCATED")
|
||||
.and()
|
||||
.hasNoOtherValues();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPossiblyIncompleteResultSet() throws Exception {
|
||||
rdapMetrics.updateMetrics(
|
||||
getBuilder()
|
||||
.setIncompletenessWarningType(IncompletenessWarningType.MIGHT_BE_INCOMPLETE)
|
||||
.build());
|
||||
assertThat(RdapMetrics.responses)
|
||||
.hasValueForLabels(1, "DOMAINS", "NONE", "NO_WILDCARD", "200", "MIGHT_BE_INCOMPLETE")
|
||||
.and()
|
||||
.hasNoOtherValues();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPublicRole() throws Exception {
|
||||
rdapMetrics.updateMetrics(getBuilder().setRole(RdapAuthorization.Role.PUBLIC).build());
|
||||
assertThat(RdapMetrics.requests)
|
||||
.hasValueForLabels(1, "DOMAINS", "NO", "NO", "PUBLIC", "GET")
|
||||
.and()
|
||||
.hasNoOtherValues();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRegistrarRole() throws Exception {
|
||||
rdapMetrics.updateMetrics(getBuilder().setRole(RdapAuthorization.Role.REGISTRAR).build());
|
||||
assertThat(RdapMetrics.requests)
|
||||
.hasValueForLabels(1, "DOMAINS", "NO", "NO", "REGISTRAR", "GET")
|
||||
.and()
|
||||
.hasNoOtherValues();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAdminRole() throws Exception {
|
||||
rdapMetrics.updateMetrics(getBuilder().setRole(RdapAuthorization.Role.ADMINISTRATOR).build());
|
||||
assertThat(RdapMetrics.requests)
|
||||
.hasValueForLabels(1, "DOMAINS", "NO", "NO", "ADMINISTRATOR", "GET")
|
||||
.and()
|
||||
.hasNoOtherValues();
|
||||
}
|
||||
|
||||
/** Tests what would happen in a domain search for "cat.lol" which found that domain. */
|
||||
@Test
|
||||
public void testSimpleDomainSearch() throws Exception {
|
||||
rdapMetrics.updateMetrics(
|
||||
getBuilder()
|
||||
.setSearchType(SearchType.BY_DOMAIN_NAME)
|
||||
.setPrefixLength(7)
|
||||
.setNumDomainsRetrieved(1)
|
||||
.build());
|
||||
assertThat(RdapMetrics.requests)
|
||||
.hasValueForLabels(1, "DOMAINS", "NO", "NO", "PUBLIC", "GET")
|
||||
.and()
|
||||
.hasNoOtherValues();
|
||||
assertThat(RdapMetrics.responses)
|
||||
.hasValueForLabels(1, "DOMAINS", "BY_DOMAIN_NAME", "NO_WILDCARD", "200", "COMPLETE")
|
||||
.and()
|
||||
.hasNoOtherValues();
|
||||
// The prefix length is capped at 5.
|
||||
assertThat(RdapMetrics.numberOfDomainsRetrieved)
|
||||
.hasDataSetForLabels(
|
||||
ImmutableSet.of(1), "DOMAINS", "BY_DOMAIN_NAME", "NO_WILDCARD", "5+", "NO")
|
||||
.and()
|
||||
.hasNoOtherValues();
|
||||
assertThat(RdapMetrics.numberOfHostsRetrieved).hasNoOtherValues();
|
||||
assertThat(RdapMetrics.numberOfContactsRetrieved).hasNoOtherValues();
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests what would happen in a domain search by nameserver name for "ns*.cat.lol", including
|
||||
* deleted domains, which found 10 matching hosts, then looked for domains and found 5 matches.
|
||||
*/
|
||||
@Test
|
||||
public void testDomainSearchByNameserverWithWildcardAndDeleted() throws Exception {
|
||||
rdapMetrics.updateMetrics(
|
||||
getBuilder()
|
||||
.setSearchType(SearchType.BY_NAMESERVER_NAME)
|
||||
.setWildcardType(WildcardType.PREFIX_AND_SUFFIX)
|
||||
.setPrefixLength(2)
|
||||
.setIncludeDeleted(true)
|
||||
.setNumDomainsRetrieved(5)
|
||||
.setNumHostsRetrieved(10)
|
||||
.build());
|
||||
assertThat(RdapMetrics.requests)
|
||||
.hasValueForLabels(1, "DOMAINS", "YES", "NO", "PUBLIC", "GET")
|
||||
.and()
|
||||
.hasNoOtherValues();
|
||||
assertThat(RdapMetrics.responses)
|
||||
.hasValueForLabels(
|
||||
1, "DOMAINS", "BY_NAMESERVER_NAME", "PREFIX_AND_SUFFIX", "200", "COMPLETE")
|
||||
.and()
|
||||
.hasNoOtherValues();
|
||||
assertThat(RdapMetrics.numberOfDomainsRetrieved)
|
||||
.hasDataSetForLabels(
|
||||
ImmutableSet.of(5), "DOMAINS", "BY_NAMESERVER_NAME", "PREFIX_AND_SUFFIX", "2", "YES")
|
||||
.and()
|
||||
.hasNoOtherValues();
|
||||
assertThat(RdapMetrics.numberOfHostsRetrieved)
|
||||
.hasDataSetForLabels(
|
||||
ImmutableSet.of(10), "DOMAINS", "BY_NAMESERVER_NAME", "PREFIX_AND_SUFFIX", "2", "YES")
|
||||
.and()
|
||||
.hasNoOtherValues();
|
||||
assertThat(RdapMetrics.numberOfContactsRetrieved).hasNoOtherValues();
|
||||
}
|
||||
|
||||
/** Tests what would happen in a nameserver search for "*.cat.lol", which found no matches. */
|
||||
@Test
|
||||
public void testNoNameserversFound() throws Exception {
|
||||
rdapMetrics.updateMetrics(
|
||||
getBuilder()
|
||||
.setEndpointType(EndpointType.NAMESERVERS)
|
||||
.setSearchType(SearchType.BY_NAMESERVER_NAME)
|
||||
.setWildcardType(WildcardType.SUFFIX)
|
||||
.setStatusCode(404)
|
||||
.setNumHostsRetrieved(0)
|
||||
.build());
|
||||
assertThat(RdapMetrics.requests)
|
||||
.hasValueForLabels(1, "NAMESERVERS", "NO", "NO", "PUBLIC", "GET")
|
||||
.and()
|
||||
.hasNoOtherValues();
|
||||
assertThat(RdapMetrics.responses)
|
||||
.hasValueForLabels(
|
||||
1, "NAMESERVERS", "BY_NAMESERVER_NAME", "SUFFIX", "404", "COMPLETE")
|
||||
.and()
|
||||
.hasNoOtherValues();
|
||||
assertThat(RdapMetrics.numberOfDomainsRetrieved).hasNoOtherValues();
|
||||
assertThat(RdapMetrics.numberOfHostsRetrieved)
|
||||
.hasDataSetForLabels(
|
||||
ImmutableSet.of(0), "NAMESERVERS", "BY_NAMESERVER_NAME", "SUFFIX", "0", "NO")
|
||||
.and()
|
||||
.hasNoOtherValues();
|
||||
assertThat(RdapMetrics.numberOfContactsRetrieved).hasNoOtherValues();
|
||||
}
|
||||
|
||||
/** Tests what would happen in an entity search for "Mike*" which found 50 contacts. */
|
||||
@Test
|
||||
public void testEntitySearchByNameWithWildcard() throws Exception {
|
||||
rdapMetrics.updateMetrics(
|
||||
getBuilder()
|
||||
.setEndpointType(EndpointType.ENTITIES)
|
||||
.setSearchType(SearchType.BY_FULL_NAME)
|
||||
.setWildcardType(WildcardType.PREFIX)
|
||||
.setPrefixLength(4)
|
||||
.setNumContactsRetrieved(50)
|
||||
.build());
|
||||
assertThat(RdapMetrics.requests)
|
||||
.hasValueForLabels(1, "ENTITIES", "NO", "NO", "PUBLIC", "GET")
|
||||
.and()
|
||||
.hasNoOtherValues();
|
||||
assertThat(RdapMetrics.responses)
|
||||
.hasValueForLabels(
|
||||
1, "ENTITIES", "BY_FULL_NAME", "PREFIX", "200", "COMPLETE")
|
||||
.and()
|
||||
.hasNoOtherValues();
|
||||
assertThat(RdapMetrics.numberOfDomainsRetrieved).hasNoOtherValues();
|
||||
assertThat(RdapMetrics.numberOfHostsRetrieved).hasNoOtherValues();
|
||||
assertThat(RdapMetrics.numberOfContactsRetrieved)
|
||||
.hasDataSetForLabels(
|
||||
ImmutableSet.of(50), "ENTITIES", "BY_FULL_NAME", "PREFIX", "4", "NO")
|
||||
.and()
|
||||
.hasNoOtherValues();
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue