diff --git a/core/src/main/java/google/registry/model/registry/Registries.java b/core/src/main/java/google/registry/model/registry/Registries.java index 3805f4c77..448069803 100644 --- a/core/src/main/java/google/registry/model/registry/Registries.java +++ b/core/src/main/java/google/registry/model/registry/Registries.java @@ -33,6 +33,7 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Streams; import com.google.common.net.InternetDomainName; +import com.googlecode.objectify.Key; import google.registry.model.registry.Registry.TldType; import java.util.Optional; @@ -80,6 +81,15 @@ public final class Registries { return ImmutableSet.copyOf(filterValues(cache.get(), equalTo(type)).keySet()); } + /** Returns the Registry entities themselves of the given type loaded fresh from Datastore. */ + public static ImmutableSet getTldEntitiesOfType(TldType type) { + ImmutableSet> keys = + filterValues(cache.get(), equalTo(type)).keySet().stream() + .map(tld -> Key.create(getCrossTldKey(), Registry.class, tld)) + .collect(toImmutableSet()); + return ImmutableSet.copyOf(tm().doTransactionless(() -> ofy().load().keys(keys).values())); + } + /** Pass-through check that the specified TLD exists, otherwise throw an IAE. */ public static String assertTldExists(String tld) { checkArgument( diff --git a/core/src/test/java/google/registry/model/registry/RegistriesTest.java b/core/src/test/java/google/registry/model/registry/RegistriesTest.java index 99dd6c2e1..c810b185c 100644 --- a/core/src/test/java/google/registry/model/registry/RegistriesTest.java +++ b/core/src/test/java/google/registry/model/registry/RegistriesTest.java @@ -17,9 +17,12 @@ package google.registry.model.registry; import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth8.assertThat; import static google.registry.testing.DatastoreHelper.createTlds; +import static google.registry.testing.DatastoreHelper.newRegistry; +import static google.registry.testing.DatastoreHelper.persistResource; import static google.registry.testing.JUnitBackports.assertThrows; import com.google.common.net.InternetDomainName; +import google.registry.model.registry.Registry.TldType; import google.registry.testing.AppEngineRule; import org.junit.Rule; import org.junit.Test; @@ -32,6 +35,7 @@ public class RegistriesTest { @Rule public final AppEngineRule appEngine = AppEngineRule.builder().withDatastore().build(); + private void initTestTlds() { createTlds("foo", "a.b.c"); // Test a multipart tld. } @@ -42,6 +46,16 @@ public class RegistriesTest { assertThat(Registries.getTlds()).containsExactly("foo", "a.b.c"); } + @Test + public void test_getTldEntities() { + initTestTlds(); + persistResource(newRegistry("testtld", "TESTTLD").asBuilder().setTldType(TldType.TEST).build()); + assertThat(Registries.getTldEntitiesOfType(TldType.REAL)) + .containsExactly(Registry.get("foo"), Registry.get("a.b.c")); + assertThat(Registries.getTldEntitiesOfType(TldType.TEST)) + .containsExactly(Registry.get("testtld")); + } + @Test public void testGetTlds_withNoRegistriesPersisted_returnsEmptySet() { assertThat(Registries.getTlds()).isEmpty();