From 93ff5410065cefe5f341d8ef6eff6ec852cece42 Mon Sep 17 00:00:00 2001 From: gbrodman Date: Wed, 6 Feb 2019 14:08:00 -0800 Subject: [PATCH] Handle sunrise reservations properly during sunrise TLDs We figure out the TLD state so that we properly check whether or not we can provision sunrise domains in that TLD. We also change the message slightly so that it's a bit more clear when we aren't in sunrise. Note: it is deliberate that NAME_COLLISION reservations are provisionable in sunrise. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=232742813 --- .../flows/domain/DomainCheckFlow.java | 21 ++++++++++++++----- .../model/registry/label/ReservationType.java | 2 +- .../flows/domain/DomainCheckFlowTest.java | 20 ++++++++++++++---- ...domain_check_fee_reserved_response_v06.xml | 2 +- ...check_fee_reserved_response_v11_create.xml | 2 +- ..._check_fee_reserved_response_v11_renew.xml | 2 +- ...heck_fee_reserved_response_v11_restore.xml | 2 +- ...eck_fee_reserved_response_v11_transfer.xml | 2 +- ...domain_check_fee_reserved_response_v12.xml | 2 +- ...heck_fee_reserved_sunrise_response_v06.xml | 9 +++----- ...e_reserved_sunrise_response_v11_create.xml | 9 +++----- ...ee_reserved_sunrise_response_v11_renew.xml | 9 +++----- ..._reserved_sunrise_response_v11_restore.xml | 9 +++----- ...reserved_sunrise_response_v11_transfer.xml | 9 +++----- ...heck_fee_reserved_sunrise_response_v12.xml | 9 +++----- 15 files changed, 57 insertions(+), 52 deletions(-) diff --git a/java/google/registry/flows/domain/DomainCheckFlow.java b/java/google/registry/flows/domain/DomainCheckFlow.java index ce53e27e6..6c011a8d7 100644 --- a/java/google/registry/flows/domain/DomainCheckFlow.java +++ b/java/google/registry/flows/domain/DomainCheckFlow.java @@ -20,15 +20,18 @@ import static google.registry.flows.ResourceFlowUtils.verifyTargetIdCount; import static google.registry.flows.domain.DomainFlowUtils.checkAllowedAccessToTld; import static google.registry.flows.domain.DomainFlowUtils.getReservationTypes; import static google.registry.flows.domain.DomainFlowUtils.handleFeeRequest; +import static google.registry.flows.domain.DomainFlowUtils.isReserved; import static google.registry.flows.domain.DomainFlowUtils.validateDomainName; import static google.registry.flows.domain.DomainFlowUtils.validateDomainNameWithIdnTables; import static google.registry.flows.domain.DomainFlowUtils.verifyNotInPredelegation; import static google.registry.model.EppResourceUtils.checkResourcesExist; +import static google.registry.model.registry.Registry.TldState.START_DATE_SUNRISE; import static google.registry.model.registry.label.ReservationType.getTypeOfHighestSeverity; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Maps; import com.google.common.net.InternetDomainName; import google.registry.config.RegistryConfig.Config; import google.registry.flows.EppException; @@ -56,11 +59,13 @@ import google.registry.model.eppoutput.CheckData.DomainCheckData; import google.registry.model.eppoutput.EppResponse; import google.registry.model.eppoutput.EppResponse.ResponseExtension; import google.registry.model.registry.Registry; +import google.registry.model.registry.Registry.TldState; import google.registry.model.registry.label.ReservationType; import google.registry.model.reporting.IcannReportingTypes.ActivityReportField; import google.registry.util.Clock; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.Set; import javax.inject.Inject; @@ -153,9 +158,11 @@ public final class DomainCheckFlow implements Flow { now) : ImmutableMap.of(); ImmutableList.Builder checks = new ImmutableList.Builder<>(); + ImmutableMap tldStates = + Maps.toMap(seenTlds, tld -> Registry.get(tld).getTldState(now)); for (String targetId : targetIds) { Optional message = - getMessageForCheck(domainNames.get(targetId), existingIds, tokenCheckResults); + getMessageForCheck(domainNames.get(targetId), existingIds, tokenCheckResults, tldStates); checks.add(DomainCheck.create(!message.isPresent(), targetId, message.orElse(null))); } BeforeResponseReturnData responseData = @@ -174,13 +181,17 @@ public final class DomainCheckFlow implements Flow { private Optional getMessageForCheck( InternetDomainName domainName, Set existingIds, - ImmutableMap tokenCheckResults) { + ImmutableMap tokenCheckResults, + Map tldStates) { if (existingIds.contains(domainName.toString())) { return Optional.of("In use"); } - ImmutableSet reservationTypes = getReservationTypes(domainName); - if (!reservationTypes.isEmpty()) { - return Optional.of(getTypeOfHighestSeverity(reservationTypes).getMessageForCheck()); + TldState tldState = tldStates.get(domainName.parent().toString()); + if (isReserved(domainName, START_DATE_SUNRISE.equals(tldState))) { + ImmutableSet reservationTypes = getReservationTypes(domainName); + if (!reservationTypes.isEmpty()) { + return Optional.of(getTypeOfHighestSeverity(reservationTypes).getMessageForCheck()); + } } return Optional.ofNullable(emptyToNull(tokenCheckResults.get(domainName))); } diff --git a/java/google/registry/model/registry/label/ReservationType.java b/java/google/registry/model/registry/label/ReservationType.java index 594bf917c..7ed081861 100644 --- a/java/google/registry/model/registry/label/ReservationType.java +++ b/java/google/registry/model/registry/label/ReservationType.java @@ -38,7 +38,7 @@ public enum ReservationType { NAMESERVER_RESTRICTED("Nameserver restricted", 0), /** The domain can only be registered during sunrise, and is reserved thereafter. */ - ALLOWED_IN_SUNRISE("Reserved for non-sunrise", 1), + ALLOWED_IN_SUNRISE("Reserved", 1), /** The domain can only be registered by providing a specific token. */ RESERVED_FOR_SPECIFIC_USE("Reserved", 2), diff --git a/javatests/google/registry/flows/domain/DomainCheckFlowTest.java b/javatests/google/registry/flows/domain/DomainCheckFlowTest.java index 662211179..71615ac35 100644 --- a/javatests/google/registry/flows/domain/DomainCheckFlowTest.java +++ b/javatests/google/registry/flows/domain/DomainCheckFlowTest.java @@ -170,16 +170,28 @@ public class DomainCheckFlowTest create(false, "collision.tld", "Cannot be delegated"), create(false, "reserved.tld", "Reserved"), create(false, "anchor.tld", "Reserved"), - create(false, "allowedinsunrise.tld", "Reserved for non-sunrise"), + create(false, "allowedinsunrise.tld", "Reserved"), create(false, "premiumcollision.tld", "Cannot be delegated")); } @Test - public void testSuccess_oneReserved() throws Exception { + public void testSuccess_oneReservedInSunrise() throws Exception { + createTld("tld", START_DATE_SUNRISE); + persistResource(Registry.get("tld").asBuilder().setReservedLists(createReservedList()).build()); setEppInput("domain_check_one_tld_reserved.xml"); doCheckTest( create(false, "reserved.tld", "Reserved"), - create(false, "allowedinsunrise.tld", "Reserved for non-sunrise"), + create(true, "allowedinsunrise.tld", null), + create(true, "example2.tld", null), + create(true, "example3.tld", null)); + } + + @Test + public void testSuccess_twoReservedOutsideSunrise() throws Exception { + setEppInput("domain_check_one_tld_reserved.xml"); + doCheckTest( + create(false, "reserved.tld", "Reserved"), + create(false, "allowedinsunrise.tld", "Reserved"), create(true, "example2.tld", null), create(true, "example3.tld", null)); } @@ -221,7 +233,7 @@ public class DomainCheckFlowTest setEppInput("domain_check_one_multipart_tld_reserved.xml"); doCheckTest( create(false, "reserved.tld.foo", "Reserved"), - create(false, "allowedinsunrise.tld.foo", "Reserved for non-sunrise"), + create(false, "allowedinsunrise.tld.foo", "Reserved"), create(true, "example2.tld.foo", null), create(true, "example3.tld.foo", null)); } diff --git a/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_response_v06.xml b/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_response_v06.xml index 59c3f3e08..ecc216b57 100644 --- a/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_response_v06.xml +++ b/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_response_v06.xml @@ -11,7 +11,7 @@ allowedinsunrise.tld - Reserved for non-sunrise + Reserved collision.tld diff --git a/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_response_v11_create.xml b/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_response_v11_create.xml index 2b439adb3..b2b06b53b 100644 --- a/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_response_v11_create.xml +++ b/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_response_v11_create.xml @@ -11,7 +11,7 @@ allowedinsunrise.tld - Reserved for non-sunrise + Reserved collision.tld diff --git a/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_response_v11_renew.xml b/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_response_v11_renew.xml index d0eb74177..a4ad13f1b 100644 --- a/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_response_v11_renew.xml +++ b/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_response_v11_renew.xml @@ -11,7 +11,7 @@ allowedinsunrise.tld - Reserved for non-sunrise + Reserved collision.tld diff --git a/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_response_v11_restore.xml b/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_response_v11_restore.xml index 15dfb7c5e..101e1ecce 100644 --- a/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_response_v11_restore.xml +++ b/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_response_v11_restore.xml @@ -11,7 +11,7 @@ allowedinsunrise.tld - Reserved for non-sunrise + Reserved collision.tld diff --git a/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_response_v11_transfer.xml b/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_response_v11_transfer.xml index 1af632bfc..4131378a2 100644 --- a/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_response_v11_transfer.xml +++ b/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_response_v11_transfer.xml @@ -11,7 +11,7 @@ allowedinsunrise.tld - Reserved for non-sunrise + Reserved collision.tld diff --git a/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_response_v12.xml b/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_response_v12.xml index 15530cb06..f053b8ef6 100644 --- a/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_response_v12.xml +++ b/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_response_v12.xml @@ -11,7 +11,7 @@ allowedinsunrise.tld - Reserved for non-sunrise + Reserved collision.tld diff --git a/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_sunrise_response_v06.xml b/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_sunrise_response_v06.xml index 565d48822..53dcb6f6d 100644 --- a/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_sunrise_response_v06.xml +++ b/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_sunrise_response_v06.xml @@ -10,16 +10,13 @@ Reserved - allowedinsunrise.tld - Reserved for non-sunrise + allowedinsunrise.tld - collision.tld - Cannot be delegated + collision.tld - premiumcollision.tld - Cannot be delegated + premiumcollision.tld diff --git a/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_sunrise_response_v11_create.xml b/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_sunrise_response_v11_create.xml index 160f4352d..8e387289a 100644 --- a/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_sunrise_response_v11_create.xml +++ b/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_sunrise_response_v11_create.xml @@ -10,16 +10,13 @@ Reserved - allowedinsunrise.tld - Reserved for non-sunrise + allowedinsunrise.tld - collision.tld - Cannot be delegated + collision.tld - premiumcollision.tld - Cannot be delegated + premiumcollision.tld diff --git a/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_sunrise_response_v11_renew.xml b/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_sunrise_response_v11_renew.xml index a62839cf3..3427c6dfe 100644 --- a/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_sunrise_response_v11_renew.xml +++ b/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_sunrise_response_v11_renew.xml @@ -10,16 +10,13 @@ Reserved - allowedinsunrise.tld - Reserved for non-sunrise + allowedinsunrise.tld - collision.tld - Cannot be delegated + collision.tld - premiumcollision.tld - Cannot be delegated + premiumcollision.tld diff --git a/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_sunrise_response_v11_restore.xml b/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_sunrise_response_v11_restore.xml index 5a9fcf51f..c65800496 100644 --- a/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_sunrise_response_v11_restore.xml +++ b/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_sunrise_response_v11_restore.xml @@ -10,16 +10,13 @@ Reserved - allowedinsunrise.tld - Reserved for non-sunrise + allowedinsunrise.tld - collision.tld - Cannot be delegated + collision.tld - premiumcollision.tld - Cannot be delegated + premiumcollision.tld diff --git a/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_sunrise_response_v11_transfer.xml b/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_sunrise_response_v11_transfer.xml index 75c99b258..a2ba76162 100644 --- a/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_sunrise_response_v11_transfer.xml +++ b/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_sunrise_response_v11_transfer.xml @@ -10,16 +10,13 @@ Reserved - allowedinsunrise.tld - Reserved for non-sunrise + allowedinsunrise.tld - collision.tld - Cannot be delegated + collision.tld - premiumcollision.tld - Cannot be delegated + premiumcollision.tld diff --git a/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_sunrise_response_v12.xml b/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_sunrise_response_v12.xml index df0ffb2a7..200f23dd7 100644 --- a/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_sunrise_response_v12.xml +++ b/javatests/google/registry/flows/domain/testdata/domain_check_fee_reserved_sunrise_response_v12.xml @@ -10,16 +10,13 @@ Reserved - allowedinsunrise.tld - Reserved for non-sunrise + allowedinsunrise.tld - collision.tld - Cannot be delegated + collision.tld - premiumcollision.tld - Cannot be delegated + premiumcollision.tld