From f0d359e0586b1f3bb2b358ee91e9c7f92486e57c Mon Sep 17 00:00:00 2001 From: Weimin Yu Date: Fri, 26 Jun 2020 19:11:22 -0400 Subject: [PATCH] Exclude Test/Monitoring Registrars from escrow (#655) * Exclude Test/Monitoring Registrars from escrow Registrars used for testing and monitoring should not be included in Data escrow. They also lack the required ianaIdentifier property and would fail ICANN data validation. Note that since alpha and crash environments have bad data that break the RDE process, we need to verify this change in Sandbox. --- .../google/registry/rde/RdeStagingMapper.java | 9 ++ .../registry/rde/RdeStagingMapperTest.java | 102 ++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 core/src/test/java/google/registry/rde/RdeStagingMapperTest.java diff --git a/core/src/main/java/google/registry/rde/RdeStagingMapper.java b/core/src/main/java/google/registry/rde/RdeStagingMapper.java index 78e46bb54..30d3c30c6 100644 --- a/core/src/main/java/google/registry/rde/RdeStagingMapper.java +++ b/core/src/main/java/google/registry/rde/RdeStagingMapper.java @@ -26,6 +26,7 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSetMultimap; import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import com.googlecode.objectify.Result; import google.registry.model.EppResource; import google.registry.model.contact.ContactResource; @@ -44,6 +45,11 @@ public final class RdeStagingMapper extends Mapper IGNORED_REGISTRAR_TYPES = + Sets.immutableEnumSet(Registrar.Type.MONITORING, Registrar.Type.TEST); + private final RdeMarshaller marshaller; private final ImmutableSetMultimap pendings; @@ -64,6 +70,9 @@ public final class RdeStagingMapper extends Mapper(.*)"); + + @Mock PendingDeposit pendingDeposit; + + @Mock MapperContext context; + + ArgumentCaptor depositFragmentCaptor = + ArgumentCaptor.forClass(DepositFragment.class); + + @RegisterExtension + AppEngineRule appEngineRule = AppEngineRule.builder().withDatastoreAndCloudSql().build(); + + private RdeStagingMapper rdeStagingMapper; + + @BeforeEach + void beforeEach() { + // Two real registrars have been created by AppEngineRule, named "New Registrar" and "The + // Registrar". Create one included registrar (external_monitoring) and two excluded ones. + Registrar monitoringRegistrar = + persistNewRegistrar("monitoring", "monitoring", Registrar.Type.MONITORING, null); + Registrar testRegistrar = persistNewRegistrar("test", "test", Registrar.Type.TEST, null); + Registrar externalMonitoringRegistrar = + persistNewRegistrar( + "externalmonitor", "external_monitoring", Registrar.Type.EXTERNAL_MONITORING, 9997L); + + // Set Registrar states which are required for reporting. + tm().transact( + () -> + tm().saveNewOrUpdateAll( + ImmutableList.of( + externalMonitoringRegistrar.asBuilder().setState(State.ACTIVE).build(), + testRegistrar.asBuilder().setState(State.ACTIVE).build(), + monitoringRegistrar.asBuilder().setState(State.ACTIVE).build()))); + + rdeStagingMapper = + new RdeStagingMapper(ValidationMode.STRICT, ImmutableSetMultimap.of("1", pendingDeposit)); + rdeStagingMapper.setContext(context); + } + + @Test + void registrars_ignoreMonitoringAndTestTypes() { + rdeStagingMapper.map(null); + verify(context, Mockito.times(3)) + .emit(any(PendingDeposit.class), depositFragmentCaptor.capture()); + assertThat( + depositFragmentCaptor.getAllValues().stream() + .map(RdeStagingMapperTest::findRegistrarName)) + .containsExactly("New Registrar", "The Registrar", "external_monitoring"); + } + + private static String findRegistrarName(DepositFragment fragment) { + Matcher matcher = REGISTRAR_NAME_PATTERN.matcher(fragment.xml()); + checkState(matcher.find(), "Missing registarName in xml."); + return matcher.group(1); + } +}