mirror of
https://github.com/google/nomulus.git
synced 2025-07-22 02:36:03 +02:00
Record metrics for WHOIS commands
Note that this does not write out metrics for invocations of the nomulus tool. This requires a slight refactoring of the existing WhoisResponse interface so as to also support returning the number of results found by the WHOIS query. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=149461208
This commit is contained in:
parent
4eef02f17f
commit
3fcb564251
15 changed files with 247 additions and 62 deletions
|
@ -37,6 +37,7 @@ import google.registry.model.host.HostResource;
|
|||
import google.registry.model.registrar.Registrar;
|
||||
import google.registry.testing.AppEngineRule;
|
||||
import google.registry.testing.FakeClock;
|
||||
import google.registry.whois.WhoisResponse.WhoisResponseResults;
|
||||
import org.joda.time.DateTime;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
|
@ -239,16 +240,16 @@ public class DomainWhoisResponseTest {
|
|||
public void getPlainTextOutputTest() {
|
||||
DomainWhoisResponse domainWhoisResponse =
|
||||
new DomainWhoisResponse(domainResource, clock.nowUtc());
|
||||
assertThat(domainWhoisResponse.getPlainTextOutput(false, "Doodle Disclaimer"))
|
||||
.isEqualTo(loadWhoisTestFile("whois_domain.txt"));
|
||||
assertThat(domainWhoisResponse.getResponse(false, "Doodle Disclaimer"))
|
||||
.isEqualTo(WhoisResponseResults.create(loadWhoisTestFile("whois_domain.txt"), 1));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void addImplicitOkStatusTest() {
|
||||
DomainWhoisResponse domainWhoisResponse = new DomainWhoisResponse(
|
||||
domainResource.asBuilder().setStatusValues(null).build(),
|
||||
clock.nowUtc());
|
||||
assertThat(domainWhoisResponse.getPlainTextOutput(false, "Doodle Disclaimer"))
|
||||
DomainWhoisResponse domainWhoisResponse =
|
||||
new DomainWhoisResponse(
|
||||
domainResource.asBuilder().setStatusValues(null).build(), clock.nowUtc());
|
||||
assertThat(domainWhoisResponse.getResponse(false, "Doodle Disclaimer").plainTextOutput())
|
||||
.contains("Domain Status: ok");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ import google.registry.model.host.HostResource;
|
|||
import google.registry.model.registrar.Registrar;
|
||||
import google.registry.testing.AppEngineRule;
|
||||
import google.registry.testing.FakeClock;
|
||||
import google.registry.whois.WhoisResponse.WhoisResponseResults;
|
||||
import org.joda.time.DateTime;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
|
@ -81,15 +82,16 @@ public class NameserverWhoisResponseTest {
|
|||
public void testGetTextOutput() {
|
||||
NameserverWhoisResponse nameserverWhoisResponse =
|
||||
new NameserverWhoisResponse(hostResource1, clock.nowUtc());
|
||||
assertThat(nameserverWhoisResponse.getPlainTextOutput(false, "Doodle Disclaimer"))
|
||||
.isEqualTo(loadWhoisTestFile("whois_nameserver.txt"));
|
||||
assertThat(nameserverWhoisResponse.getResponse(false, "Doodle Disclaimer"))
|
||||
.isEqualTo(WhoisResponseResults.create(loadWhoisTestFile("whois_nameserver.txt"), 1));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetMultipleNameserversResponse() {
|
||||
NameserverWhoisResponse nameserverWhoisResponse =
|
||||
new NameserverWhoisResponse(ImmutableList.of(hostResource1, hostResource2), clock.nowUtc());
|
||||
assertThat(nameserverWhoisResponse.getPlainTextOutput(false, "Doodle Disclaimer"))
|
||||
.isEqualTo(loadWhoisTestFile("whois_multiple_nameservers.txt"));
|
||||
assertThat(nameserverWhoisResponse.getResponse(false, "Doodle Disclaimer"))
|
||||
.isEqualTo(
|
||||
WhoisResponseResults.create(loadWhoisTestFile("whois_multiple_nameservers.txt"), 2));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ import google.registry.model.registrar.RegistrarAddress;
|
|||
import google.registry.model.registrar.RegistrarContact;
|
||||
import google.registry.testing.AppEngineRule;
|
||||
import google.registry.testing.FakeClock;
|
||||
import google.registry.whois.WhoisResponse.WhoisResponseResults;
|
||||
import org.joda.time.DateTime;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
|
@ -113,8 +114,8 @@ public class RegistrarWhoisResponseTest {
|
|||
|
||||
RegistrarWhoisResponse registrarWhoisResponse =
|
||||
new RegistrarWhoisResponse(registrar, clock.nowUtc());
|
||||
assertThat(registrarWhoisResponse.getPlainTextOutput(false, "Doodle Disclaimer"))
|
||||
.isEqualTo(loadWhoisTestFile("whois_registrar.txt"));
|
||||
assertThat(registrarWhoisResponse.getResponse(false, "Doodle Disclaimer"))
|
||||
.isEqualTo(WhoisResponseResults.create(loadWhoisTestFile("whois_registrar.txt"), 1));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -129,6 +130,6 @@ public class RegistrarWhoisResponseTest {
|
|||
RegistrarWhoisResponse registrarWhoisResponse =
|
||||
new RegistrarWhoisResponse(registrar, clock.nowUtc());
|
||||
// Just make sure this doesn't NPE.
|
||||
registrarWhoisResponse.getPlainTextOutput(false, "Doodle Disclaimer");
|
||||
registrarWhoisResponse.getResponse(false, "Doodle Disclaimer");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ package google.registry.whois;
|
|||
|
||||
import static com.google.common.net.MediaType.PLAIN_TEXT_UTF_8;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static com.google.common.truth.Truth.assert_;
|
||||
import static google.registry.testing.DatastoreHelper.createTlds;
|
||||
import static google.registry.testing.DatastoreHelper.persistResource;
|
||||
import static google.registry.testing.DatastoreHelper.persistSimpleResources;
|
||||
|
@ -25,6 +26,14 @@ import static google.registry.testing.FullFieldsTestEntityHelper.makeHostResourc
|
|||
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar;
|
||||
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrarContacts;
|
||||
import static google.registry.whois.WhoisHelper.loadWhoisTestFile;
|
||||
import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
|
||||
import static javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
|
||||
import static javax.servlet.http.HttpServletResponse.SC_OK;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import google.registry.model.contact.ContactResource;
|
||||
import google.registry.model.ofy.Ofy;
|
||||
|
@ -35,6 +44,9 @@ import google.registry.testing.FakeClock;
|
|||
import google.registry.testing.FakeResponse;
|
||||
import google.registry.testing.InjectRule;
|
||||
import google.registry.testing.Providers;
|
||||
import google.registry.whois.WhoisMetrics.WhoisMetric;
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import org.joda.time.DateTime;
|
||||
import org.joda.time.Duration;
|
||||
import org.junit.After;
|
||||
|
@ -68,6 +80,8 @@ public class WhoisHttpServerTest {
|
|||
whoisServer.response = response;
|
||||
whoisServer.whoisReaderFactory =
|
||||
new WhoisReaderFactory(Providers.of(new WhoisCommandFactory()));
|
||||
whoisServer.whoisMetrics = new WhoisMetrics();
|
||||
whoisServer.metricBuilder = WhoisMetric.builderForRequest(clock);
|
||||
whoisServer.disclaimer = "Doodle Disclaimer";
|
||||
return whoisServer;
|
||||
}
|
||||
|
@ -331,4 +345,57 @@ public class WhoisHttpServerTest {
|
|||
assertThat(response.getPayload())
|
||||
.isEqualTo(loadWhoisTestFile("whois_server_registrar_not_found.txt"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRun_metricsLoggedForSuccessfulCommand() throws Exception {
|
||||
persistResource(makeHostResource("ns1.cat.lol", "1.2.3.4"));
|
||||
WhoisHttpServer server = newWhoisHttpServer("/nameserver/ns1.cat.lol");
|
||||
server.whoisMetrics = mock(WhoisMetrics.class);
|
||||
server.run();
|
||||
WhoisMetric expected =
|
||||
WhoisMetric.builderForRequest(clock)
|
||||
.setCommandName("NameserverLookupByHostCommand")
|
||||
.setNumResults(1)
|
||||
.setStatus(SC_OK)
|
||||
.build();
|
||||
verify(server.whoisMetrics).recordWhoisMetric(eq(expected));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRun_metricsLoggedForUnsuccessfulCommand() throws Exception {
|
||||
WhoisHttpServer server = newWhoisHttpServer("nic.%u307F%u3093%u306A");
|
||||
server.whoisMetrics = mock(WhoisMetrics.class);
|
||||
server.run();
|
||||
WhoisMetric expected =
|
||||
WhoisMetric.builderForRequest(clock).setNumResults(0).setStatus(SC_BAD_REQUEST).build();
|
||||
verify(server.whoisMetrics).recordWhoisMetric(eq(expected));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRun_metricsLoggedForInternalServerError() throws Exception {
|
||||
persistResource(makeHostResource("ns1.cat.lol", "1.2.3.4"));
|
||||
WhoisHttpServer server = newWhoisHttpServer("ns1.cat.lol");
|
||||
final WhoisReader reader = mock(WhoisReader.class);
|
||||
when(reader.readCommand(any(Reader.class))).thenThrow(new IOException("missing cat interface"));
|
||||
|
||||
server.whoisReaderFactory = new WhoisReaderFactory(Providers.of(new WhoisCommandFactory())) {
|
||||
@Override
|
||||
WhoisReader create(DateTime now) {
|
||||
return reader;
|
||||
}};
|
||||
server.whoisMetrics = mock(WhoisMetrics.class);
|
||||
|
||||
try {
|
||||
server.run();
|
||||
assert_().fail("Should have thrown RuntimeException");
|
||||
} catch (RuntimeException e) {
|
||||
assertThat(e.getCause().getMessage()).isEqualTo("missing cat interface");
|
||||
}
|
||||
WhoisMetric expected =
|
||||
WhoisMetric.builderForRequest(clock)
|
||||
.setNumResults(0)
|
||||
.setStatus(SC_INTERNAL_SERVER_ERROR)
|
||||
.build();
|
||||
verify(server.whoisMetrics).recordWhoisMetric(eq(expected));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,6 +27,14 @@ import static google.registry.testing.FullFieldsTestEntityHelper.makeHostResourc
|
|||
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar;
|
||||
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrarContacts;
|
||||
import static google.registry.whois.WhoisHelper.loadWhoisTestFile;
|
||||
import static javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
|
||||
import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND;
|
||||
import static javax.servlet.http.HttpServletResponse.SC_OK;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import google.registry.model.domain.DomainResource;
|
||||
import google.registry.model.ofy.Ofy;
|
||||
|
@ -37,6 +45,9 @@ import google.registry.testing.FakeClock;
|
|||
import google.registry.testing.FakeResponse;
|
||||
import google.registry.testing.InjectRule;
|
||||
import google.registry.testing.Providers;
|
||||
import google.registry.whois.WhoisMetrics.WhoisMetric;
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.io.StringReader;
|
||||
import org.joda.time.DateTime;
|
||||
import org.junit.Before;
|
||||
|
@ -63,6 +74,8 @@ public class WhoisServerTest {
|
|||
whoisServer.response = response;
|
||||
whoisServer.whoisReaderFactory =
|
||||
new WhoisReaderFactory(Providers.of(new WhoisCommandFactory()));
|
||||
whoisServer.whoisMetrics = new WhoisMetrics();
|
||||
whoisServer.metricBuilder = WhoisMetric.builderForRequest(clock);
|
||||
whoisServer.disclaimer = "Doodle Disclaimer";
|
||||
return whoisServer;
|
||||
}
|
||||
|
@ -430,4 +443,58 @@ public class WhoisServerTest {
|
|||
assertThat(response.getPayload()).contains("ns1.cat.1.test");
|
||||
assertThat(response.getPayload()).contains("1.2.3.4");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRun_metricsLoggedForSuccessfulCommand() throws Exception {
|
||||
persistResource(makeHostResource("ns1.cat.lol", "1.2.3.4"));
|
||||
persistResource(makeHostResource("ns2.cat.lol", "1.2.3.4"));
|
||||
WhoisServer server = newWhoisServer("nameserver 1.2.3.4");
|
||||
server.whoisMetrics = mock(WhoisMetrics.class);
|
||||
server.run();
|
||||
WhoisMetric expected =
|
||||
WhoisMetric.builderForRequest(clock)
|
||||
.setCommandName("NameserverLookupByIpCommand")
|
||||
.setNumResults(2)
|
||||
.setStatus(SC_OK)
|
||||
.build();
|
||||
verify(server.whoisMetrics).recordWhoisMetric(eq(expected));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRun_metricsLoggedForUnsuccessfulCommand() throws Exception {
|
||||
WhoisServer server = newWhoisServer("domain cat.lol\r\n");
|
||||
server.whoisMetrics = mock(WhoisMetrics.class);
|
||||
server.run();
|
||||
WhoisMetric expected =
|
||||
WhoisMetric.builderForRequest(clock)
|
||||
.setCommandName("DomainLookupCommand")
|
||||
.setNumResults(0)
|
||||
.setStatus(SC_NOT_FOUND)
|
||||
.build();
|
||||
verify(server.whoisMetrics).recordWhoisMetric(eq(expected));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRun_metricsLoggedForInternalServerError() throws Exception {
|
||||
persistResource(makeHostResource("ns1.cat.lol", "1.2.3.4"));
|
||||
WhoisServer server = newWhoisServer("ns1.cat.lol");
|
||||
final WhoisReader reader = mock(WhoisReader.class);
|
||||
when(reader.readCommand(any(Reader.class))).thenThrow(new IOException("missing cat interface"));
|
||||
|
||||
server.whoisReaderFactory = new WhoisReaderFactory(Providers.of(new WhoisCommandFactory())) {
|
||||
@Override
|
||||
WhoisReader create(DateTime now) {
|
||||
return reader;
|
||||
}};
|
||||
server.whoisMetrics = mock(WhoisMetrics.class);
|
||||
|
||||
server.run();
|
||||
WhoisMetric expected =
|
||||
WhoisMetric.builderForRequest(clock)
|
||||
.setNumResults(0)
|
||||
.setStatus(SC_INTERNAL_SERVER_ERROR)
|
||||
.build();
|
||||
verify(server.whoisMetrics).recordWhoisMetric(eq(expected));
|
||||
assertThat(response.getPayload()).isEqualTo("Internal Server Error");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue