mirror of
https://github.com/google/nomulus
synced 2026-09-06 16:17:13 +00:00
Add Java code for storing and using IDN tables per-TLD (#1977)
This includes changes to make sure that we use the proper per-TLD IDN tables as well as setting/updating/removing them via the Create/Update TLD commands.
This commit is contained in:
@@ -15,17 +15,26 @@
|
||||
package google.registry.tldconfig.idn;
|
||||
|
||||
import static com.google.common.truth.Truth8.assertThat;
|
||||
import static google.registry.testing.DatabaseHelper.createTld;
|
||||
import static google.registry.testing.DatabaseHelper.persistResource;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import google.registry.persistence.transaction.JpaTestExtensions;
|
||||
import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||
|
||||
/** Unit tests for {@link IdnLabelValidator}. */
|
||||
class IdnLabelValidatorTest {
|
||||
|
||||
private IdnLabelValidator idnLabelValidator = IdnLabelValidator.createDefaultIdnLabelValidator();
|
||||
@RegisterExtension
|
||||
final JpaIntegrationTestExtension jpa =
|
||||
new JpaTestExtensions.Builder().buildIntegrationTestExtension();
|
||||
|
||||
private void doJapaneseLanguageTests(String tld) {
|
||||
private IdnLabelValidator idnLabelValidator = new IdnLabelValidator();
|
||||
|
||||
private void doJapaneseAndLatinLanguageTests(String tld) {
|
||||
createTld(tld);
|
||||
assertThat(idnLabelValidator.findValidIdnTableForTld("foo", tld)).isPresent();
|
||||
assertThat(idnLabelValidator.findValidIdnTableForTld("12379foar", tld)).isPresent();
|
||||
assertThat(idnLabelValidator.findValidIdnTableForTld("みんな", tld)).isPresent();
|
||||
@@ -84,26 +93,29 @@ class IdnLabelValidatorTest {
|
||||
|
||||
@Test
|
||||
void testMinna() {
|
||||
doJapaneseLanguageTests("xn--q9jyb4c");
|
||||
doJapaneseAndLatinLanguageTests("xn--q9jyb4c");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testFoo() {
|
||||
doJapaneseLanguageTests("foo");
|
||||
doJapaneseAndLatinLanguageTests("foo");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSoy() {
|
||||
doJapaneseLanguageTests("soy");
|
||||
doJapaneseAndLatinLanguageTests("soy");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testOverridenTables() {
|
||||
// Set .tld to have only the extended latin table and not japanese.
|
||||
idnLabelValidator =
|
||||
new IdnLabelValidator(
|
||||
ImmutableMap.of("tld", ImmutableList.of(IdnTableEnum.EXTENDED_LATIN)));
|
||||
void testPerTldConfig() {
|
||||
persistResource(
|
||||
createTld("tld")
|
||||
.asBuilder()
|
||||
.setIdnTables(ImmutableSet.of(IdnTableEnum.EXTENDED_LATIN))
|
||||
.build());
|
||||
assertThat(idnLabelValidator.findValidIdnTableForTld("foo", "tld")).isPresent();
|
||||
assertThat(idnLabelValidator.findValidIdnTableForTld("abcdefghæ", "tld")).isPresent();
|
||||
// Extended Latin shouldn't include Japanese characters
|
||||
assertThat(idnLabelValidator.findValidIdnTableForTld("みんな", "tld")).isEmpty();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Range;
|
||||
import google.registry.model.domain.token.AllocationToken;
|
||||
import google.registry.model.tld.Registry;
|
||||
import google.registry.tldconfig.idn.IdnTableEnum;
|
||||
import java.math.BigDecimal;
|
||||
import org.joda.money.Money;
|
||||
import org.joda.time.DateTime;
|
||||
@@ -544,6 +545,35 @@ class CreateTldCommandTest extends CommandTestCase<CreateTldCommand> {
|
||||
assertThat(Registry.get("xn--q9jyb4c").getDriveFolderId()).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSuccess_setsIdnTables() throws Exception {
|
||||
runCommandForced(
|
||||
"--idn_tables=extended_latin,ja",
|
||||
"--roid_suffix=ASDF",
|
||||
"--dns_writers=VoidDnsWriter",
|
||||
"xn--q9jyb4c");
|
||||
assertThat(Registry.get("xn--q9jyb4c").getIdnTables())
|
||||
.containsExactly(IdnTableEnum.EXTENDED_LATIN, IdnTableEnum.JA);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testFailure_invalidIdnTable() throws Exception {
|
||||
IllegalArgumentException thrown =
|
||||
assertThrows(
|
||||
IllegalArgumentException.class,
|
||||
() ->
|
||||
runCommandForced(
|
||||
"--idn_tables=extended_latin,bad_value",
|
||||
"--roid_suffix=ASDF",
|
||||
"--dns_writers=VoidDnsWriter",
|
||||
"xn--q9jyb4c"));
|
||||
assertThat(thrown)
|
||||
.hasMessageThat()
|
||||
.isEqualTo(
|
||||
"IDN tables [EXTENDED_LATIN, BAD_VALUE] contained invalid value(s). Possible values:"
|
||||
+ " [EXTENDED_LATIN, UNCONFUSABLE_LATIN, JA]");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testFailure_setPremiumListThatDoesntExist() {
|
||||
IllegalArgumentException thrown =
|
||||
|
||||
@@ -39,6 +39,7 @@ import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.ImmutableSortedMap;
|
||||
import google.registry.model.domain.token.AllocationToken;
|
||||
import google.registry.model.tld.Registry;
|
||||
import google.registry.tldconfig.idn.IdnTableEnum;
|
||||
import java.util.Optional;
|
||||
import org.joda.money.Money;
|
||||
import org.joda.time.DateTime;
|
||||
@@ -1053,6 +1054,38 @@ class UpdateTldCommandTest extends CommandTestCase<UpdateTldCommand> {
|
||||
assertThat(Registry.get("xn--q9jyb4c").getDriveFolderId()).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSuccess_setsIdnTables() throws Exception {
|
||||
assertThat(Registry.get("xn--q9jyb4c").getIdnTables()).isEmpty();
|
||||
runCommandForced("--idn_tables=extended_latin,ja", "xn--q9jyb4c");
|
||||
assertThat(Registry.get("xn--q9jyb4c").getIdnTables())
|
||||
.containsExactly(IdnTableEnum.EXTENDED_LATIN, IdnTableEnum.JA);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSuccess_removesIndTables() throws Exception {
|
||||
persistResource(
|
||||
Registry.get("xn--q9jyb4c")
|
||||
.asBuilder()
|
||||
.setIdnTables(ImmutableSet.of(IdnTableEnum.EXTENDED_LATIN, IdnTableEnum.JA))
|
||||
.build());
|
||||
runCommandForced("--idn_tables=", "xn--q9jyb4c");
|
||||
assertThat(Registry.get("xn--q9jyb4c").getIdnTables()).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testFailure_invalidIdnTable() throws Exception {
|
||||
IllegalArgumentException thrown =
|
||||
assertThrows(
|
||||
IllegalArgumentException.class,
|
||||
() -> runCommandForced("--idn_tables=extended_latin,bad_value", "xn--q9jyb4c"));
|
||||
assertThat(thrown)
|
||||
.hasMessageThat()
|
||||
.isEqualTo(
|
||||
"IDN tables [EXTENDED_LATIN, BAD_VALUE] contained invalid value(s). Possible values:"
|
||||
+ " [EXTENDED_LATIN, UNCONFUSABLE_LATIN, JA]");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testFailure_setPremiumListThatDoesntExist() {
|
||||
IllegalArgumentException thrown =
|
||||
|
||||
Reference in New Issue
Block a user