From 8721085d148a140c12eac12fb9573abbca934b50 Mon Sep 17 00:00:00 2001 From: Weimin Yu Date: Fri, 12 Apr 2024 15:54:59 -0400 Subject: [PATCH] Fix BSA validation (#2401) Unblocked reserved names wrongly reported as missing unblockable domain. --- .../google/registry/bsa/BsaValidateAction.java | 10 +++++++++- .../registry/bsa/BsaValidateActionTest.java | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/google/registry/bsa/BsaValidateAction.java b/core/src/main/java/google/registry/bsa/BsaValidateAction.java index e98b3d2aa..ff1785035 100644 --- a/core/src/main/java/google/registry/bsa/BsaValidateAction.java +++ b/core/src/main/java/google/registry/bsa/BsaValidateAction.java @@ -22,6 +22,7 @@ import static com.google.common.collect.ImmutableSet.toImmutableSet; import static google.registry.bsa.BsaTransactions.bsaQuery; import static google.registry.bsa.ReservedDomainsUtils.getAllReservedNames; import static google.registry.bsa.ReservedDomainsUtils.isReservedDomain; +import static google.registry.bsa.persistence.BsaLabelUtils.isLabelBlocked; import static google.registry.bsa.persistence.Queries.batchReadBsaLabelText; import static google.registry.bsa.persistence.Queries.queryMissedRegisteredUnblockables; import static google.registry.bsa.persistence.Queries.queryUnblockableDomainByLabels; @@ -299,7 +300,9 @@ public class BsaValidateAction implements Runnable { ImmutableList checkForMissingReservedUnblockables(DateTime now) { ImmutableList.Builder errors = new ImmutableList.Builder<>(); try (Stream> reservedNames = - toBatches(getAllReservedNames(now), transactionBatchSize)) { + toBatches( + getAllReservedNames(now).filter(BsaValidateAction::isBlockedByBsa), + transactionBatchSize)) { reservedNames .map(this::checkOneBatchReservedDomainsForMissingUnblockables) .forEach(errors::addAll); @@ -338,6 +341,11 @@ public class BsaValidateAction implements Runnable { return errors.build(); } + static boolean isBlockedByBsa(String domainInBsaEnrolledTld) { + InternetDomainName domainName = InternetDomainName.from(domainInBsaEnrolledTld); + return isLabelBlocked(domainName.parts().get(0)); + } + static String parseBlockListLine(String line) { int firstComma = line.indexOf(','); checkArgument(firstComma > 0, "Invalid block list line: %s", line); diff --git a/core/src/test/java/google/registry/bsa/BsaValidateActionTest.java b/core/src/test/java/google/registry/bsa/BsaValidateActionTest.java index 350e6a516..d38c71dc5 100644 --- a/core/src/test/java/google/registry/bsa/BsaValidateActionTest.java +++ b/core/src/test/java/google/registry/bsa/BsaValidateActionTest.java @@ -337,6 +337,21 @@ public class BsaValidateActionTest { .containsExactly("Missing unblockable domain: reserved-missing-in-app.app is reserved."); } + @Test + void checkForMissingReservedUnblockables_unblockedReservedNotReported() { + persistResource( + createTld("app").asBuilder().setBsaEnrollStartTime(Optional.of(START_OF_TIME)).build()); + + createReservedList( + "rl", + Stream.of("reserved-only") + .collect(toImmutableMap(x -> x, x -> ReservationType.RESERVED_FOR_SPECIFIC_USE))); + addReservedListsToTld("app", ImmutableList.of("rl")); + + ImmutableList errors = action.checkForMissingReservedUnblockables(fakeClock.nowUtc()); + assertThat(errors).isEmpty(); + } + @Test void checkForMissingRegisteredUnblockables_success() { persistResource(