1
0
mirror of https://github.com/google/nomulus synced 2026-06-09 16:33:02 +00:00

Compare commits

...

15 Commits

Author SHA1 Message Date
Lai Jiang c844c8e9b1 Add the ability to parse PKCS#8 private key in PEM file (#682) 2020-07-14 11:20:00 -04:00
gbrodman f747610533 Include the relock action in the web.xml routing file (#680) 2020-07-13 21:57:35 -04:00
Shicong Huang e1db357fc3 Merge two reserved list entities (#616)
* Merge reserved list

* Replace INSTANCE with getInstance()

* Fix broken test

* Rebase on master

* Simplify class
2020-07-13 13:40:34 -04:00
Weimin Yu ba1915e271 Write one PCollection to SQL (#664)
* Write one PCollection to SQL

Defined a transform that writes a PCollection of entities to SQL using
JPA. Allows configuring parallelism level and batch size.
2020-07-13 13:34:01 -04:00
Shicong Huang 58618a274e Add two folders of auto-generated Java classes to .gitignore (#679) 2020-07-13 10:09:56 -04:00
Lai Jiang e4d0571125 Increase the maximum number of nodes in a nood pool to 15 (#672) 2020-07-10 21:54:18 -04:00
Ben McIlwain 4cb88ab6e7 Convert RDE tests (and some test rules) from JUnit 4 to JUnit 5 (#677)
* Add JUnit Params and start using it

* Convert rest of RDE tests

* Don't check headers for generated tests

* Expand visibility to fix build breakage

* Bump JUnit versions to 5.6.2
2020-07-10 21:32:36 -04:00
gbrodman 987f390ff7 Run 'npm audit fix' to fix low-severity vulnerabilities in packages (#676) 2020-07-10 15:57:59 -04:00
Ben McIlwain ca756e14e6 Migrate all model tests from JUnit 4 to JUnit 5 (#675)
* Make first handful of tests JUnit 5

* Migrate rest of model package to JUnit 5
2020-07-10 14:56:28 -04:00
Ben McIlwain caa0cd9d61 Add a "coreDev" gradle target (#667)
* Add a "buildFmt" gradle target

This does the same thing as the automatic Java build target, except instead of
failing if the code formatting isn't correct, it just automatically reformats as
necessary and continues on.

* Remove unnecessary mustRunAfters

* Make it run tests too, and add :taskTree task

* Rename task to coreDev and remove run afters

* Add task tree dependency

* Actually that may not be necessary
2020-07-10 10:03:59 -04:00
Legina Chen 7806cc7edb Add domainRepoId to Subdomain class (#674)
* Change Subdomain class to contain domainRepoId

* Remove jpaTm from Spec11PipelineTest and change clientId -> registrarId

* Remove 'client' from a comment

* Include changes to Spec11Pipeline

* add SafeBrowsingTransforms

* Run style
2020-07-09 16:26:35 -07:00
Lai Jiang 0964fdf1dc Upgrade to Gradle 6.5.1 (#673) 2020-07-09 14:04:22 -04:00
gbrodman d17ec1fcb1 Use an enum instead of boolean in EntityTestCase constructor (#669)
* Use an enum instead of boolean in EntityTestCase constructor

It's more clear to use an enum rather than just a simple boolean

* Add Javadoc and make the enum name more verbose
2020-07-09 12:54:32 -04:00
Ben McIlwain fac5987c13 Double the # of pubapi instances to better handle traffic spikes (#671)
* Double the # of pubapi instances to better handle traffic spikes

We may also consider switching to an automatic scaling mode soon, on the hope
that it's working better than the last time we tried it (it would help to keep
resource costs down at least).
2020-07-09 11:52:15 -04:00
Ben McIlwain a3319e0026 Upgrade flow test classes to JUnit 5 (#666)
Most of the diffs are visibility changes.

Also deletes ShardableTestCase, which was only necessary because of Blaze (and
possible Bazel) limitations.
2020-07-08 14:08:05 -04:00
232 changed files with 3752 additions and 4132 deletions
+4
View File
@@ -79,6 +79,10 @@ nomulus.iml
nomulus.ipr
nomulus.iws
# Auto-generated java classes by Intellij
*/src/main/generated/
*/src/test/generated_tests/
# VScode
.vscode
+15 -3
View File
@@ -25,7 +25,7 @@ buildscript {
dependencies {
classpath 'com.google.cloud.tools:appengine-gradle-plugin:2.0.1'
classpath "net.ltgt.gradle:gradle-errorprone-plugin:0.6.1"
classpath 'net.ltgt.gradle:gradle-errorprone-plugin:0.6.1'
classpath 'org.sonatype.aether:aether-api:1.13.1'
classpath 'org.sonatype.aether:aether-impl:1.13.1'
}
@@ -49,6 +49,7 @@ plugins {
id 'com.diffplug.gradle.spotless' version '3.25.0'
id 'jacoco'
id 'com.dorongold.task-tree' version '1.5'
}
wrapper {
@@ -443,6 +444,7 @@ task javaIncrementalFormatDryRun {
println("${invokeJavaDiffFormatScript("show")}")
}
}
tasks.build.dependsOn(tasks.javaIncrementalFormatCheck)
// Checks if modified lines in Java source files need reformatting.
// Note that this task processes modified Java files in the entire repository.
@@ -452,8 +454,6 @@ task javaIncrementalFormatApply {
}
}
tasks.build.dependsOn(tasks.javaIncrementalFormatCheck)
task javadoc(type: Javadoc) {
source javadocSource
classpath = files(javadocClasspath)
@@ -468,4 +468,16 @@ task javadoc(type: Javadoc) {
tasks.build.dependsOn(tasks.javadoc)
// Task for doing development on core Nomulus.
// This fixes code formatting automatically as necessary, builds and tests the
// core Nomulus codebase, and runs all presubmits.
task coreDev {
dependsOn 'javaIncrementalFormatApply'
dependsOn 'javadoc'
dependsOn 'checkDependenciesDotGradle'
dependsOn 'checkLicense'
dependsOn ':core:check'
dependsOn 'assemble'
}
javadocDependentTasks.each { tasks.javadoc.dependsOn(it) }
@@ -61,12 +61,12 @@ org.checkerframework:checker-compat-qual:2.5.5
org.checkerframework:checker-qual:2.11.1
org.hamcrest:hamcrest-core:1.3
org.json:json:20160212
org.junit.jupiter:junit-jupiter-api:5.6.1
org.junit.jupiter:junit-jupiter-engine:5.6.1
org.junit.platform:junit-platform-commons:1.6.1
org.junit.platform:junit-platform-engine:1.6.1
org.junit.vintage:junit-vintage-engine:5.6.1
org.junit:junit-bom:5.6.1
org.junit.jupiter:junit-jupiter-api:5.6.2
org.junit.jupiter:junit-jupiter-engine:5.6.2
org.junit.platform:junit-platform-commons:1.6.2
org.junit.platform:junit-platform-engine:1.6.2
org.junit.vintage:junit-vintage-engine:5.6.2
org.junit:junit-bom:5.6.2
org.mockito:mockito-core:3.3.3
org.objenesis:objenesis:2.6
org.opentest4j:opentest4j:1.2.0
@@ -61,12 +61,12 @@ org.checkerframework:checker-compat-qual:2.5.5
org.checkerframework:checker-qual:2.11.1
org.hamcrest:hamcrest-core:1.3
org.json:json:20160212
org.junit.jupiter:junit-jupiter-api:5.6.1
org.junit.jupiter:junit-jupiter-engine:5.6.1
org.junit.platform:junit-platform-commons:1.6.1
org.junit.platform:junit-platform-engine:1.6.1
org.junit.vintage:junit-vintage-engine:5.6.1
org.junit:junit-bom:5.6.1
org.junit.jupiter:junit-jupiter-api:5.6.2
org.junit.jupiter:junit-jupiter-engine:5.6.2
org.junit.platform:junit-platform-commons:1.6.2
org.junit.platform:junit-platform-engine:1.6.2
org.junit.vintage:junit-vintage-engine:5.6.2
org.junit:junit-bom:5.6.2
org.mockito:mockito-core:3.3.3
org.objenesis:objenesis:2.6
org.opentest4j:opentest4j:1.2.0
@@ -61,12 +61,12 @@ org.checkerframework:checker-compat-qual:2.5.5
org.checkerframework:checker-qual:2.11.1
org.hamcrest:hamcrest-core:1.3
org.json:json:20160212
org.junit.jupiter:junit-jupiter-api:5.6.1
org.junit.jupiter:junit-jupiter-engine:5.6.1
org.junit.platform:junit-platform-commons:1.6.1
org.junit.platform:junit-platform-engine:1.6.1
org.junit.vintage:junit-vintage-engine:5.6.1
org.junit:junit-bom:5.6.1
org.junit.jupiter:junit-jupiter-api:5.6.2
org.junit.jupiter:junit-jupiter-engine:5.6.2
org.junit.platform:junit-platform-commons:1.6.2
org.junit.platform:junit-platform-engine:1.6.2
org.junit.vintage:junit-vintage-engine:5.6.2
org.junit:junit-bom:5.6.2
org.mockito:mockito-core:3.3.3
org.objenesis:objenesis:2.6
org.opentest4j:opentest4j:1.2.0
@@ -61,12 +61,12 @@ org.checkerframework:checker-compat-qual:2.5.5
org.checkerframework:checker-qual:2.11.1
org.hamcrest:hamcrest-core:1.3
org.json:json:20160212
org.junit.jupiter:junit-jupiter-api:5.6.1
org.junit.jupiter:junit-jupiter-engine:5.6.1
org.junit.platform:junit-platform-commons:1.6.1
org.junit.platform:junit-platform-engine:1.6.1
org.junit.vintage:junit-vintage-engine:5.6.1
org.junit:junit-bom:5.6.1
org.junit.jupiter:junit-jupiter-api:5.6.2
org.junit.jupiter:junit-jupiter-engine:5.6.2
org.junit.platform:junit-platform-commons:1.6.2
org.junit.platform:junit-platform-engine:1.6.2
org.junit.vintage:junit-vintage-engine:5.6.2
org.junit:junit-bom:5.6.2
org.mockito:mockito-core:3.3.3
org.objenesis:objenesis:2.6
org.opentest4j:opentest4j:1.2.0
@@ -20,10 +20,10 @@ org.checkerframework:checker-compat-qual:2.5.5
org.checkerframework:checker-qual:2.11.1
org.eclipse.jgit:org.eclipse.jgit:4.4.1.201607150455-r
org.hamcrest:hamcrest-core:1.3
org.junit.jupiter:junit-jupiter-api:5.6.1
org.junit.jupiter:junit-jupiter-engine:5.6.1
org.junit.platform:junit-platform-commons:1.6.1
org.junit.platform:junit-platform-engine:1.6.1
org.junit.vintage:junit-vintage-engine:5.6.1
org.junit:junit-bom:5.6.1
org.junit.jupiter:junit-jupiter-api:5.6.2
org.junit.jupiter:junit-jupiter-engine:5.6.2
org.junit.platform:junit-platform-commons:1.6.2
org.junit.platform:junit-platform-engine:1.6.2
org.junit.vintage:junit-vintage-engine:5.6.2
org.junit:junit-bom:5.6.2
org.opentest4j:opentest4j:1.2.0
@@ -20,10 +20,10 @@ org.checkerframework:checker-compat-qual:2.5.5
org.checkerframework:checker-qual:2.11.1
org.eclipse.jgit:org.eclipse.jgit:4.4.1.201607150455-r
org.hamcrest:hamcrest-core:1.3
org.junit.jupiter:junit-jupiter-api:5.6.1
org.junit.jupiter:junit-jupiter-engine:5.6.1
org.junit.platform:junit-platform-commons:1.6.1
org.junit.platform:junit-platform-engine:1.6.1
org.junit.vintage:junit-vintage-engine:5.6.1
org.junit:junit-bom:5.6.1
org.junit.jupiter:junit-jupiter-api:5.6.2
org.junit.jupiter:junit-jupiter-engine:5.6.2
org.junit.platform:junit-platform-commons:1.6.2
org.junit.platform:junit-platform-engine:1.6.2
org.junit.vintage:junit-vintage-engine:5.6.2
org.junit:junit-bom:5.6.2
org.opentest4j:opentest4j:1.2.0
@@ -21,10 +21,10 @@ org.checkerframework:checker-compat-qual:2.5.5
org.checkerframework:checker-qual:2.11.1
org.eclipse.jgit:org.eclipse.jgit:4.4.1.201607150455-r
org.hamcrest:hamcrest-core:1.3
org.junit.jupiter:junit-jupiter-api:5.6.1
org.junit.jupiter:junit-jupiter-engine:5.6.1
org.junit.platform:junit-platform-commons:1.6.1
org.junit.platform:junit-platform-engine:1.6.1
org.junit.vintage:junit-vintage-engine:5.6.1
org.junit:junit-bom:5.6.1
org.junit.jupiter:junit-jupiter-api:5.6.2
org.junit.jupiter:junit-jupiter-engine:5.6.2
org.junit.platform:junit-platform-commons:1.6.2
org.junit.platform:junit-platform-engine:1.6.2
org.junit.vintage:junit-vintage-engine:5.6.2
org.junit:junit-bom:5.6.2
org.opentest4j:opentest4j:1.2.0
@@ -21,10 +21,10 @@ org.checkerframework:checker-compat-qual:2.5.5
org.checkerframework:checker-qual:2.11.1
org.eclipse.jgit:org.eclipse.jgit:4.4.1.201607150455-r
org.hamcrest:hamcrest-core:1.3
org.junit.jupiter:junit-jupiter-api:5.6.1
org.junit.jupiter:junit-jupiter-engine:5.6.1
org.junit.platform:junit-platform-commons:1.6.1
org.junit.platform:junit-platform-engine:1.6.1
org.junit.vintage:junit-vintage-engine:5.6.1
org.junit:junit-bom:5.6.1
org.junit.jupiter:junit-jupiter-api:5.6.2
org.junit.jupiter:junit-jupiter-engine:5.6.2
org.junit.platform:junit-platform-commons:1.6.2
org.junit.platform:junit-platform-engine:1.6.2
org.junit.vintage:junit-vintage-engine:5.6.2
org.junit:junit-bom:5.6.2
org.opentest4j:opentest4j:1.2.0
+3 -3
View File
@@ -77,9 +77,9 @@ PRESUBMITS = {
PresubmitCheck(
r".*Copyright 20\d{2} The Nomulus Authors\. All Rights Reserved\.",
("java", "js", "soy", "sql", "py", "sh", "gradle"), {
".git", "/build/", "/generated/", "node_modules/",
"JUnitBackports.java", "registrar_bin.", "registrar_dbg.",
"google-java-format-diff.py",
".git", "/build/", "/generated/", "/generated_tests/",
"node_modules/", "JUnitBackports.java", "registrar_bin.",
"registrar_dbg.", "google-java-format-diff.py",
"nomulus.golden.sql", "soyutils_usegoog.js"
}, REQUIRED):
"File did not include the license header.",
+1
View File
@@ -312,6 +312,7 @@ dependencies {
testCompile deps['org.junit.jupiter:junit-jupiter-api']
testCompile deps['org.junit.jupiter:junit-jupiter-engine']
testCompile deps['org.junit.jupiter:junit-jupiter-migrationsupport']
testCompile deps['org.junit.jupiter:junit-jupiter-params']
testCompile deps['org.junit.platform:junit-platform-runner']
testCompile deps['org.junit.platform:junit-platform-suite-api']
testCompile deps['org.junit.vintage:junit-vintage-engine']
@@ -246,6 +246,7 @@ org.json:json:20160810
org.junit.jupiter:junit-jupiter-api:5.6.2
org.junit.jupiter:junit-jupiter-engine:5.6.2
org.junit.jupiter:junit-jupiter-migrationsupport:5.6.2
org.junit.jupiter:junit-jupiter-params:5.6.2
org.junit.platform:junit-platform-commons:1.6.2
org.junit.platform:junit-platform-engine:1.6.2
org.junit.platform:junit-platform-launcher:1.6.2
@@ -244,6 +244,7 @@ org.json:json:20160810
org.junit.jupiter:junit-jupiter-api:5.6.2
org.junit.jupiter:junit-jupiter-engine:5.6.2
org.junit.jupiter:junit-jupiter-migrationsupport:5.6.2
org.junit.jupiter:junit-jupiter-params:5.6.2
org.junit.platform:junit-platform-commons:1.6.2
org.junit.platform:junit-platform-engine:1.6.2
org.junit.platform:junit-platform-launcher:1.6.2
@@ -249,6 +249,7 @@ org.json:json:20160810
org.junit.jupiter:junit-jupiter-api:5.6.2
org.junit.jupiter:junit-jupiter-engine:5.6.2
org.junit.jupiter:junit-jupiter-migrationsupport:5.6.2
org.junit.jupiter:junit-jupiter-params:5.6.2
org.junit.platform:junit-platform-commons:1.6.2
org.junit.platform:junit-platform-engine:1.6.2
org.junit.platform:junit-platform-launcher:1.6.2
@@ -249,6 +249,7 @@ org.json:json:20160810
org.junit.jupiter:junit-jupiter-api:5.6.2
org.junit.jupiter:junit-jupiter-engine:5.6.2
org.junit.jupiter:junit-jupiter-migrationsupport:5.6.2
org.junit.jupiter:junit-jupiter-params:5.6.2
org.junit.platform:junit-platform-commons:1.6.2
org.junit.platform:junit-platform-engine:1.6.2
org.junit.platform:junit-platform-launcher:1.6.2
@@ -19,7 +19,6 @@ import static com.google.common.base.Preconditions.checkState;
import static com.google.common.base.Strings.isNullOrEmpty;
import com.google.common.base.Splitter;
import dagger.Binds;
import dagger.Component;
import dagger.Lazy;
import dagger.Module;
@@ -32,10 +31,6 @@ import google.registry.persistence.PersistenceModule;
import google.registry.persistence.PersistenceModule.JdbcJpaTm;
import google.registry.persistence.PersistenceModule.SocketFactoryJpaTm;
import google.registry.persistence.transaction.JpaTransactionManager;
import google.registry.util.Clock;
import google.registry.util.Sleeper;
import google.registry.util.SystemClock;
import google.registry.util.SystemSleeper;
import google.registry.util.UtilsModule;
import java.io.BufferedReader;
import java.io.IOException;
@@ -159,19 +154,10 @@ public class BeamJpaModule {
@Provides
@Config("beamHibernateHikariMaximumPoolSize")
static int getBeamHibernateHikariMaximumPoolSize() {
// TODO(weiminyu): make this configurable. Should be equal to number of cores.
return 4;
}
@Module
interface BindModule {
@Binds
Sleeper sleeper(SystemSleeper sleeper);
@Binds
Clock clock(SystemClock clock);
}
@Singleton
@Component(
modules = {
@@ -19,24 +19,37 @@ import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
import static google.registry.beam.initsql.BackupPaths.getCommitLogTimestamp;
import static google.registry.beam.initsql.BackupPaths.getExportFilePatterns;
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
import static google.registry.persistence.transaction.TransactionManagerFactory.setJpaTm;
import static google.registry.util.DateTimeUtils.START_OF_TIME;
import static google.registry.util.DateTimeUtils.isBeforeOrAt;
import static java.util.Comparator.comparing;
import static org.apache.beam.sdk.values.TypeDescriptors.integers;
import static org.apache.beam.sdk.values.TypeDescriptors.kvs;
import static org.apache.beam.sdk.values.TypeDescriptors.strings;
import avro.shaded.com.google.common.collect.Iterators;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Streams;
import google.registry.backup.AppEngineEnvironment;
import google.registry.backup.CommitLogImports;
import google.registry.backup.VersionedEntity;
import google.registry.model.ofy.ObjectifyService;
import google.registry.model.ofy.Ofy;
import google.registry.persistence.transaction.JpaTransactionManager;
import google.registry.tools.LevelDbLogReader;
import google.registry.util.SystemSleeper;
import java.io.Serializable;
import java.util.Collection;
import java.util.Iterator;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.ThreadLocalRandom;
import java.util.function.Supplier;
import javax.persistence.OptimisticLockException;
import org.apache.beam.sdk.coders.StringUtf8Coder;
import org.apache.beam.sdk.io.Compression;
import org.apache.beam.sdk.io.FileIO;
@@ -47,6 +60,7 @@ import org.apache.beam.sdk.transforms.Create;
import org.apache.beam.sdk.transforms.DoFn;
import org.apache.beam.sdk.transforms.Flatten;
import org.apache.beam.sdk.transforms.GroupByKey;
import org.apache.beam.sdk.transforms.GroupIntoBatches;
import org.apache.beam.sdk.transforms.MapElements;
import org.apache.beam.sdk.transforms.PTransform;
import org.apache.beam.sdk.transforms.ParDo;
@@ -56,10 +70,12 @@ import org.apache.beam.sdk.values.PBegin;
import org.apache.beam.sdk.values.PCollection;
import org.apache.beam.sdk.values.PCollectionList;
import org.apache.beam.sdk.values.PCollectionTuple;
import org.apache.beam.sdk.values.PDone;
import org.apache.beam.sdk.values.TupleTag;
import org.apache.beam.sdk.values.TupleTagList;
import org.apache.beam.sdk.values.TypeDescriptor;
import org.joda.time.DateTime;
import org.joda.time.Duration;
/**
* {@link PTransform Pipeline transforms} used in pipelines that load from both Datastore export
@@ -245,6 +261,38 @@ public final class Transforms {
.iterator()));
}
/**
* Returns a {@link PTransform} that writes a {@link PCollection} of entities to a SQL database.
*
* @param transformId a unique ID for an instance of the returned transform
* @param maxWriters the max number of concurrent writes to SQL, which also determines the max
* number of connection pools created
* @param batchSize the number of entities to write in each operation
* @param jpaSupplier supplier of a {@link JpaTransactionManager}
*/
public static PTransform<PCollection<VersionedEntity>, PDone> writeToSql(
String transformId,
int maxWriters,
int batchSize,
SerializableSupplier<JpaTransactionManager> jpaSupplier) {
return new PTransform<PCollection<VersionedEntity>, PDone>() {
@Override
public PDone expand(PCollection<VersionedEntity> input) {
input
.apply(
"Shard data for " + transformId,
MapElements.into(kvs(integers(), TypeDescriptor.of(VersionedEntity.class)))
.via(ve -> KV.of(ThreadLocalRandom.current().nextInt(maxWriters), ve)))
.apply("Batch output by shard " + transformId, GroupIntoBatches.ofSize(batchSize))
.apply("Write in batch for " + transformId, ParDo.of(new SqlBatchWriter(jpaSupplier)));
return PDone.in(input.getPipeline());
}
};
}
/** Interface for serializable {@link Supplier suppliers}. */
public interface SerializableSupplier<T> extends Supplier<T>, Serializable {}
/**
* Returns a {@link PTransform} that produces a {@link PCollection} containing all elements in the
* given {@link Iterable}.
@@ -322,4 +370,104 @@ public final class Transforms {
}
}
}
/**
* Writes a batch of entities to a SQL database.
*
* <p>Note that an arbitrary number of instances of this class may be created and freed in
* arbitrary order in a single JVM. Due to the tech debt that forced us to use a static variable
* to hold the {@code JpaTransactionManager} instance, we must ensure that JpaTransactionManager
* is not changed or torn down while being used by some instance.
*/
private static class SqlBatchWriter extends DoFn<KV<Integer, Iterable<VersionedEntity>>, Void> {
private static int instanceCount = 0;
private static JpaTransactionManager originalJpa;
private final SerializableSupplier<JpaTransactionManager> jpaSupplier;
private transient Ofy ofy;
private transient SystemSleeper sleeper;
SqlBatchWriter(SerializableSupplier<JpaTransactionManager> jpaSupplier) {
this.jpaSupplier = jpaSupplier;
}
@Setup
public void setup() {
sleeper = new SystemSleeper();
ObjectifyService.initOfy();
ofy = ObjectifyService.ofy();
synchronized (SqlBatchWriter.class) {
if (instanceCount == 0) {
originalJpa = jpaTm();
setJpaTm(jpaSupplier);
}
instanceCount++;
}
}
@Teardown
public void teardown() {
synchronized (SqlBatchWriter.class) {
instanceCount--;
if (instanceCount == 0) {
jpaTm().teardown();
setJpaTm(() -> originalJpa);
}
}
}
@ProcessElement
public void processElement(@Element KV<Integer, Iterable<VersionedEntity>> kv) {
try (AppEngineEnvironment env = new AppEngineEnvironment()) {
ImmutableList<Object> ofyEntities =
Streams.stream(kv.getValue())
.map(VersionedEntity::getEntity)
.map(Optional::get)
.map(ofy::toPojo)
.collect(ImmutableList.toImmutableList());
retry(() -> jpaTm().transact(() -> jpaTm().saveNewOrUpdateAll(ofyEntities)));
}
}
// TODO(b/160632289): Enhance Retrier and use it here.
private void retry(Runnable runnable) {
int maxAttempts = 5;
int initialDelayMillis = 100;
double jitterRatio = 0.2;
for (int attempt = 0; attempt < maxAttempts; attempt++) {
try {
runnable.run();
return;
} catch (Throwable throwable) {
throwIfNotCausedBy(throwable, OptimisticLockException.class);
int sleepMillis = (1 << attempt) * initialDelayMillis;
int jitter =
ThreadLocalRandom.current().nextInt((int) (sleepMillis * jitterRatio))
- (int) (sleepMillis * jitterRatio / 2);
sleeper.sleepUninterruptibly(Duration.millis(sleepMillis + jitter));
}
}
}
/**
* Rethrows {@code throwable} if it is not (and does not have a cause of) {@code causeType};
* otherwise returns with no side effects.
*/
private void throwIfNotCausedBy(Throwable throwable, Class<? extends Throwable> causeType) {
Throwable t = throwable;
while (t != null) {
if (causeType.isInstance(t)) {
return;
}
t = t.getCause();
}
Throwables.throwIfUnchecked(t);
throw new RuntimeException(t);
}
}
}
@@ -141,7 +141,7 @@ public class SafeBrowsingTransforms {
@ProcessElement
public void processElement(ProcessContext context) {
Subdomain subdomain = context.element();
subdomainBuffer.put(subdomain.fullyQualifiedDomainName(), subdomain);
subdomainBuffer.put(subdomain.domainName(), subdomain);
if (subdomainBuffer.size() >= BATCH_SIZE) {
ImmutableSet<KV<Subdomain, ThreatMatch>> results = evaluateAndFlush();
results.forEach(context::output);
@@ -239,7 +239,7 @@ public class SafeBrowsingTransforms {
String url = match.getJSONObject("threat").getString("url");
Subdomain subdomain = subdomainBuffer.get(url);
resultBuilder.add(
KV.of(subdomain, ThreatMatch.create(match, subdomain.fullyQualifiedDomainName())));
KV.of(subdomain, ThreatMatch.create(match, subdomain.domainName())));
}
}
}
@@ -77,7 +77,7 @@ public class Spec11Pipeline implements Serializable {
public static final String REGISTRAR_EMAIL_FIELD = "registrarEmailAddress";
/** The JSON object field into which we put the registrar's name for Spec11 reports. */
public static final String REGISTRAR_CLIENT_ID_FIELD = "registrarClientId";
/** The JSON object field we put the threat match array for Spec11 reports. */
/** The JSON object field into which we put the threat match array for Spec11 reports. */
public static final String THREAT_MATCHES_FIELD = "threatMatches";
private final String projectId;
@@ -176,9 +176,11 @@ public class Spec11Pipeline implements Serializable {
PCollection<Subdomain> domains,
EvaluateSafeBrowsingFn evaluateSafeBrowsingFn,
ValueProvider<String> dateProvider) {
PCollection<KV<Subdomain, ThreatMatch>> subdomains =
/* Store ThreatMatch objects in JSON. */
PCollection<KV<Subdomain, ThreatMatch>> subdomainsJson =
domains.apply("Run through SafeBrowsingAPI", ParDo.of(evaluateSafeBrowsingFn));
subdomains
subdomainsJson
.apply(
"Map registrar client ID to email/ThreatMatch pair",
MapElements.into(
@@ -187,7 +189,7 @@ public class Spec11Pipeline implements Serializable {
.via(
(KV<Subdomain, ThreatMatch> kv) ->
KV.of(
kv.getKey().registrarClientId(),
kv.getKey().registrarId(),
EmailAndThreatMatch.create(
kv.getKey().registrarEmailAddress(), kv.getValue()))))
.apply("Group by registrar client ID", GroupByKey.create())
@@ -36,12 +36,14 @@ import org.apache.beam.sdk.io.gcp.bigquery.SchemaAndRecord;
public abstract class Subdomain implements Serializable {
private static final ImmutableList<String> FIELD_NAMES =
ImmutableList.of("fullyQualifiedDomainName", "registrarClientId", "registrarEmailAddress");
ImmutableList.of("domainName", "domainRepoId", "registrarId", "registrarEmailAddress");
/** Returns the fully qualified domain name. */
abstract String fullyQualifiedDomainName();
/** Returns the client ID of the associated registrar for this domain. */
abstract String registrarClientId();
abstract String domainName();
/** Returns the domain repo ID (the primary key of the domain table). */
abstract String domainRepoId();
/** Returns the registrar ID of the associated registrar for this domain. */
abstract String registrarId();
/** Returns the email address of the registrar associated with this domain. */
abstract String registrarEmailAddress();
@@ -56,8 +58,9 @@ public abstract class Subdomain implements Serializable {
checkFieldsNotNull(FIELD_NAMES, schemaAndRecord);
GenericRecord record = schemaAndRecord.getRecord();
return create(
extractField(record, "fullyQualifiedDomainName"),
extractField(record, "registrarClientId"),
extractField(record, "domainName"),
extractField(record, "domainRepoId"),
extractField(record, "registrarId"),
extractField(record, "registrarEmailAddress"));
}
@@ -69,9 +72,11 @@ public abstract class Subdomain implements Serializable {
*/
@VisibleForTesting
static Subdomain create(
String fullyQualifiedDomainName, String registrarClientId, String registrarEmailAddress) {
String domainName,
String domainRepoId,
String registrarId,
String registrarEmailAddress) {
return new AutoValue_Subdomain(
fullyQualifiedDomainName, registrarClientId, registrarEmailAddress);
domainName, domainRepoId, registrarId, registrarEmailAddress);
}
}
@@ -19,11 +19,13 @@
-- email address.
SELECT
domain.fullyQualifiedDomainName AS fullyQualifiedDomainName,
registrar.clientId AS registrarClientId,
domain.fullyQualifiedDomainName AS domainName,
domain.__key__.name AS domainRepoId,
registrar.clientId AS clientId,
COALESCE(registrar.emailAddress, '') AS registrarEmailAddress
FROM ( (
SELECT
__key__,
fullyQualifiedDomainName,
currentSponsorClientId,
creationTime
@@ -367,6 +367,12 @@
<url-pattern>/_dr/task/linkRdeHosts</url-pattern>
</servlet-mapping>
<!-- Action to automatically re-lock a domain after unlocking it -->
<servlet-mapping>
<servlet-name>backend-servlet</servlet-name>
<url-pattern>/_dr/task/relockDomain</url-pattern>
</servlet-mapping>
<!-- Security config -->
<security-constraint>
<web-resource-collection>
@@ -7,7 +7,7 @@
<sessions-enabled>true</sessions-enabled>
<instance-class>B4_1G</instance-class>
<manual-scaling>
<instances>10</instances>
<instances>20</instances>
</manual-scaling>
<system-properties>
@@ -70,24 +70,24 @@ public class ContactBase extends EppResource implements ResourceWithTransferData
@IgnoreSave(IfNull.class)
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "name", column = @Column(name = "addr_local_name")),
@AttributeOverride(name = "org", column = @Column(name = "addr_local_org")),
@AttributeOverride(name = "type", column = @Column(name = "addr_local_type")),
@AttributeOverride(
name = "address.streetLine1",
column = @Column(name = "addr_local_street_line1")),
@AttributeOverride(
name = "address.streetLine2",
column = @Column(name = "addr_local_street_line2")),
@AttributeOverride(
name = "address.streetLine3",
column = @Column(name = "addr_local_street_line3")),
@AttributeOverride(name = "address.city", column = @Column(name = "addr_local_city")),
@AttributeOverride(name = "address.state", column = @Column(name = "addr_local_state")),
@AttributeOverride(name = "address.zip", column = @Column(name = "addr_local_zip")),
@AttributeOverride(
name = "address.countryCode",
column = @Column(name = "addr_local_country_code"))
@AttributeOverride(name = "name", column = @Column(name = "addr_local_name")),
@AttributeOverride(name = "org", column = @Column(name = "addr_local_org")),
@AttributeOverride(name = "type", column = @Column(name = "addr_local_type")),
@AttributeOverride(
name = "address.streetLine1",
column = @Column(name = "addr_local_street_line1")),
@AttributeOverride(
name = "address.streetLine2",
column = @Column(name = "addr_local_street_line2")),
@AttributeOverride(
name = "address.streetLine3",
column = @Column(name = "addr_local_street_line3")),
@AttributeOverride(name = "address.city", column = @Column(name = "addr_local_city")),
@AttributeOverride(name = "address.state", column = @Column(name = "addr_local_state")),
@AttributeOverride(name = "address.zip", column = @Column(name = "addr_local_zip")),
@AttributeOverride(
name = "address.countryCode",
column = @Column(name = "addr_local_country_code"))
})
PostalInfo localizedPostalInfo;
@@ -98,24 +98,24 @@ public class ContactBase extends EppResource implements ResourceWithTransferData
@IgnoreSave(IfNull.class)
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "name", column = @Column(name = "addr_i18n_name")),
@AttributeOverride(name = "org", column = @Column(name = "addr_i18n_org")),
@AttributeOverride(name = "type", column = @Column(name = "addr_i18n_type")),
@AttributeOverride(
name = "address.streetLine1",
column = @Column(name = "addr_i18n_street_line1")),
@AttributeOverride(
name = "address.streetLine2",
column = @Column(name = "addr_i18n_street_line2")),
@AttributeOverride(
name = "address.streetLine3",
column = @Column(name = "addr_i18n_street_line3")),
@AttributeOverride(name = "address.city", column = @Column(name = "addr_i18n_city")),
@AttributeOverride(name = "address.state", column = @Column(name = "addr_i18n_state")),
@AttributeOverride(name = "address.zip", column = @Column(name = "addr_i18n_zip")),
@AttributeOverride(
name = "address.countryCode",
column = @Column(name = "addr_i18n_country_code"))
@AttributeOverride(name = "name", column = @Column(name = "addr_i18n_name")),
@AttributeOverride(name = "org", column = @Column(name = "addr_i18n_org")),
@AttributeOverride(name = "type", column = @Column(name = "addr_i18n_type")),
@AttributeOverride(
name = "address.streetLine1",
column = @Column(name = "addr_i18n_street_line1")),
@AttributeOverride(
name = "address.streetLine2",
column = @Column(name = "addr_i18n_street_line2")),
@AttributeOverride(
name = "address.streetLine3",
column = @Column(name = "addr_i18n_street_line3")),
@AttributeOverride(name = "address.city", column = @Column(name = "addr_i18n_city")),
@AttributeOverride(name = "address.state", column = @Column(name = "addr_i18n_state")),
@AttributeOverride(name = "address.zip", column = @Column(name = "addr_i18n_zip")),
@AttributeOverride(
name = "address.countryCode",
column = @Column(name = "addr_i18n_country_code"))
})
PostalInfo internationalizedPostalInfo;
@@ -130,8 +130,8 @@ public class ContactBase extends EppResource implements ResourceWithTransferData
@IgnoreSave(IfNull.class)
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "phoneNumber", column = @Column(name = "voice_phone_number")),
@AttributeOverride(name = "extension", column = @Column(name = "voice_phone_extension")),
@AttributeOverride(name = "phoneNumber", column = @Column(name = "voice_phone_number")),
@AttributeOverride(name = "extension", column = @Column(name = "voice_phone_extension")),
})
ContactPhoneNumber voice;
@@ -139,8 +139,8 @@ public class ContactBase extends EppResource implements ResourceWithTransferData
@IgnoreSave(IfNull.class)
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "phoneNumber", column = @Column(name = "fax_phone_number")),
@AttributeOverride(name = "extension", column = @Column(name = "fax_phone_extension")),
@AttributeOverride(name = "phoneNumber", column = @Column(name = "fax_phone_number")),
@AttributeOverride(name = "extension", column = @Column(name = "fax_phone_extension")),
})
ContactPhoneNumber fax;
@@ -151,8 +151,8 @@ public class ContactBase extends EppResource implements ResourceWithTransferData
/** Authorization info (aka transfer secret) of the contact. */
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "pw.value", column = @Column(name = "auth_info_value")),
@AttributeOverride(name = "pw.repoId", column = @Column(name = "auth_info_repo_id")),
@AttributeOverride(name = "pw.value", column = @Column(name = "auth_info_value")),
@AttributeOverride(name = "pw.repoId", column = @Column(name = "auth_info_repo_id")),
})
ContactAuthInfo authInfo;
@@ -172,13 +172,13 @@ public class ContactBase extends EppResource implements ResourceWithTransferData
/** Disclosure policy. */
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "name", column = @Column(name = "disclose_types_name")),
@AttributeOverride(name = "org", column = @Column(name = "disclose_types_org")),
@AttributeOverride(name = "addr", column = @Column(name = "disclose_types_addr")),
@AttributeOverride(name = "flag", column = @Column(name = "disclose_mode_flag")),
@AttributeOverride(name = "voice.marked", column = @Column(name = "disclose_show_voice")),
@AttributeOverride(name = "fax.marked", column = @Column(name = "disclose_show_fax")),
@AttributeOverride(name = "email.marked", column = @Column(name = "disclose_show_email"))
@AttributeOverride(name = "name", column = @Column(name = "disclose_types_name")),
@AttributeOverride(name = "org", column = @Column(name = "disclose_types_org")),
@AttributeOverride(name = "addr", column = @Column(name = "disclose_types_addr")),
@AttributeOverride(name = "flag", column = @Column(name = "disclose_mode_flag")),
@AttributeOverride(name = "voice.marked", column = @Column(name = "disclose_show_voice")),
@AttributeOverride(name = "fax.marked", column = @Column(name = "disclose_show_fax")),
@AttributeOverride(name = "email.marked", column = @Column(name = "disclose_show_email"))
})
Disclose disclose;
@@ -37,11 +37,11 @@ import org.joda.time.DateTime;
@javax.persistence.Table(
name = "Contact",
indexes = {
@javax.persistence.Index(columnList = "creationTime"),
@javax.persistence.Index(columnList = "currentSponsorRegistrarId"),
@javax.persistence.Index(columnList = "deletionTime"),
@javax.persistence.Index(columnList = "contactId", unique = true),
@javax.persistence.Index(columnList = "searchName")
@javax.persistence.Index(columnList = "creationTime"),
@javax.persistence.Index(columnList = "currentSponsorRegistrarId"),
@javax.persistence.Index(columnList = "deletionTime"),
@javax.persistence.Index(columnList = "contactId", unique = true),
@javax.persistence.Index(columnList = "searchName")
})
@ExternalMessagingName("contact")
@WithStringVKey
@@ -15,6 +15,7 @@
package google.registry.model.registry.label;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkState;
import static com.google.common.base.Strings.isNullOrEmpty;
import static com.google.common.collect.ImmutableSet.toImmutableSet;
import static google.registry.model.common.EntityGroupRoot.getCrossTldKey;
@@ -30,6 +31,7 @@ import com.google.common.collect.Multiset;
import com.google.common.util.concurrent.UncheckedExecutionException;
import com.googlecode.objectify.Key;
import com.googlecode.objectify.annotation.Id;
import com.googlecode.objectify.annotation.Ignore;
import com.googlecode.objectify.annotation.Parent;
import google.registry.model.Buildable;
import google.registry.model.ImmutableObject;
@@ -42,6 +44,11 @@ import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
import javax.annotation.Nullable;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.MappedSuperclass;
import javax.persistence.Transient;
import org.joda.time.DateTime;
/**
@@ -49,25 +56,46 @@ import org.joda.time.DateTime;
*
* @param <T> The type of the root value being listed, e.g. {@link ReservationType}.
* @param <R> The type of domain label entry being listed, e.g. {@link ReservedListEntry} (note,
* must subclass {@link DomainLabelEntry}.
* must subclass {@link DomainLabelEntry}.
*/
@MappedSuperclass
public abstract class BaseDomainLabelList<T extends Comparable<?>, R extends DomainLabelEntry<T, ?>>
extends ImmutableObject implements Buildable {
@Ignore
@javax.persistence.Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long revisionId;
@Id
@Column(nullable = false)
String name;
@Parent
Key<EntityGroupRoot> parent = getCrossTldKey();
@Parent @Transient Key<EntityGroupRoot> parent = getCrossTldKey();
DateTime creationTime;
@Transient DateTime creationTime;
// The list in Cloud SQL is immutable, we only have a creation_timestamp field and it should be
// set to the timestamp when the list is created. In Datastore, we have two fields and the
// lastUpdateTime is set to the current timestamp when creating and updating a list. So, we use
// lastUpdateTime as the creation_timestamp column during the dual-write phase for compatibility.
@Column(name = "creation_timestamp", nullable = false)
DateTime lastUpdateTime;
/** Returns the ID of this revision, or throws if null. */
public long getRevisionId() {
checkState(
revisionId != null,
"revisionId is null because this object has not been persisted to the database yet");
return revisionId;
}
/** Returns the name of the reserved list. */
public String getName() {
return name;
}
/** Returns the creation time of this revision of the reserved list. */
public DateTime getCreationTime() {
return creationTime;
}
@@ -183,6 +211,9 @@ public abstract class BaseDomainLabelList<T extends Comparable<?>, R extends Dom
@Override
public T build() {
checkArgument(!isNullOrEmpty(getInstance().name), "List must have a name");
// The list is immutable in Cloud SQL, so make sure the revision id is not set when the
// builder object is created from a list object
getInstance().revisionId = null;
return super.build();
}
}
@@ -23,16 +23,20 @@ import com.google.common.net.InternetDomainName;
import com.googlecode.objectify.annotation.Id;
import google.registry.model.Buildable.GenericBuilder;
import google.registry.model.ImmutableObject;
import javax.persistence.Column;
import javax.persistence.MappedSuperclass;
/**
* Represents a label entry parsed from a line in a reserved/premium list txt file.
*
* @param <T> The type of the value stored for the domain label, e.g. {@link ReservationType}.
*/
@MappedSuperclass
public abstract class DomainLabelEntry<T extends Comparable<?>, D extends DomainLabelEntry<?, ?>>
extends ImmutableObject implements Comparable<D> {
@Id
@Column(name = "domain_label", insertable = false, updatable = false)
String label;
String comment;
@@ -16,11 +16,8 @@ package google.registry.model.registry.label;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.collect.ImmutableMap.toImmutableMap;
import static com.google.common.collect.ImmutableSet.toImmutableSet;
import static google.registry.config.RegistryConfig.getDomainLabelListCacheDuration;
import static google.registry.model.common.EntityGroupRoot.getCrossTldKey;
import static google.registry.model.ofy.ObjectifyService.ofy;
import static google.registry.model.registry.label.ReservationType.FULLY_BLOCKED;
import static google.registry.util.CollectionUtils.nullToEmpty;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
@@ -30,12 +27,8 @@ import com.google.common.base.Splitter;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.MapDifference;
import com.google.common.collect.Maps;
import com.google.common.flogger.FluentLogger;
import com.google.common.util.concurrent.UncheckedExecutionException;
import com.googlecode.objectify.Key;
import com.googlecode.objectify.annotation.Embed;
@@ -45,45 +38,58 @@ import com.googlecode.objectify.mapper.Mapper;
import google.registry.model.Buildable;
import google.registry.model.registry.Registry;
import google.registry.model.registry.label.DomainLabelMetrics.MetricsReservedListMatch;
import google.registry.schema.replay.DatastoreEntity;
import google.registry.schema.replay.SqlEntity;
import google.registry.schema.tld.ReservedList.ReservedEntry;
import google.registry.schema.tld.ReservedListDao;
import google.registry.schema.replay.DatastoreAndSqlEntity;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
import javax.annotation.Nullable;
import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Embeddable;
import javax.persistence.Index;
import javax.persistence.JoinColumn;
import javax.persistence.MapKeyColumn;
import javax.persistence.Table;
import org.joda.time.DateTime;
/**
* A reserved list entity, persisted to Datastore, that is used to check domain label reservations.
* A list of reserved domain labels that are blocked from being registered for various reasons.
*
* <p>Note that the primary key of this entity is {@link #revisionId}, which is auto-generated by
* the database. So, if a retry of insertion happens after the previous attempt unexpectedly
* succeeds, we will end up with having two exact same reserved lists that differ only by
* revisionId. This is fine though, because we only use the list with the highest revisionId.
*/
@Entity
@javax.persistence.Entity
@Table(indexes = {@Index(columnList = "name", name = "reservedlist_name_idx")})
public final class ReservedList
extends BaseDomainLabelList<ReservationType, ReservedList.ReservedListEntry>
implements DatastoreEntity {
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
implements DatastoreAndSqlEntity {
@Mapify(ReservedListEntry.LabelMapper.class)
@ElementCollection
@CollectionTable(
name = "ReservedEntry",
joinColumns = @JoinColumn(name = "revisionId", referencedColumnName = "revisionId"))
@MapKeyColumn(name = "domain_label")
Map<String, ReservedListEntry> reservedListMap;
@Column(nullable = false)
boolean shouldPublish = true;
@Override
public ImmutableList<SqlEntity> toSqlEntities() {
return ImmutableList.of(); // ReservedList is dual-written
}
/**
* A reserved list entry entity, persisted to Datastore, that represents a single label and its
* reservation type.
*/
@Embed
public static class ReservedListEntry
extends DomainLabelEntry<ReservationType, ReservedListEntry> implements Buildable {
@Embeddable
public static class ReservedListEntry extends DomainLabelEntry<ReservationType, ReservedListEntry>
implements Buildable {
@Column(nullable = false)
ReservationType reservationType;
/** Mapper for use with @Mapify */
@@ -150,6 +156,7 @@ public final class ReservedList
return shouldPublish;
}
/** Returns a {@link Map} of domain labels to {@link ReservedListEntry}. */
public ImmutableMap<String, ReservedListEntry> getReservedListEntries() {
return ImmutableMap.copyOf(nullToEmpty(reservedListMap));
}
@@ -239,65 +246,10 @@ public final class ReservedList
new CacheLoader<String, ReservedList>() {
@Override
public ReservedList load(String listName) {
ReservedList datastoreList =
ofy()
.load()
.type(ReservedList.class)
.parent(getCrossTldKey())
.id(listName)
.now();
// Also load the list from Cloud SQL, compare the two lists, and log if different.
try {
loadAndCompareCloudSqlList(datastoreList);
} catch (Throwable t) {
logger.atSevere().withCause(t).log("Error comparing reserved lists.");
}
return datastoreList;
return ReservedListDualWriteDao.getLatestRevision(listName).orElse(null);
}
});
private static final void loadAndCompareCloudSqlList(ReservedList datastoreList) {
Optional<google.registry.schema.tld.ReservedList> maybeCloudSqlList =
ReservedListDao.getLatestRevision(datastoreList.getName());
if (maybeCloudSqlList.isPresent()) {
Map<String, ReservedEntry> datastoreLabelsToReservations =
datastoreList.reservedListMap.entrySet().parallelStream()
.collect(
toImmutableMap(
Map.Entry::getKey,
entry ->
ReservedEntry.create(
entry.getValue().reservationType, entry.getValue().comment)));
google.registry.schema.tld.ReservedList cloudSqlList = maybeCloudSqlList.get();
MapDifference<String, ReservedEntry> diff =
Maps.difference(datastoreLabelsToReservations, cloudSqlList.getLabelsToReservations());
if (!diff.areEqual()) {
if (diff.entriesDiffering().size() > 10) {
logger.atWarning().log(
String.format(
"Unequal reserved lists detected, Cloud SQL list with revision"
+ " id %d has %d different records than the current"
+ " Datastore list.",
cloudSqlList.getRevisionId(), diff.entriesDiffering().size()));
} else {
StringBuilder diffMessage = new StringBuilder("Unequal reserved lists detected:\n");
diff.entriesDiffering()
.forEach(
(label, valueDiff) ->
diffMessage.append(
String.format(
"Domain label %s has entry %s in Datastore and entry"
+ " %s in Cloud SQL.\n",
label, valueDiff.leftValue(), valueDiff.rightValue())));
logger.atWarning().log(diffMessage.toString());
}
}
} else {
logger.atWarning().log("Reserved list in Cloud SQL is empty.");
}
}
/**
* Gets the {@link ReservationType} of a label in a single ReservedList, or returns an absent
* Optional if none exists in the list.
@@ -0,0 +1,124 @@
// Copyright 2020 The Nomulus Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package google.registry.model.registry.label;
import static com.google.common.collect.ImmutableMap.toImmutableMap;
import static google.registry.model.common.EntityGroupRoot.getCrossTldKey;
import static google.registry.persistence.transaction.TransactionManagerFactory.ofyTm;
import com.google.common.collect.MapDifference;
import com.google.common.collect.MapDifference.ValueDifference;
import com.google.common.collect.Maps;
import com.google.common.flogger.FluentLogger;
import com.googlecode.objectify.Key;
import google.registry.model.registry.label.ReservedList.ReservedListEntry;
import google.registry.persistence.VKey;
import java.util.Map;
import java.util.Optional;
/**
* A {@link ReservedList} DAO that does dual-write and dual-read against Datastore and Cloud SQL. It
* still uses Datastore as the primary storage and suppresses any exception thrown by Cloud SQL.
*
* <p>TODO(b/160993806): Delete this DAO and switch to use the SQL only DAO after migrating to Cloud
* SQL.
*/
public class ReservedListDualWriteDao {
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
private ReservedListDualWriteDao() {}
/** Persist a new reserved list to Cloud SQL. */
public static void save(ReservedList reservedList) {
ofyTm().transact(() -> ofyTm().saveNewOrUpdate(reservedList));
try {
logger.atInfo().log("Saving reserved list %s to Cloud SQL", reservedList.getName());
ReservedListSqlDao.save(reservedList);
logger.atInfo().log(
"Saved reserved list %s with %d entries to Cloud SQL",
reservedList.getName(), reservedList.getReservedListEntries().size());
} catch (Throwable t) {
logger.atSevere().withCause(t).log("Error saving the reserved list to Cloud SQL.");
}
}
/**
* Returns the most recent revision of the {@link ReservedList} with the specified name, if it
* exists.
*/
public static Optional<ReservedList> getLatestRevision(String reservedListName) {
Optional<ReservedList> maybeDatastoreList =
ofyTm()
.maybeLoad(
VKey.createOfy(
ReservedList.class,
Key.create(getCrossTldKey(), ReservedList.class, reservedListName)));
try {
// Also load the list from Cloud SQL, compare the two lists, and log if different.
maybeDatastoreList.ifPresent(ReservedListDualWriteDao::loadAndCompareCloudSqlList);
} catch (Throwable t) {
logger.atSevere().withCause(t).log("Error comparing reserved lists.");
}
return maybeDatastoreList;
}
private static void loadAndCompareCloudSqlList(ReservedList datastoreList) {
Optional<ReservedList> maybeCloudSqlList =
ReservedListSqlDao.getLatestRevision(datastoreList.getName());
if (maybeCloudSqlList.isPresent()) {
Map<String, ReservedListEntry> datastoreLabelsToReservations =
datastoreList.reservedListMap.entrySet().parallelStream()
.collect(
toImmutableMap(
Map.Entry::getKey,
entry ->
ReservedListEntry.create(
entry.getKey(),
entry.getValue().reservationType,
entry.getValue().comment)));
ReservedList cloudSqlList = maybeCloudSqlList.get();
MapDifference<String, ReservedListEntry> diff =
Maps.difference(datastoreLabelsToReservations, cloudSqlList.reservedListMap);
if (!diff.areEqual()) {
if (diff.entriesDiffering().size() > 10) {
logger.atWarning().log(
String.format(
"Unequal reserved lists detected, Cloud SQL list with revision"
+ " id %d has %d different records than the current"
+ " Datastore list.",
cloudSqlList.getRevisionId(), diff.entriesDiffering().size()));
} else {
StringBuilder diffMessage = new StringBuilder("Unequal reserved lists detected:\n");
diff.entriesDiffering().entrySet().stream()
.forEach(
entry -> {
String label = entry.getKey();
ValueDifference<ReservedListEntry> valueDiff = entry.getValue();
diffMessage.append(
String.format(
"Domain label %s has entry %s in Datastore and entry"
+ " %s in Cloud SQL.\n",
label, valueDiff.leftValue(), valueDiff.rightValue()));
});
logger.atWarning().log(diffMessage.toString());
}
}
} else {
logger.atWarning().log("Reserved list in Cloud SQL is empty.");
}
}
}
@@ -12,20 +12,46 @@
// See the License for the specific language governing permissions and
// limitations under the License.
package google.registry.schema.tld;
package google.registry.model.registry.label;
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
import static google.registry.util.PreconditionsUtils.checkArgumentNotNull;
import com.google.common.util.concurrent.UncheckedExecutionException;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
/** Data access object class for {@link ReservedList} */
public class ReservedListDao {
/**
* A {@link ReservedList} DAO for Cloud SQL.
*
* <p>TODO(b/160993806): Rename this class to ReservedListDao after migrating to Cloud SQL.
*/
public class ReservedListSqlDao {
private ReservedListSqlDao() {}
/** Persist a new reserved list to Cloud SQL. */
public static void save(ReservedList reservedList) {
jpaTm().transact(() -> jpaTm().getEntityManager().persist(reservedList));
checkArgumentNotNull(reservedList, "Must specify reservedList");
jpaTm().transact(() -> jpaTm().saveNew(reservedList));
}
/**
* Returns the most recent revision of the {@link ReservedList} with the specified name, if it
* exists.
*/
public static Optional<ReservedList> getLatestRevision(String reservedListName) {
return jpaTm()
.transact(
() ->
jpaTm()
.getEntityManager()
.createQuery(
"FROM ReservedList rl LEFT JOIN FETCH rl.reservedListMap WHERE"
+ " rl.revisionId IN (SELECT MAX(revisionId) FROM ReservedList subrl"
+ " WHERE subrl.name = :name)",
ReservedList.class)
.setParameter("name", reservedListName)
.getResultStream()
.findFirst());
}
/**
@@ -46,39 +72,4 @@ public class ReservedListDao {
.size()
> 0);
}
/**
* Returns the most recent revision of the {@link ReservedList} with the specified name, if it
* exists. TODO(shicong): Change this method to package level access after dual-read phase.
*/
public static Optional<ReservedList> getLatestRevision(String reservedListName) {
return jpaTm()
.transact(
() ->
jpaTm()
.getEntityManager()
.createQuery(
"FROM ReservedList rl LEFT JOIN FETCH rl.labelsToReservations WHERE"
+ " rl.revisionId IN (SELECT MAX(revisionId) FROM ReservedList subrl"
+ " WHERE subrl.name = :name)",
ReservedList.class)
.setParameter("name", reservedListName)
.getResultStream()
.findFirst());
}
/**
* Returns the most recent revision of the {@link ReservedList} with the specified name, from
* cache.
*/
public static Optional<ReservedList> getLatestRevisionCached(String reservedListName) {
try {
return ReservedListCache.cacheReservedLists.get(reservedListName);
} catch (ExecutionException e) {
throw new UncheckedExecutionException(
"Could not retrieve reserved list named " + reservedListName, e);
}
}
private ReservedListDao() {}
}
@@ -58,6 +58,31 @@ public class VKey<T> extends ImmutableObject implements Serializable {
return new VKey(kind, null, sqlKey);
}
/** Creates a {@link VKey} which only contains the ofy primary key. */
public static <T> VKey<T> createOfy(
Class<? extends T> kind, com.googlecode.objectify.Key<? extends T> ofyKey) {
checkArgumentNotNull(kind, "kind must not be null");
checkArgumentNotNull(ofyKey, "ofyKey must not be null");
return new VKey(kind, ofyKey, null);
}
/**
* Creates a {@link VKey} which only contains the ofy primary key by specifying the id of the
* {@link Key}.
*/
public static <T> VKey<T> createOfy(Class<? extends T> kind, long id) {
return createOfy(kind, Key.create(kind, id));
}
/**
* Creates a {@link VKey} which only contains the ofy primary key by specifying the name of the
* {@link Key}.
*/
public static <T> VKey<T> createOfy(Class<? extends T> kind, String name) {
checkArgumentNotNull(kind, "name must not be null");
return createOfy(kind, Key.create(kind, name));
}
/** Creates a {@link VKey} which only contains both sql and ofy primary key. */
public static <T> VKey<T> create(
Class<? extends T> kind, Object sqlKey, com.googlecode.objectify.Key ofyKey) {
@@ -25,4 +25,11 @@ public interface JpaTransactionManager extends TransactionManager {
/** Deletes the entity by its id, throws exception if the entity is not deleted. */
public abstract <T> void assertDelete(VKey<T> key);
/**
* Releases all resources and shuts down.
*
* <p>The errorprone check forbids injection of {@link java.io.Closeable} resources.
*/
void teardown();
}
@@ -62,6 +62,11 @@ public class JpaTransactionManagerImpl implements JpaTransactionManager {
this.clock = clock;
}
@Override
public void teardown() {
emf.close();
}
@Override
public EntityManager getEntityManager() {
if (transactionInfo.get().entityManager == null) {
@@ -75,7 +75,12 @@ public class TransactionManagerFactory {
return tm;
}
/** Returns {@link JpaTransactionManager} instance. */
/**
* Returns {@link JpaTransactionManager} instance.
*
* <p>Between invocations of {@link TransactionManagerFactory#setJpaTm} every call to this method
* returns the same instance.
*/
public static JpaTransactionManager jpaTm() {
return jpaTm.get();
}
@@ -93,7 +98,7 @@ public class TransactionManagerFactory {
RegistryEnvironment.get().equals(RegistryEnvironment.UNITTEST)
|| RegistryToolEnvironment.get() != null,
"setJpamTm() should only be called by tools and tests.");
jpaTm = jpaTmSupplier;
jpaTm = Suppliers.memoize(jpaTmSupplier::get);
}
/** Sets the return of {@link #tm()} to the given instance of {@link TransactionManager}. */
@@ -1,177 +0,0 @@
// Copyright 2019 The Nomulus Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package google.registry.schema.tld;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkState;
import static com.google.common.collect.ImmutableList.sortedCopyOf;
import static com.google.common.collect.ImmutableList.toImmutableList;
import static google.registry.util.DomainNameUtils.canonicalizeDomainName;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import google.registry.model.CreateAutoTimestamp;
import google.registry.model.ImmutableObject;
import google.registry.model.registry.label.ReservationType;
import google.registry.schema.replay.DatastoreEntity;
import google.registry.schema.replay.SqlEntity;
import java.util.Map;
import java.util.stream.Stream;
import javax.annotation.Nullable;
import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Embeddable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Index;
import javax.persistence.JoinColumn;
import javax.persistence.MapKeyColumn;
import javax.persistence.Table;
import org.joda.time.DateTime;
/**
* A list of reserved domain labels that are blocked from being registered for various reasons.
*
* <p>Note that the primary key of this entity is {@link #revisionId}, which is auto-generated by
* the database. So, if a retry of insertion happens after the previous attempt unexpectedly
* succeeds, we will end up with having two exact same reserved lists that differ only by
* revisionId. This is fine though, because we only use the list with the highest revisionId.
*/
@Entity
@Table(indexes = {@Index(columnList = "name", name = "reservedlist_name_idx")})
public class ReservedList extends ImmutableObject implements SqlEntity {
@Column(nullable = false)
private String name;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(nullable = false)
private Long revisionId;
@Column(nullable = false)
private CreateAutoTimestamp creationTimestamp = CreateAutoTimestamp.create(null);
@Column(nullable = false)
private Boolean shouldPublish;
@ElementCollection
@CollectionTable(
name = "ReservedEntry",
joinColumns = @JoinColumn(name = "revisionId", referencedColumnName = "revisionId"))
@MapKeyColumn(name = "domainLabel")
private Map<String, ReservedEntry> labelsToReservations;
@Override
public ImmutableList<DatastoreEntity> toDatastoreEntities() {
return ImmutableList.of(); // ReservedList is dual-written\
}
@Embeddable
public static class ReservedEntry extends ImmutableObject {
@Column(nullable = false)
private ReservationType reservationType;
@Column(nullable = true)
private String comment;
private ReservedEntry(ReservationType reservationType, @Nullable String comment) {
this.reservationType = reservationType;
this.comment = comment;
}
// Hibernate requires this default constructor.
private ReservedEntry() {}
/** Constructs a {@link ReservedEntry} object. */
public static ReservedEntry create(ReservationType reservationType, @Nullable String comment) {
return new ReservedEntry(reservationType, comment);
}
/** Returns the reservation type for this entry. */
public ReservationType getReservationType() {
return reservationType;
}
/** Returns the comment for this entry. Retruns null if there is no comment. */
public String getComment() {
return comment;
}
}
private ReservedList(
String name, Boolean shouldPublish, Map<String, ReservedEntry> labelsToReservations) {
this.name = name;
this.shouldPublish = shouldPublish;
this.labelsToReservations = labelsToReservations;
}
// Hibernate requires this default constructor.
private ReservedList() {}
/** Constructs a {@link ReservedList} object. */
public static ReservedList create(
String name, Boolean shouldPublish, Map<String, ReservedEntry> labelsToReservations) {
ImmutableList<String> invalidLabels =
labelsToReservations.entrySet().parallelStream()
.flatMap(
entry -> {
String label = entry.getKey();
if (label.equals(canonicalizeDomainName(label))) {
return Stream.empty();
} else {
return Stream.of(label);
}
})
.collect(toImmutableList());
checkArgument(
invalidLabels.isEmpty(),
"Label(s) [%s] must be in puny-coded, lower-case form",
Joiner.on(",").join(sortedCopyOf(invalidLabels)));
return new ReservedList(name, shouldPublish, labelsToReservations);
}
/** Returns the name of the reserved list. */
public String getName() {
return name;
}
/** Returns the ID of this revision, or throws if null. */
public Long getRevisionId() {
checkState(
revisionId != null,
"revisionId is null because this object has not been persisted to the database yet");
return revisionId;
}
/** Returns the creation time of this revision of the reserved list. */
public DateTime getCreationTimestamp() {
return creationTimestamp.getTimestamp();
}
/** Returns a {@link Map} of domain labels to {@link ReservedEntry}. */
public ImmutableMap<String, ReservedEntry> getLabelsToReservations() {
return ImmutableMap.copyOf(labelsToReservations);
}
/** Returns true if the reserved list should be published. */
public Boolean getShouldPublish() {
return shouldPublish;
}
}
@@ -1,54 +0,0 @@
// Copyright 2019 The Nomulus Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package google.registry.schema.tld;
import static google.registry.config.RegistryConfig.getDomainLabelListCacheDuration;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import google.registry.util.NonFinalForTesting;
import java.util.Optional;
import org.joda.time.Duration;
/** Caching utils for {@link ReservedList} */
public class ReservedListCache {
/**
* In-memory cache for reserved lists.
*
* <p>This is cached for a shorter duration because we need to periodically reload from the DB to
* check if a new revision has been published, and if so, then use that.
*/
@NonFinalForTesting
static LoadingCache<String, Optional<ReservedList>> cacheReservedLists =
createCacheReservedLists(getDomainLabelListCacheDuration());
@VisibleForTesting
static LoadingCache<String, Optional<ReservedList>> createCacheReservedLists(
Duration cachePersistDuration) {
return CacheBuilder.newBuilder()
.expireAfterWrite(cachePersistDuration.getMillis(), MILLISECONDS)
.build(
new CacheLoader<String, Optional<ReservedList>>() {
@Override
public Optional<ReservedList> load(String reservedListName) {
return ReservedListDao.getLatestRevision(reservedListName);
}
});
}
}
@@ -14,23 +14,12 @@
package google.registry.tools;
import static com.google.common.base.Preconditions.checkArgument;
import static google.registry.model.registry.label.BaseDomainLabelList.splitOnComment;
import static google.registry.util.DomainNameUtils.canonicalizeDomainName;
import com.beust.jcommander.Parameter;
import com.google.common.base.Splitter;
import com.google.common.collect.HashMultiset;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import com.google.common.collect.Multiset;
import com.google.common.flogger.FluentLogger;
import google.registry.model.registry.label.ReservationType;
import google.registry.schema.tld.ReservedList.ReservedEntry;
import google.registry.model.registry.label.ReservedList;
import google.registry.model.registry.label.ReservedListDualWriteDao;
import google.registry.tools.params.PathParameter;
import java.nio.file.Path;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
/**
@@ -62,69 +51,22 @@ public abstract class CreateOrUpdateReservedListCommand extends MutatingCommand
arity = 1)
Boolean shouldPublish;
google.registry.schema.tld.ReservedList cloudSqlReservedList;
abstract void saveToCloudSql();
ReservedList reservedList;
@Override
protected String execute() throws Exception {
// Save the list to Datastore and output its response.
String output = super.execute();
logger.atInfo().log(output);
String cloudSqlMessage =
protected String execute() {
String message =
String.format(
"Saved reserved list %s with %d entries",
name, cloudSqlReservedList.getLabelsToReservations().size());
name, reservedList.getReservedListEntries().size());
try {
logger.atInfo().log("Saving reserved list to Cloud SQL for TLD %s", name);
saveToCloudSql();
logger.atInfo().log(cloudSqlMessage);
logger.atInfo().log("Saving reserved list for TLD %s", name);
ReservedListDualWriteDao.save(reservedList);
logger.atInfo().log(message);
} catch (Throwable e) {
cloudSqlMessage =
"Unexpected error saving reserved list to Cloud SQL from nomulus tool command";
logger.atSevere().withCause(e).log(cloudSqlMessage);
message = "Unexpected error saving reserved list from nomulus tool command";
logger.atSevere().withCause(e).log(message);
}
return cloudSqlMessage;
}
/** Turns the list CSV data into a map of labels to {@link ReservedEntry}. */
static ImmutableMap<String, ReservedEntry> parseToReservationsByLabels(Iterable<String> lines) {
Map<String, ReservedEntry> labelsToEntries = Maps.newHashMap();
Multiset<String> duplicateLabels = HashMultiset.create();
for (String originalLine : lines) {
List<String> lineAndComment = splitOnComment(originalLine);
if (lineAndComment.isEmpty()) {
continue;
}
String line = lineAndComment.get(0);
String comment = lineAndComment.get(1);
List<String> parts = Splitter.on(',').trimResults().splitToList(line);
checkArgument(
parts.size() == 2 || parts.size() == 3,
"Could not parse line in reserved list: %s",
originalLine);
String label = parts.get(0);
checkArgument(
label.equals(canonicalizeDomainName(label)),
"Label '%s' must be in puny-coded, lower-case form",
label);
ReservationType reservationType = ReservationType.valueOf(parts.get(1));
ReservedEntry reservedEntry = ReservedEntry.create(reservationType, comment);
// Check if the label was already processed for this list (which is an error), and if so,
// accumulate it so that a list of all duplicates can be thrown.
if (labelsToEntries.containsKey(label)) {
duplicateLabels.add(label, duplicateLabels.contains(label) ? 1 : 2);
} else {
labelsToEntries.put(label, reservedEntry);
}
}
if (!duplicateLabels.isEmpty()) {
throw new IllegalStateException(
String.format(
"Reserved list cannot contain duplicate labels. Dupes (with counts) were: %s",
duplicateLabels));
}
return ImmutableMap.copyOf(labelsToEntries);
return message;
}
}
@@ -16,7 +16,6 @@ package google.registry.tools;
import static com.google.common.base.Preconditions.checkArgument;
import static google.registry.model.registry.Registries.assertTldExists;
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
import static google.registry.util.ListNamingUtils.convertFilePathToName;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.joda.time.DateTimeZone.UTC;
@@ -27,7 +26,6 @@ import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Splitter;
import com.google.common.base.Strings;
import google.registry.model.registry.label.ReservedList;
import google.registry.schema.tld.ReservedListDao;
import java.nio.file.Files;
import java.util.List;
import org.joda.time.DateTime;
@@ -50,15 +48,14 @@ final class CreateReservedListCommand extends CreateOrUpdateReservedListCommand
protected void init() throws Exception {
name = Strings.isNullOrEmpty(name) ? convertFilePathToName(input) : name;
checkArgument(
!ReservedList.get(name).isPresent(),
"A reserved list already exists by this name");
!ReservedList.get(name).isPresent(), "A reserved list already exists by this name");
if (!override) {
validateListName(name);
}
DateTime now = DateTime.now(UTC);
List<String> allLines = Files.readAllLines(input, UTF_8);
boolean shouldPublish = this.shouldPublish == null || this.shouldPublish;
ReservedList reservedList =
reservedList =
new ReservedList.Builder()
.setName(name)
.setReservedListMapFromLines(allLines)
@@ -66,23 +63,6 @@ final class CreateReservedListCommand extends CreateOrUpdateReservedListCommand
.setCreationTime(now)
.setLastUpdateTime(now)
.build();
stageEntityChange(null, reservedList);
cloudSqlReservedList =
google.registry.schema.tld.ReservedList.create(
name, shouldPublish, parseToReservationsByLabels(allLines));
}
@Override
void saveToCloudSql() {
jpaTm()
.transact(
() -> {
checkArgument(
!ReservedListDao.checkExists(cloudSqlReservedList.getName()),
"A reserved list of this name already exists: %s.",
cloudSqlReservedList.getName());
ReservedListDao.save(cloudSqlReservedList);
});
}
private static void validateListName(String name) {
@@ -15,18 +15,17 @@
package google.registry.tools;
import static com.google.common.base.Preconditions.checkArgument;
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
import static google.registry.util.ListNamingUtils.convertFilePathToName;
import static java.nio.charset.StandardCharsets.UTF_8;
import com.beust.jcommander.Parameters;
import com.google.common.base.Strings;
import google.registry.model.registry.label.ReservedList;
import google.registry.schema.tld.ReservedListDao;
import google.registry.util.SystemClock;
import java.nio.file.Files;
import java.util.List;
import java.util.Optional;
import org.joda.time.DateTime;
/** Command to safely update {@link ReservedList} on Datastore. */
@Parameters(separators = " =", commandDescription = "Update a ReservedList in Datastore.")
@@ -35,42 +34,20 @@ final class UpdateReservedListCommand extends CreateOrUpdateReservedListCommand
@Override
protected void init() throws Exception {
name = Strings.isNullOrEmpty(name) ? convertFilePathToName(input) : name;
// TODO(shicong): Read existing entry from Cloud SQL
Optional<ReservedList> existing = ReservedList.get(name);
checkArgument(
existing.isPresent(), "Could not update reserved list %s because it doesn't exist.", name);
boolean shouldPublish =
this.shouldPublish == null ? existing.get().getShouldPublish() : this.shouldPublish;
List<String> allLines = Files.readAllLines(input, UTF_8);
DateTime now = new SystemClock().nowUtc();
ReservedList.Builder updated =
existing
.get()
.asBuilder()
.setReservedListMapFromLines(allLines)
.setLastUpdateTime(new SystemClock().nowUtc())
.setLastUpdateTime(now)
.setShouldPublish(shouldPublish);
stageEntityChange(existing.get(), updated.build());
cloudSqlReservedList =
google.registry.schema.tld.ReservedList.create(
name, shouldPublish, parseToReservationsByLabels(allLines));
}
@Override
void saveToCloudSql() {
jpaTm()
.transact(
() -> {
// This check is currently disabled because, during the Cloud SQL migration, we need
// to be able to update reserved lists in Datastore while simultaneously creating
// their first revision in Cloud SQL (i.e. if they haven't been migrated over yet).
// TODO(shicong): Re-instate this once all reserved lists are migrated to Cloud SQL,
// and add a unit test to verity that an exception will be thrown if
// the reserved list doesn't exist.
// checkArgument(
// ReservedListDao.checkExists(cloudSqlReservedList.getName()),
// "A reserved list of this name doesn't exist: %s.",
// cloudSqlReservedList.getName());
ReservedListDao.save(cloudSqlReservedList);
});
reservedList = updated.build();
}
}
@@ -36,12 +36,12 @@
<class>google.registry.schema.server.Lock</class>
<class>google.registry.schema.tld.PremiumList</class>
<class>google.registry.schema.tld.PremiumEntry</class>
<class>google.registry.schema.tld.ReservedList</class>
<class>google.registry.model.domain.secdns.DelegationSignerData</class>
<class>google.registry.model.domain.GracePeriod</class>
<class>google.registry.model.poll.PollMessage</class>
<class>google.registry.model.poll.PollMessage$OneTime</class>
<class>google.registry.model.poll.PollMessage$Autorenew</class>
<class>google.registry.model.registry.label.ReservedList</class>
<!-- Customized type converters -->
<class>google.registry.persistence.converter.BillingCostTransitionConverter</class>
@@ -43,7 +43,6 @@ import google.registry.testing.AppEngineRule;
import google.registry.testing.FakeClock;
import google.registry.testing.FakeSleeper;
import google.registry.testing.InjectRule;
import google.registry.testing.ShardableTestCase;
import google.registry.testing.TaskQueueHelper.TaskMatcher;
import google.registry.util.AppEngineServiceUtils;
import google.registry.util.CapturingLogHandler;
@@ -62,7 +61,7 @@ import org.mockito.junit.MockitoRule;
/** Unit tests for {@link AsyncTaskEnqueuer}. */
@RunWith(JUnit4.class)
public class AsyncTaskEnqueuerTest extends ShardableTestCase {
public class AsyncTaskEnqueuerTest {
@Rule
public final AppEngineRule appEngine =
@@ -21,14 +21,13 @@ import static google.registry.batch.AsyncTaskMetrics.OperationType.CONTACT_AND_H
import com.google.common.collect.ImmutableSet;
import google.registry.testing.FakeClock;
import google.registry.testing.ShardableTestCase;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
/** Unit tests for {@link AsyncTaskMetrics}. */
@RunWith(JUnit4.class)
public class AsyncTaskMetricsTest extends ShardableTestCase {
public class AsyncTaskMetricsTest {
private final FakeClock clock = new FakeClock();
private final AsyncTaskMetrics asyncTaskMetrics = new AsyncTaskMetrics(clock);
@@ -45,7 +45,6 @@ import google.registry.request.Response;
import google.registry.testing.AppEngineRule;
import google.registry.testing.FakeClock;
import google.registry.testing.InjectRule;
import google.registry.testing.ShardableTestCase;
import google.registry.testing.TaskQueueHelper.TaskMatcher;
import google.registry.util.AppEngineServiceUtils;
import org.joda.time.DateTime;
@@ -61,7 +60,7 @@ import org.mockito.junit.MockitoRule;
/** Unit tests for {@link ResaveEntityAction}. */
@RunWith(JUnit4.class)
public class ResaveEntityActionTest extends ShardableTestCase {
public class ResaveEntityActionTest {
@Rule
public final AppEngineRule appEngine =
@@ -18,6 +18,7 @@ import static com.google.common.truth.Truth.assertThat;
import google.registry.persistence.NomulusPostgreSql;
import google.registry.persistence.transaction.JpaTransactionManager;
import google.registry.testing.DatastoreEntityExtension;
import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
@@ -26,6 +27,7 @@ import org.apache.beam.sdk.options.PipelineOptionsFactory;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledIfSystemProperty;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.junit.jupiter.api.io.TempDir;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.junit.jupiter.Container;
@@ -38,6 +40,9 @@ public class BeamJpaModuleTest {
@Container
public PostgreSQLContainer database = new PostgreSQLContainer(NomulusPostgreSql.getDockerTag());
@RegisterExtension
public DatastoreEntityExtension datastoreEntityExtension = new DatastoreEntityExtension();
@TempDir File tempFolder;
private File credentialFile;
@@ -51,7 +56,7 @@ public class BeamJpaModuleTest {
}
@Test
public void getJpaTransactionManager_local() {
void getJpaTransactionManager_local() {
JpaTransactionManager jpa =
DaggerBeamJpaModule_JpaTransactionManagerComponent.builder()
.beamJpaModule(new BeamJpaModule(credentialFile.getAbsolutePath()))
@@ -173,6 +173,7 @@ public class ExportloadingTransformsTest implements Serializable {
}
@Test
@Category(NeedsRunner.class)
public void loadDataFromFiles() {
PCollection<VersionedEntity> entities =
pipeline
@@ -31,6 +31,7 @@ import google.registry.model.registry.Registry;
import google.registry.testing.FakeClock;
import google.registry.testing.InjectRule;
import java.io.File;
import org.apache.beam.sdk.testing.NeedsRunner;
import org.apache.beam.sdk.testing.TestPipeline;
import org.apache.beam.sdk.values.KV;
import org.apache.beam.sdk.values.PCollectionTuple;
@@ -38,6 +39,7 @@ import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.rules.TemporaryFolder;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@@ -152,6 +154,7 @@ public class LoadDatastoreSnapshotTest {
}
@Test
@Category(NeedsRunner.class)
public void loadDatastoreSnapshot() {
PCollectionTuple snapshot =
pipeline.apply(
@@ -0,0 +1,125 @@
// Copyright 2020 The Nomulus Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package google.registry.beam.initsql;
import static com.google.common.truth.Truth.assertThat;
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
import com.google.appengine.api.datastore.Entity;
import com.google.common.collect.ImmutableList;
import google.registry.backup.VersionedEntity;
import google.registry.model.contact.ContactResource;
import google.registry.model.ofy.Ofy;
import google.registry.model.registrar.Registrar;
import google.registry.persistence.transaction.JpaTestRules;
import google.registry.persistence.transaction.JpaTestRules.JpaIntegrationTestRule;
import google.registry.testing.AppEngineRule;
import google.registry.testing.DatastoreHelper;
import google.registry.testing.FakeClock;
import google.registry.testing.InjectRule;
import java.io.File;
import java.io.PrintStream;
import java.io.Serializable;
import java.util.stream.Collectors;
import org.apache.beam.sdk.testing.NeedsRunner;
import org.apache.beam.sdk.testing.TestPipeline;
import org.apache.beam.sdk.transforms.Create;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.rules.TemporaryFolder;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
/** Unit test for {@link Transforms#writeToSql}. */
@RunWith(JUnit4.class)
public class WriteToSqlTest implements Serializable {
private static final DateTime START_TIME = DateTime.parse("2000-01-01T00:00:00.0Z");
private final FakeClock fakeClock = new FakeClock(START_TIME);
@Rule public final transient InjectRule injectRule = new InjectRule();
@Rule
public transient JpaIntegrationTestRule jpaRule =
new JpaTestRules.Builder().withClock(fakeClock).buildIntegrationTestRule();
@Rule public transient TemporaryFolder temporaryFolder = new TemporaryFolder();
@Rule
public final transient TestPipeline pipeline =
TestPipeline.create().enableAbandonedNodeEnforcement(true);
private ImmutableList<Entity> contacts;
private File credentialFile;
@Before
public void beforeEach() throws Exception {
try (BackupTestStore store = new BackupTestStore(fakeClock)) {
injectRule.setStaticField(Ofy.class, "clock", fakeClock);
// Required for contacts created below.
Registrar ofyRegistrar = AppEngineRule.makeRegistrar2();
store.insertOrUpdate(ofyRegistrar);
jpaTm().transact(() -> jpaTm().saveNewOrUpdate(store.loadAsOfyEntity(ofyRegistrar)));
ImmutableList.Builder<Entity> builder = new ImmutableList.Builder<>();
for (int i = 0; i < 3; i++) {
ContactResource contact = DatastoreHelper.newContactResource("contact_" + i);
store.insertOrUpdate(contact);
builder.add(store.loadAsDatastoreEntity(contact));
}
contacts = builder.build();
}
credentialFile = temporaryFolder.newFile();
new PrintStream(credentialFile)
.printf(
"%s %s %s",
jpaRule.getDatabaseUrl(), jpaRule.getDatabaseUsername(), jpaRule.getDatabasePassword())
.close();
}
@Test
@Category(NeedsRunner.class)
public void writeToSql_twoWriters() {
pipeline
.apply(
Create.of(
contacts.stream()
.map(InitSqlTestUtils::entityToBytes)
.map(bytes -> VersionedEntity.from(0L, bytes))
.collect(Collectors.toList())))
.apply(
Transforms.writeToSql(
"ContactResource",
2,
4,
() ->
DaggerBeamJpaModule_JpaTransactionManagerComponent.builder()
.beamJpaModule(new BeamJpaModule(credentialFile.getAbsolutePath()))
.build()
.localDbJpaTransactionManager()));
pipeline.run().waitUntilFinish();
ImmutableList<?> sqlContacts = jpaTm().transact(() -> jpaTm().loadAll(ContactResource.class));
// TODO(weiminyu): compare load entities with originals. Note: lastUpdateTimes won't match by
// design. Need an elegant way to deal with this.bbq
assertThat(sqlContacts).hasSize(3);
}
}
@@ -132,8 +132,9 @@ public class BillingEventTest {
public void testConvertBillingEvent_toCsv() {
BillingEvent event = BillingEvent.parseFromRecord(schemaAndRecord);
assertThat(event.toCsv())
.isEqualTo("1,2017-10-24 09:06:03 UTC,2017-01-19 23:59:43 UTC,myRegistrar,"
+ "12345-CRRHELLO,,test,RENEW,example.test,123456,5,USD,20.50,AUTO_RENEW");
.isEqualTo(
"1,2017-10-24 09:06:03 UTC,2017-01-19 23:59:43 UTC,myRegistrar,"
+ "12345-CRRHELLO,,test,RENEW,example.test,123456,5,USD,20.50,AUTO_RENEW");
}
@Test
@@ -142,8 +143,9 @@ public class BillingEventTest {
record.put("poNumber", "905610");
BillingEvent event = BillingEvent.parseFromRecord(new SchemaAndRecord(record, null));
assertThat(event.toCsv())
.isEqualTo("1,2017-10-24 09:06:03 UTC,2017-01-19 23:59:43 UTC,myRegistrar,"
+ "12345-CRRHELLO,905610,test,RENEW,example.test,123456,5,USD,20.50,AUTO_RENEW");
.isEqualTo(
"1,2017-10-24 09:06:03 UTC,2017-01-19 23:59:43 UTC,myRegistrar,"
+ "12345-CRRHELLO,905610,test,RENEW,example.test,123456,5,USD,20.50,AUTO_RENEW");
}
@Test
@@ -81,21 +81,21 @@ public class Spec11PipelineTest {
@Rule public final transient TestPipeline p = TestPipeline.fromOptions(pipelineOptions);
@Rule public final TemporaryFolder tempFolder = new TemporaryFolder();
private final Retrier retrier = new Retrier(
new FakeSleeper(new FakeClock(DateTime.parse("2019-07-15TZ"))), 1);
private final Retrier retrier =
new Retrier(new FakeSleeper(new FakeClock(DateTime.parse("2019-07-15TZ"))), 1);
private Spec11Pipeline spec11Pipeline;
@Before
public void initializePipeline() throws IOException {
File beamTempFolder = tempFolder.newFolder();
spec11Pipeline = new Spec11Pipeline(
"test-project",
beamTempFolder.getAbsolutePath() + "/staging",
beamTempFolder.getAbsolutePath() + "/templates/invoicing",
tempFolder.getRoot().getAbsolutePath(),
GoogleCredentialsBundle.create(GoogleCredentials.create(null)),
retrier
);
spec11Pipeline =
new Spec11Pipeline(
"test-project",
beamTempFolder.getAbsolutePath() + "/staging",
beamTempFolder.getAbsolutePath() + "/templates/invoicing",
tempFolder.getRoot().getAbsolutePath(),
GoogleCredentialsBundle.create(GoogleCredentials.create(null)),
retrier);
}
private static final ImmutableList<String> BAD_DOMAINS =
@@ -107,13 +107,15 @@ public class Spec11PipelineTest {
// Put in half for theRegistrar and half for someRegistrar
for (int i = 0; i < 255; i++) {
subdomainsBuilder.add(
Subdomain.create(String.format("%s.com", i), "theRegistrar", "fake@theRegistrar.com"));
Subdomain.create(
String.format("%s.com", i), "theDomain", "theRegistrar", "fake@theRegistrar.com"));
}
for (int i = 255; i < 510; i++) {
subdomainsBuilder.add(
Subdomain.create(String.format("%s.com", i), "someRegistrar", "fake@someRegistrar.com"));
Subdomain.create(
String.format("%s.com", i), "someDomain", "someRegistrar", "fake@someRegistrar.com"));
}
subdomainsBuilder.add(Subdomain.create("no-email.com", "noEmailRegistrar", ""));
subdomainsBuilder.add(Subdomain.create("no-email.com", "fakeDomain", "noEmailRegistrar", ""));
return subdomainsBuilder.build();
}
@@ -165,8 +167,7 @@ public class Spec11PipelineTest {
assertThat(noEmailThreatMatch.length()).isEqualTo(1);
assertThat(noEmailThreatMatch.getJSONObject(0).get("fullyQualifiedDomainName"))
.isEqualTo("no-email.com");
assertThat(noEmailThreatMatch.getJSONObject(0).get("threatType"))
.isEqualTo("MALWARE");
assertThat(noEmailThreatMatch.getJSONObject(0).get("threatType")).isEqualTo("MALWARE");
JSONObject someRegistrarJSON = new JSONObject(sortedLines.get(1));
assertThat(someRegistrarJSON.get("registrarEmailAddress")).isEqualTo("fake@someRegistrar.com");
@@ -176,8 +177,7 @@ public class Spec11PipelineTest {
assertThat(someThreatMatch.length()).isEqualTo(1);
assertThat(someThreatMatch.getJSONObject(0).get("fullyQualifiedDomainName"))
.isEqualTo("444.com");
assertThat(someThreatMatch.getJSONObject(0).get("threatType"))
.isEqualTo("MALWARE");
assertThat(someThreatMatch.getJSONObject(0).get("threatType")).isEqualTo("MALWARE");
// theRegistrar has two ThreatMatches, we have to parse it explicitly
JSONObject theRegistrarJSON = new JSONObject(sortedLines.get(2));
@@ -228,10 +228,8 @@ public class Spec11PipelineTest {
CloseableHttpResponse httpResponse =
mock(CloseableHttpResponse.class, withSettings().serializable());
when(httpResponse.getStatusLine())
.thenReturn(
new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "Done"));
when(httpResponse.getEntity())
.thenReturn(new FakeHttpEntity(getAPIResponse(badUrls)));
.thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "Done"));
when(httpResponse.getEntity()).thenReturn(new FakeHttpEntity(getAPIResponse(badUrls)));
return httpResponse;
}
@@ -298,5 +296,4 @@ public class Spec11PipelineTest {
return ImmutableList.copyOf(
ResourceUtils.readResourceUtf8(resultFile.toURI().toURL()).split("\n"));
}
}
@@ -35,7 +35,6 @@ import google.registry.testing.EppLoader;
import google.registry.testing.FakeClock;
import google.registry.testing.FakeHttpSession;
import google.registry.testing.InjectRule;
import google.registry.testing.ShardableTestCase;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Rule;
@@ -45,7 +44,7 @@ import org.junit.runners.JUnit4;
/** Test that domain flows create the commit logs needed to reload at points in the past. */
@RunWith(JUnit4.class)
public class EppCommitLogsTest extends ShardableTestCase {
public class EppCommitLogsTest {
@Rule
public final AppEngineRule appEngine =
@@ -42,7 +42,6 @@ import google.registry.model.eppoutput.Result.Code;
import google.registry.monitoring.whitebox.EppMetric;
import google.registry.testing.AppEngineRule;
import google.registry.testing.FakeClock;
import google.registry.testing.ShardableTestCase;
import google.registry.util.Clock;
import google.registry.xml.ValidationMode;
import java.util.List;
@@ -64,7 +63,7 @@ import org.mockito.junit.MockitoRule;
/** Unit tests for {@link EppController}. */
@RunWith(JUnit4.class)
public class EppControllerTest extends ShardableTestCase {
public class EppControllerTest {
@Rule
public AppEngineRule appEngineRule =
@@ -46,7 +46,6 @@ import google.registry.testing.FakeClock;
import google.registry.testing.FakeHttpSession;
import google.registry.testing.FakeResponse;
import google.registry.testing.InjectRule;
import google.registry.testing.ShardableTestCase;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
@@ -56,7 +55,7 @@ import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Rule;
public class EppTestCase extends ShardableTestCase {
public class EppTestCase {
private static final MediaType APPLICATION_EPP_XML_UTF8 =
MediaType.create("application", "epp+xml").withCharset(UTF_8);
@@ -23,7 +23,6 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import google.registry.testing.FakeHttpSession;
import google.registry.testing.ShardableTestCase;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@@ -31,7 +30,7 @@ import org.mockito.ArgumentCaptor;
/** Tests for {@link EppTlsAction}. */
@RunWith(JUnit4.class)
public class EppTlsActionTest extends ShardableTestCase {
public class EppTlsActionTest {
private static final byte[] INPUT_XML_BYTES = "<xml>".getBytes(UTF_8);
@@ -29,7 +29,6 @@ import google.registry.model.eppinput.EppInput;
import google.registry.model.eppoutput.EppOutput.ResponseOrGreeting;
import google.registry.model.eppoutput.EppResponse;
import google.registry.model.reporting.IcannReportingTypes.ActivityReportField;
import google.registry.testing.ShardableTestCase;
import java.util.Map;
import java.util.Optional;
import org.json.simple.JSONValue;
@@ -40,7 +39,7 @@ import org.junit.runners.JUnit4;
/** Unit tests for {@link FlowReporter}. */
@RunWith(JUnit4.class)
public class FlowReporterTest extends ShardableTestCase {
public class FlowReporterTest {
static class TestCommandFlow implements Flow {
@Override
@@ -36,7 +36,6 @@ import google.registry.monitoring.whitebox.EppMetric;
import google.registry.testing.AppEngineRule;
import google.registry.testing.FakeClock;
import google.registry.testing.FakeHttpSession;
import google.registry.testing.ShardableTestCase;
import java.util.List;
import java.util.Optional;
import org.junit.Before;
@@ -48,7 +47,7 @@ import org.mockito.Mockito;
/** Unit tests for {@link FlowRunner}. */
@RunWith(JUnit4.class)
public class FlowRunnerTest extends ShardableTestCase {
public class FlowRunnerTest {
@Rule
public final AppEngineRule appEngineRule = new AppEngineRule.Builder().build();
@@ -52,7 +52,6 @@ import google.registry.testing.EppLoader;
import google.registry.testing.FakeClock;
import google.registry.testing.FakeHttpSession;
import google.registry.testing.InjectRule;
import google.registry.testing.ShardableTestCase;
import google.registry.testing.TestDataHelper;
import google.registry.tmch.TmchCertificateAuthority;
import google.registry.tmch.TmchXmlSignature;
@@ -63,18 +62,15 @@ import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Rule;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.RegisterExtension;
/**
* Base class for resource flow unit tests.
*
* @param <F> the flow type
*/
@RunWith(JUnit4.class)
public abstract class FlowTestCase<F extends Flow> extends ShardableTestCase {
public abstract class FlowTestCase<F extends Flow> {
/** Whether to actually write to Datastore or just simulate. */
public enum CommitMode { LIVE, DRY_RUN }
@@ -82,23 +78,22 @@ public abstract class FlowTestCase<F extends Flow> extends ShardableTestCase {
/** Whether to run in normal or superuser mode. */
public enum UserPrivileges { NORMAL, SUPERUSER }
@Rule
@RegisterExtension
public final AppEngineRule appEngine =
AppEngineRule.builder().withDatastoreAndCloudSql().withTaskQueue().build();
@Rule
public final InjectRule inject = new InjectRule();
@RegisterExtension public final InjectRule inject = new InjectRule();
protected EppLoader eppLoader;
protected SessionMetadata sessionMetadata;
protected FakeClock clock = new FakeClock(DateTime.now(UTC));
protected TransportCredentials credentials = new PasswordOnlyTransportCredentials();
protected EppRequestSource eppRequestSource = EppRequestSource.UNIT_TEST;
protected TmchXmlSignature testTmchXmlSignature = null;
private TmchXmlSignature testTmchXmlSignature = null;
private EppMetric.Builder eppMetricBuilder;
@Before
@BeforeEach
public void init() {
sessionMetadata = new HttpSessionMetadata(new FakeHttpSession());
sessionMetadata.setClientId("TheRegistrar");
@@ -204,29 +199,26 @@ public abstract class FlowTestCase<F extends Flow> extends ShardableTestCase {
}
/**
* Assert that the actual grace periods and the corresponding billing events referenced from
* their keys match the expected map of grace periods to billing events. For the expected map,
* the keys on the grace periods and IDs on the billing events are ignored.
* Assert that the actual grace periods and the corresponding billing events referenced from their
* keys match the expected map of grace periods to billing events. For the expected map, the keys
* on the grace periods and IDs on the billing events are ignored.
*/
public void assertGracePeriods(
Iterable<GracePeriod> actual,
ImmutableMap<GracePeriod, ? extends BillingEvent> expected) {
protected void assertGracePeriods(
Iterable<GracePeriod> actual, ImmutableMap<GracePeriod, ? extends BillingEvent> expected) {
assertThat(canonicalizeGracePeriods(Maps.toMap(actual, FlowTestCase::expandGracePeriod)))
.isEqualTo(canonicalizeGracePeriods(expected));
}
public void assertPollMessages(
String clientId,
PollMessage... expected) {
protected void assertPollMessages(String clientId, PollMessage... expected) {
assertPollMessagesHelper(getPollMessages(clientId), expected);
}
public void assertPollMessages(PollMessage... expected) {
protected void assertPollMessages(PollMessage... expected) {
assertPollMessagesHelper(getPollMessages(), expected);
}
/** Assert that the list matches all the poll messages in the fake Datastore. */
public void assertPollMessagesHelper(
private void assertPollMessagesHelper(
Iterable<PollMessage> pollMessages, PollMessage... expected) {
// Ordering is irrelevant but duplicates should be considered independently.
assertThat(
@@ -279,7 +271,7 @@ public abstract class FlowTestCase<F extends Flow> extends ShardableTestCase {
}
/** Shortcut to call {@link #runFlow(CommitMode, UserPrivileges)} as super user and live run. */
public EppOutput runFlowAsSuperuser() throws Exception {
protected EppOutput runFlowAsSuperuser() throws Exception {
return runFlow(CommitMode.LIVE, UserPrivileges.SUPERUSER);
}
@@ -46,8 +46,8 @@ import javax.annotation.Nullable;
import org.joda.time.DateTime;
import org.joda.time.Duration;
import org.json.simple.JSONValue;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/**
* Base class for resource flow unit tests.
@@ -60,8 +60,8 @@ public abstract class ResourceFlowTestCase<F extends Flow, R extends EppResource
private final TestLogHandler logHandler = new TestLogHandler();
@Before
public void beforeResourceFlowTestCase() {
@BeforeEach
void beforeResourceFlowTestCase() {
// Attach TestLogHandler to the root logger so it has access to all log messages.
// Note that in theory for assertIcannReportingActivityFieldLogged() below it would suffice to
// attach it only to the FlowRunner logger, but for some reason this doesn't work for all flows.
@@ -89,7 +89,7 @@ public abstract class ResourceFlowTestCase<F extends Flow, R extends EppResource
return refreshedResource;
}
protected ResourceCommand.SingleResourceCommand getResourceCommand() throws Exception {
private ResourceCommand.SingleResourceCommand getResourceCommand() throws Exception {
return (ResourceCommand.SingleResourceCommand)
((ResourceCommandWrapper) eppLoader.getEpp().getCommandWrapper().getCommand())
.getResourceCommand();
@@ -99,7 +99,7 @@ public abstract class ResourceFlowTestCase<F extends Flow, R extends EppResource
return getResourceCommand().getTargetId();
}
protected Class<R> getResourceClass() {
private Class<R> getResourceClass() {
return new TypeInstantiator<R>(getClass()){}.getExactType();
}
@@ -119,7 +119,7 @@ public abstract class ResourceFlowTestCase<F extends Flow, R extends EppResource
}
@Test
public void testRequiresLogin() {
void testRequiresLogin() {
sessionMetadata.setClientId(null);
EppException thrown = assertThrows(NotLoggedInException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
@@ -25,7 +25,6 @@ import static org.mockito.Mockito.when;
import google.registry.model.registrar.Registrar;
import google.registry.request.HttpException.BadRequestException;
import google.registry.testing.AppEngineRule;
import google.registry.testing.ShardableTestCase;
import java.util.Optional;
import javax.servlet.http.HttpServletRequest;
import org.joda.time.DateTime;
@@ -36,7 +35,7 @@ import org.junit.runners.JUnit4;
/** Unit tests for {@link TlsCredentials}. */
@RunWith(JUnit4.class)
public final class TlsCredentialsTest extends ShardableTestCase {
public final class TlsCredentialsTest {
@Rule
public final AppEngineRule appEngine = AppEngineRule.builder().withDatastoreAndCloudSql().build();
@@ -24,18 +24,17 @@ import google.registry.flows.EppException;
import google.registry.flows.ResourceCheckFlowTestCase;
import google.registry.flows.exceptions.TooManyResourceChecksException;
import google.registry.model.contact.ContactResource;
import org.junit.Test;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link ContactCheckFlow}. */
public class ContactCheckFlowTest
extends ResourceCheckFlowTestCase<ContactCheckFlow, ContactResource> {
class ContactCheckFlowTest extends ResourceCheckFlowTestCase<ContactCheckFlow, ContactResource> {
public ContactCheckFlowTest() {
ContactCheckFlowTest() {
setEppInput("contact_check.xml");
}
@Test
public void testNothingExists() throws Exception {
void testNothingExists() throws Exception {
// These ids come from the check xml.
doCheckTest(
create(true, "sh8013", null),
@@ -44,7 +43,7 @@ public class ContactCheckFlowTest
}
@Test
public void testOneExists() throws Exception {
void testOneExists() throws Exception {
persistActiveContact("sh8013");
// These ids come from the check xml.
doCheckTest(
@@ -54,7 +53,7 @@ public class ContactCheckFlowTest
}
@Test
public void testOneExistsButWasDeleted() throws Exception {
void testOneExistsButWasDeleted() throws Exception {
persistDeletedContact("sh8013", clock.nowUtc().minusDays(1));
// These ids come from the check xml.
doCheckTest(
@@ -64,27 +63,27 @@ public class ContactCheckFlowTest
}
@Test
public void testXmlMatches() throws Exception {
void testXmlMatches() throws Exception {
persistActiveContact("sah8013");
runFlowAssertResponse(loadFile("contact_check_response.xml"));
}
@Test
public void test50IdsAllowed() throws Exception {
void test50IdsAllowed() throws Exception {
// Make sure we don't have a regression that reduces the number of allowed checks.
setEppInput("contact_check_50.xml");
runFlow();
}
@Test
public void testTooManyIds() {
void testTooManyIds() {
setEppInput("contact_check_51.xml");
EppException thrown = assertThrows(TooManyResourceChecksException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
runFlow();
assertIcannReportingActivityFieldLogged("srs-cont-check");
}
@@ -32,13 +32,12 @@ import google.registry.flows.exceptions.ResourceAlreadyExistsForThisClientExcept
import google.registry.flows.exceptions.ResourceCreateContentionException;
import google.registry.model.contact.ContactResource;
import org.joda.time.DateTime;
import org.junit.Test;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link ContactCreateFlow}. */
public class ContactCreateFlowTest
extends ResourceFlowTestCase<ContactCreateFlow, ContactResource> {
class ContactCreateFlowTest extends ResourceFlowTestCase<ContactCreateFlow, ContactResource> {
public ContactCreateFlowTest() {
ContactCreateFlowTest() {
setEppInput("contact_create.xml");
clock.setTo(DateTime.parse("1999-04-03T22:00:00.0Z"));
}
@@ -56,24 +55,24 @@ public class ContactCreateFlowTest
}
@Test
public void testDryRun() throws Exception {
void testDryRun() throws Exception {
dryRunFlowAssertResponse(loadFile("contact_create_response.xml"));
}
@Test
public void testSuccess_neverExisted() throws Exception {
void testSuccess_neverExisted() throws Exception {
doSuccessfulTest();
}
@Test
public void testSuccess_existedButWasDeleted() throws Exception {
void testSuccess_existedButWasDeleted() throws Exception {
persistDeletedContact(getUniqueIdFromCommand(), clock.nowUtc().minusDays(1));
clock.advanceOneMilli();
doSuccessfulTest();
}
@Test
public void testFailure_alreadyExists() throws Exception {
void testFailure_alreadyExists() throws Exception {
persistActiveContact(getUniqueIdFromCommand());
ResourceAlreadyExistsForThisClientException thrown =
assertThrows(ResourceAlreadyExistsForThisClientException.class, this::runFlow);
@@ -85,7 +84,7 @@ public class ContactCreateFlowTest
}
@Test
public void testFailure_resourceContention() throws Exception {
void testFailure_resourceContention() throws Exception {
String targetId = getUniqueIdFromCommand();
persistResource(
newContactResource(targetId)
@@ -101,13 +100,13 @@ public class ContactCreateFlowTest
}
@Test
public void testSuccess_nonAsciiInLocAddress() throws Exception {
void testSuccess_nonAsciiInLocAddress() throws Exception {
setEppInput("contact_create_hebrew_loc.xml");
doSuccessfulTest();
}
@Test
public void testFailure_nonAsciiInIntAddress() {
void testFailure_nonAsciiInIntAddress() {
setEppInput("contact_create_hebrew_int.xml");
EppException thrown =
assertThrows(BadInternationalizedPostalInfoException.class, this::runFlow);
@@ -115,7 +114,7 @@ public class ContactCreateFlowTest
}
@Test
public void testFailure_declineDisclosure() {
void testFailure_declineDisclosure() {
setEppInput("contact_create_decline_disclosure.xml");
EppException thrown =
assertThrows(DeclineContactDisclosureFieldDisallowedPolicyException.class, this::runFlow);
@@ -123,7 +122,7 @@ public class ContactCreateFlowTest
}
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
runFlow();
assertIcannReportingActivityFieldLogged("srs-cont-create");
}
@@ -37,26 +37,25 @@ import google.registry.model.contact.ContactResource;
import google.registry.model.eppcommon.StatusValue;
import google.registry.model.eppcommon.Trid;
import google.registry.model.reporting.HistoryEntry;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link ContactDeleteFlow}. */
public class ContactDeleteFlowTest
extends ResourceFlowTestCase<ContactDeleteFlow, ContactResource> {
class ContactDeleteFlowTest extends ResourceFlowTestCase<ContactDeleteFlow, ContactResource> {
@Before
public void initFlowTest() {
@BeforeEach
void initFlowTest() {
setEppInput("contact_delete.xml");
}
@Test
public void testDryRun() throws Exception {
void testDryRun() throws Exception {
persistActiveContact(getUniqueIdFromCommand());
dryRunFlowAssertResponse(loadFile("contact_delete_response.xml"));
}
@Test
public void testSuccess() throws Exception {
void testSuccess() throws Exception {
persistActiveContact(getUniqueIdFromCommand());
clock.advanceOneMilli();
assertTransactionalFlow(true);
@@ -73,7 +72,7 @@ public class ContactDeleteFlowTest
}
@Test
public void testSuccess_clTridNotSpecified() throws Exception {
void testSuccess_clTridNotSpecified() throws Exception {
setEppInput("contact_delete_no_cltrid.xml");
persistActiveContact(getUniqueIdFromCommand());
clock.advanceOneMilli();
@@ -91,7 +90,7 @@ public class ContactDeleteFlowTest
}
@Test
public void testFailure_neverExisted() throws Exception {
void testFailure_neverExisted() throws Exception {
ResourceDoesNotExistException thrown =
assertThrows(ResourceDoesNotExistException.class, this::runFlow);
assertThat(thrown).hasMessageThat().contains(String.format("(%s)", getUniqueIdFromCommand()));
@@ -99,7 +98,7 @@ public class ContactDeleteFlowTest
}
@Test
public void testFailure_existedButWasDeleted() throws Exception {
void testFailure_existedButWasDeleted() throws Exception {
persistDeletedContact(getUniqueIdFromCommand(), clock.nowUtc().minusDays(1));
ResourceDoesNotExistException thrown =
assertThrows(ResourceDoesNotExistException.class, this::runFlow);
@@ -108,19 +107,19 @@ public class ContactDeleteFlowTest
}
@Test
public void testFailure_existedButWasClientDeleteProhibited() throws Exception {
void testFailure_existedButWasClientDeleteProhibited() throws Exception {
doFailingStatusTest(
StatusValue.CLIENT_DELETE_PROHIBITED, ResourceStatusProhibitsOperationException.class);
}
@Test
public void testFailure_existedButWasServerDeleteProhibited() throws Exception {
void testFailure_existedButWasServerDeleteProhibited() throws Exception {
doFailingStatusTest(
StatusValue.SERVER_DELETE_PROHIBITED, ResourceStatusProhibitsOperationException.class);
}
@Test
public void testFailure_existedButWasPendingDelete() throws Exception {
void testFailure_existedButWasPendingDelete() throws Exception {
doFailingStatusTest(
StatusValue.PENDING_DELETE, ResourceStatusProhibitsOperationException.class);
}
@@ -137,7 +136,7 @@ public class ContactDeleteFlowTest
}
@Test
public void testFailure_unauthorizedClient() throws Exception {
void testFailure_unauthorizedClient() throws Exception {
sessionMetadata.setClientId("NewRegistrar");
persistActiveContact(getUniqueIdFromCommand());
EppException thrown = assertThrows(ResourceNotOwnedException.class, this::runFlow);
@@ -145,7 +144,7 @@ public class ContactDeleteFlowTest
}
@Test
public void testSuccess_superuserUnauthorizedClient() throws Exception {
void testSuccess_superuserUnauthorizedClient() throws Exception {
sessionMetadata.setClientId("NewRegistrar");
persistActiveContact(getUniqueIdFromCommand());
clock.advanceOneMilli();
@@ -163,7 +162,7 @@ public class ContactDeleteFlowTest
}
@Test
public void testFailure_failfastWhenLinkedToDomain() throws Exception {
void testFailure_failfastWhenLinkedToDomain() throws Exception {
createTld("tld");
persistResource(
newDomainBase("example.tld", persistActiveContact(getUniqueIdFromCommand())));
@@ -172,7 +171,7 @@ public class ContactDeleteFlowTest
}
@Test
public void testFailure_failfastWhenLinkedToApplication() throws Exception {
void testFailure_failfastWhenLinkedToApplication() throws Exception {
createTld("tld");
persistResource(
newDomainBase("example.tld", persistActiveContact(getUniqueIdFromCommand())));
@@ -181,7 +180,7 @@ public class ContactDeleteFlowTest
}
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
persistActiveContact(getUniqueIdFromCommand());
clock.advanceOneMilli();
runFlow();
@@ -39,12 +39,12 @@ import google.registry.model.eppcommon.AuthInfo.PasswordAuth;
import google.registry.model.eppcommon.PresenceMarker;
import google.registry.model.eppcommon.StatusValue;
import org.joda.time.DateTime;
import org.junit.Test;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link ContactInfoFlow}. */
public class ContactInfoFlowTest extends ResourceFlowTestCase<ContactInfoFlow, ContactResource> {
class ContactInfoFlowTest extends ResourceFlowTestCase<ContactInfoFlow, ContactResource> {
public ContactInfoFlowTest() {
ContactInfoFlowTest() {
setEppInput("contact_info.xml");
}
@@ -95,7 +95,7 @@ public class ContactInfoFlowTest extends ResourceFlowTestCase<ContactInfoFlow, C
}
@Test
public void testSuccess() throws Exception {
void testSuccess() throws Exception {
persistContactResource(true);
// Check that the persisted contact info was returned.
assertTransactionalFlow(false);
@@ -108,7 +108,7 @@ public class ContactInfoFlowTest extends ResourceFlowTestCase<ContactInfoFlow, C
}
@Test
public void testSuccess_linked() throws Exception {
void testSuccess_linked() throws Exception {
createTld("foobar");
persistResource(newDomainBase("example.foobar", persistContactResource(true)));
// Check that the persisted contact info was returned.
@@ -122,7 +122,7 @@ public class ContactInfoFlowTest extends ResourceFlowTestCase<ContactInfoFlow, C
}
@Test
public void testSuccess_owningRegistrarWithoutAuthInfo_seesAuthInfo() throws Exception {
void testSuccess_owningRegistrarWithoutAuthInfo_seesAuthInfo() throws Exception {
setEppInput("contact_info_no_authinfo.xml");
persistContactResource(true);
// Check that the persisted contact info was returned.
@@ -136,7 +136,7 @@ public class ContactInfoFlowTest extends ResourceFlowTestCase<ContactInfoFlow, C
}
@Test
public void testFailure_otherRegistrar_notAuthorized() throws Exception {
void testFailure_otherRegistrar_notAuthorized() throws Exception {
setClientIdForFlow("NewRegistrar");
persistContactResource(true);
// Check that the persisted contact info was returned.
@@ -146,8 +146,7 @@ public class ContactInfoFlowTest extends ResourceFlowTestCase<ContactInfoFlow, C
}
@Test
public void testSuccess_otherRegistrarWithoutAuthInfoAsSuperuser_doesNotSeeAuthInfo()
throws Exception {
void testSuccess_otherRegistrarWithoutAuthInfoAsSuperuser_doesNotSeeAuthInfo() throws Exception {
setClientIdForFlow("NewRegistrar");
setEppInput("contact_info_no_authinfo.xml");
persistContactResource(true);
@@ -164,7 +163,7 @@ public class ContactInfoFlowTest extends ResourceFlowTestCase<ContactInfoFlow, C
}
@Test
public void testSuccess_otherRegistrarWithAuthInfoAsSuperuser_seesAuthInfo() throws Exception {
void testSuccess_otherRegistrarWithAuthInfoAsSuperuser_seesAuthInfo() throws Exception {
setClientIdForFlow("NewRegistrar");
persistContactResource(true);
// Check that the persisted contact info was returned.
@@ -180,7 +179,7 @@ public class ContactInfoFlowTest extends ResourceFlowTestCase<ContactInfoFlow, C
}
@Test
public void testFailure_neverExisted() throws Exception {
void testFailure_neverExisted() throws Exception {
ResourceDoesNotExistException thrown =
assertThrows(ResourceDoesNotExistException.class, this::runFlow);
assertThat(thrown).hasMessageThat().contains(String.format("(%s)", getUniqueIdFromCommand()));
@@ -188,7 +187,7 @@ public class ContactInfoFlowTest extends ResourceFlowTestCase<ContactInfoFlow, C
}
@Test
public void testFailure_existedButWasDeleted() throws Exception {
void testFailure_existedButWasDeleted() throws Exception {
persistContactResource(false);
ResourceDoesNotExistException thrown =
assertThrows(ResourceDoesNotExistException.class, this::runFlow);
@@ -197,7 +196,7 @@ public class ContactInfoFlowTest extends ResourceFlowTestCase<ContactInfoFlow, C
}
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
persistContactResource(true);
runFlow();
assertIcannReportingActivityFieldLogged("srs-cont-info");
@@ -41,15 +41,15 @@ import google.registry.model.reporting.HistoryEntry;
import google.registry.model.transfer.TransferData;
import google.registry.model.transfer.TransferResponse;
import google.registry.model.transfer.TransferStatus;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link ContactTransferApproveFlow}. */
public class ContactTransferApproveFlowTest
class ContactTransferApproveFlowTest
extends ContactTransferFlowTestCase<ContactTransferApproveFlow, ContactResource> {
@Before
public void setUp() {
@BeforeEach
void setUp() {
setEppInput("contact_transfer_approve.xml");
setClientIdForFlow("TheRegistrar");
setupContactWithPendingTransfer();
@@ -122,24 +122,24 @@ public class ContactTransferApproveFlowTest
}
@Test
public void testDryRun() throws Exception {
void testDryRun() throws Exception {
setEppInput("contact_transfer_approve.xml");
dryRunFlowAssertResponse(loadFile("contact_transfer_approve_response.xml"));
}
@Test
public void testSuccess() throws Exception {
void testSuccess() throws Exception {
doSuccessfulTest("contact_transfer_approve.xml", "contact_transfer_approve_response.xml");
}
@Test
public void testSuccess_withAuthinfo() throws Exception {
void testSuccess_withAuthinfo() throws Exception {
doSuccessfulTest("contact_transfer_approve_with_authinfo.xml",
"contact_transfer_approve_response.xml");
}
@Test
public void testFailure_badContactPassword() {
void testFailure_badContactPassword() {
// Change the contact's password so it does not match the password in the file.
contact = persistResource(
contact.asBuilder()
@@ -153,7 +153,7 @@ public class ContactTransferApproveFlowTest
}
@Test
public void testFailure_neverBeenTransferred() {
void testFailure_neverBeenTransferred() {
changeTransferStatus(null);
EppException thrown =
assertThrows(
@@ -162,7 +162,7 @@ public class ContactTransferApproveFlowTest
}
@Test
public void testFailure_clientApproved() {
void testFailure_clientApproved() {
changeTransferStatus(TransferStatus.CLIENT_APPROVED);
EppException thrown =
assertThrows(
@@ -171,7 +171,7 @@ public class ContactTransferApproveFlowTest
}
@Test
public void testFailure_clientRejected() {
void testFailure_clientRejected() {
changeTransferStatus(TransferStatus.CLIENT_REJECTED);
EppException thrown =
assertThrows(
@@ -180,7 +180,7 @@ public class ContactTransferApproveFlowTest
}
@Test
public void testFailure_clientCancelled() {
void testFailure_clientCancelled() {
changeTransferStatus(TransferStatus.CLIENT_CANCELLED);
EppException thrown =
assertThrows(
@@ -189,7 +189,7 @@ public class ContactTransferApproveFlowTest
}
@Test
public void testFailure_serverApproved() {
void testFailure_serverApproved() {
changeTransferStatus(TransferStatus.SERVER_APPROVED);
EppException thrown =
assertThrows(
@@ -198,7 +198,7 @@ public class ContactTransferApproveFlowTest
}
@Test
public void testFailure_serverCancelled() {
void testFailure_serverCancelled() {
changeTransferStatus(TransferStatus.SERVER_CANCELLED);
EppException thrown =
assertThrows(
@@ -207,7 +207,7 @@ public class ContactTransferApproveFlowTest
}
@Test
public void testFailure_gainingClient() {
void testFailure_gainingClient() {
setClientIdForFlow("NewRegistrar");
EppException thrown =
assertThrows(
@@ -216,7 +216,7 @@ public class ContactTransferApproveFlowTest
}
@Test
public void testFailure_unrelatedClient() {
void testFailure_unrelatedClient() {
setClientIdForFlow("ClientZ");
EppException thrown =
assertThrows(
@@ -225,7 +225,7 @@ public class ContactTransferApproveFlowTest
}
@Test
public void testFailure_deletedContact() throws Exception {
void testFailure_deletedContact() throws Exception {
contact = persistResource(
contact.asBuilder().setDeletionTime(clock.nowUtc().minusDays(1)).build());
ResourceDoesNotExistException thrown =
@@ -237,7 +237,7 @@ public class ContactTransferApproveFlowTest
}
@Test
public void testFailure_nonexistentContact() throws Exception {
void testFailure_nonexistentContact() throws Exception {
deleteResource(contact);
contact = persistResource(
contact.asBuilder().setDeletionTime(clock.nowUtc().minusDays(1)).build());
@@ -250,7 +250,7 @@ public class ContactTransferApproveFlowTest
}
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
runFlow();
assertIcannReportingActivityFieldLogged("srs-cont-transfer-approve");
}
@@ -38,15 +38,15 @@ import google.registry.model.reporting.HistoryEntry;
import google.registry.model.transfer.TransferData;
import google.registry.model.transfer.TransferResponse;
import google.registry.model.transfer.TransferStatus;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link ContactTransferCancelFlow}. */
public class ContactTransferCancelFlowTest
class ContactTransferCancelFlowTest
extends ContactTransferFlowTestCase<ContactTransferCancelFlow, ContactResource> {
@Before
public void setUp() {
@BeforeEach
void setUp() {
this.setEppInput("contact_transfer_cancel.xml");
setClientIdForFlow("NewRegistrar");
setupContactWithPendingTransfer();
@@ -106,24 +106,24 @@ public class ContactTransferCancelFlowTest
}
@Test
public void testDryRun() throws Exception {
void testDryRun() throws Exception {
setEppInput("contact_transfer_cancel.xml");
dryRunFlowAssertResponse(loadFile("contact_transfer_cancel_response.xml"));
}
@Test
public void testSuccess() throws Exception {
void testSuccess() throws Exception {
doSuccessfulTest("contact_transfer_cancel.xml", "contact_transfer_cancel_response.xml");
}
@Test
public void testSuccess_withAuthinfo() throws Exception {
void testSuccess_withAuthinfo() throws Exception {
doSuccessfulTest("contact_transfer_cancel_with_authinfo.xml",
"contact_transfer_cancel_response.xml");
}
@Test
public void testFailure_badContactPassword() {
void testFailure_badContactPassword() {
// Change the contact's password so it does not match the password in the file.
contact =
persistResource(
@@ -139,7 +139,7 @@ public class ContactTransferCancelFlowTest
}
@Test
public void testFailure_neverBeenTransferred() {
void testFailure_neverBeenTransferred() {
changeTransferStatus(null);
EppException thrown =
assertThrows(
@@ -148,7 +148,7 @@ public class ContactTransferCancelFlowTest
}
@Test
public void testFailure_clientApproved() {
void testFailure_clientApproved() {
changeTransferStatus(TransferStatus.CLIENT_APPROVED);
EppException thrown =
assertThrows(
@@ -157,7 +157,7 @@ public class ContactTransferCancelFlowTest
}
@Test
public void testFailure_clientRejected() {
void testFailure_clientRejected() {
changeTransferStatus(TransferStatus.CLIENT_REJECTED);
EppException thrown =
assertThrows(
@@ -166,7 +166,7 @@ public class ContactTransferCancelFlowTest
}
@Test
public void testFailure_clientCancelled() {
void testFailure_clientCancelled() {
changeTransferStatus(TransferStatus.CLIENT_CANCELLED);
EppException thrown =
assertThrows(
@@ -175,7 +175,7 @@ public class ContactTransferCancelFlowTest
}
@Test
public void testFailure_serverApproved() {
void testFailure_serverApproved() {
changeTransferStatus(TransferStatus.SERVER_APPROVED);
EppException thrown =
assertThrows(
@@ -184,7 +184,7 @@ public class ContactTransferCancelFlowTest
}
@Test
public void testFailure_serverCancelled() {
void testFailure_serverCancelled() {
changeTransferStatus(TransferStatus.SERVER_CANCELLED);
EppException thrown =
assertThrows(
@@ -193,7 +193,7 @@ public class ContactTransferCancelFlowTest
}
@Test
public void testFailure_sponsoringClient() {
void testFailure_sponsoringClient() {
setClientIdForFlow("TheRegistrar");
EppException thrown =
assertThrows(
@@ -203,7 +203,7 @@ public class ContactTransferCancelFlowTest
}
@Test
public void testFailure_unrelatedClient() {
void testFailure_unrelatedClient() {
setClientIdForFlow("ClientZ");
EppException thrown =
assertThrows(
@@ -213,7 +213,7 @@ public class ContactTransferCancelFlowTest
}
@Test
public void testFailure_deletedContact() throws Exception {
void testFailure_deletedContact() throws Exception {
contact =
persistResource(contact.asBuilder().setDeletionTime(clock.nowUtc().minusDays(1)).build());
ResourceDoesNotExistException thrown =
@@ -225,7 +225,7 @@ public class ContactTransferCancelFlowTest
}
@Test
public void testFailure_nonexistentContact() throws Exception {
void testFailure_nonexistentContact() throws Exception {
deleteResource(contact);
ResourceDoesNotExistException thrown =
assertThrows(
@@ -236,7 +236,7 @@ public class ContactTransferCancelFlowTest
}
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
runFlow();
assertIcannReportingActivityFieldLogged("srs-cont-transfer-cancel");
}
@@ -28,7 +28,7 @@ import google.registry.model.transfer.TransferStatus;
import google.registry.testing.AppEngineRule;
import org.joda.time.DateTime;
import org.joda.time.Duration;
import org.junit.Before;
import org.junit.jupiter.api.BeforeEach;
/**
* Base class for contact transfer flow unit tests.
@@ -49,13 +49,13 @@ public class ContactTransferFlowTestCase<F extends Flow, R extends EppResource>
protected ContactResource contact;
public ContactTransferFlowTestCase() {
ContactTransferFlowTestCase() {
checkState(!Registry.DEFAULT_TRANSFER_GRACE_PERIOD.isShorterThan(TIME_SINCE_REQUEST));
clock.setTo(TRANSFER_REQUEST_TIME.plus(TIME_SINCE_REQUEST));
}
@Before
public void initContactTest() {
@BeforeEach
void initContactTest() {
// Registrar ClientZ is used in tests that need another registrar that definitely doesn't own
// the resources in question.
persistResource(
@@ -63,7 +63,7 @@ public class ContactTransferFlowTestCase<F extends Flow, R extends EppResource>
}
/** Adds a contact that has a pending transfer on it from TheRegistrar to NewRegistrar. */
protected void setupContactWithPendingTransfer() {
void setupContactWithPendingTransfer() {
contact = persistContactWithPendingTransfer(
newContactResource("sh8013"),
TRANSFER_REQUEST_TIME,
@@ -33,15 +33,15 @@ import google.registry.model.eppcommon.AuthInfo.PasswordAuth;
import google.registry.model.reporting.HistoryEntry;
import google.registry.model.transfer.TransferStatus;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link ContactTransferQueryFlow}. */
public class ContactTransferQueryFlowTest
class ContactTransferQueryFlowTest
extends ContactTransferFlowTestCase<ContactTransferQueryFlow, ContactResource> {
@Before
public void setUp() {
@BeforeEach
void setUp() {
setEppInput("contact_transfer_query.xml");
clock.setTo(DateTime.parse("2000-06-10T22:00:00.0Z"));
setClientIdForFlow("NewRegistrar");
@@ -69,65 +69,65 @@ public class ContactTransferQueryFlowTest
}
@Test
public void testSuccess() throws Exception {
void testSuccess() throws Exception {
doSuccessfulTest("contact_transfer_query.xml", "contact_transfer_query_response.xml");
}
@Test
public void testSuccess_withContactRoid() throws Exception {
void testSuccess_withContactRoid() throws Exception {
doSuccessfulTest("contact_transfer_query_with_roid.xml", "contact_transfer_query_response.xml");
}
@Test
public void testSuccess_sponsoringClient() throws Exception {
void testSuccess_sponsoringClient() throws Exception {
setClientIdForFlow("TheRegistrar");
doSuccessfulTest("contact_transfer_query.xml", "contact_transfer_query_response.xml");
}
@Test
public void testSuccess_withAuthinfo() throws Exception {
void testSuccess_withAuthinfo() throws Exception {
setClientIdForFlow("ClientZ");
doSuccessfulTest("contact_transfer_query_with_authinfo.xml",
"contact_transfer_query_response.xml");
}
@Test
public void testSuccess_clientApproved() throws Exception {
void testSuccess_clientApproved() throws Exception {
changeTransferStatus(TransferStatus.CLIENT_APPROVED);
doSuccessfulTest("contact_transfer_query.xml",
"contact_transfer_query_response_client_approved.xml");
}
@Test
public void testSuccess_clientRejected() throws Exception {
@Test
void testSuccess_clientRejected() throws Exception {
changeTransferStatus(TransferStatus.CLIENT_REJECTED);
doSuccessfulTest("contact_transfer_query.xml",
"contact_transfer_query_response_client_rejected.xml");
}
@Test
public void testSuccess_clientCancelled() throws Exception {
@Test
void testSuccess_clientCancelled() throws Exception {
changeTransferStatus(TransferStatus.CLIENT_CANCELLED);
doSuccessfulTest("contact_transfer_query.xml",
"contact_transfer_query_response_client_cancelled.xml");
}
@Test
public void testSuccess_serverApproved() throws Exception {
void testSuccess_serverApproved() throws Exception {
changeTransferStatus(TransferStatus.SERVER_APPROVED);
doSuccessfulTest("contact_transfer_query.xml",
"contact_transfer_query_response_server_approved.xml");
}
@Test
public void testSuccess_serverCancelled() throws Exception {
void testSuccess_serverCancelled() throws Exception {
changeTransferStatus(TransferStatus.SERVER_CANCELLED);
doSuccessfulTest("contact_transfer_query.xml",
"contact_transfer_query_response_server_cancelled.xml");
}
@Test
public void testFailure_pendingDeleteContact() throws Exception {
void testFailure_pendingDeleteContact() throws Exception {
changeTransferStatus(TransferStatus.SERVER_CANCELLED);
contact = persistResource(
contact.asBuilder().setDeletionTime(clock.nowUtc().plusDays(1)).build());
@@ -136,7 +136,7 @@ public class ContactTransferQueryFlowTest
}
@Test
public void testFailure_badContactPassword() {
void testFailure_badContactPassword() {
// Change the contact's password so it does not match the password in the file.
contact =
persistResource(
@@ -152,7 +152,7 @@ public class ContactTransferQueryFlowTest
}
@Test
public void testFailure_badContactRoid() {
void testFailure_badContactRoid() {
// Set the contact to a different ROID, but don't persist it; this is just so the substitution
// code above will write the wrong ROID into the file.
contact = contact.asBuilder().setRepoId("DEADBEEF_TLD-ROID").build();
@@ -164,7 +164,7 @@ public class ContactTransferQueryFlowTest
}
@Test
public void testFailure_neverBeenTransferred() {
void testFailure_neverBeenTransferred() {
changeTransferStatus(null);
EppException thrown =
assertThrows(
@@ -174,7 +174,7 @@ public class ContactTransferQueryFlowTest
}
@Test
public void testFailure_unrelatedClient() {
void testFailure_unrelatedClient() {
setClientIdForFlow("ClientZ");
EppException thrown =
assertThrows(
@@ -184,7 +184,7 @@ public class ContactTransferQueryFlowTest
}
@Test
public void testFailure_deletedContact() throws Exception {
void testFailure_deletedContact() throws Exception {
contact =
persistResource(contact.asBuilder().setDeletionTime(clock.nowUtc().minusDays(1)).build());
ResourceDoesNotExistException thrown =
@@ -195,7 +195,7 @@ public class ContactTransferQueryFlowTest
}
@Test
public void testFailure_nonexistentContact() throws Exception {
void testFailure_nonexistentContact() throws Exception {
deleteResource(contact);
ResourceDoesNotExistException thrown =
assertThrows(
@@ -205,7 +205,7 @@ public class ContactTransferQueryFlowTest
}
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
runFlow();
assertIcannReportingActivityFieldLogged("srs-cont-transfer-query");
}
@@ -40,15 +40,15 @@ import google.registry.model.reporting.HistoryEntry;
import google.registry.model.transfer.TransferData;
import google.registry.model.transfer.TransferResponse;
import google.registry.model.transfer.TransferStatus;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link ContactTransferRejectFlow}. */
public class ContactTransferRejectFlowTest
class ContactTransferRejectFlowTest
extends ContactTransferFlowTestCase<ContactTransferRejectFlow, ContactResource> {
@Before
public void setUp() {
@BeforeEach
void setUp() {
setEppInput("contact_transfer_reject.xml");
setClientIdForFlow("TheRegistrar");
setupContactWithPendingTransfer();
@@ -121,24 +121,24 @@ public class ContactTransferRejectFlowTest
}
@Test
public void testDryRun() throws Exception {
void testDryRun() throws Exception {
setEppInput("contact_transfer_reject.xml");
dryRunFlowAssertResponse(loadFile("contact_transfer_reject_response.xml"));
}
@Test
public void testSuccess() throws Exception {
void testSuccess() throws Exception {
doSuccessfulTest("contact_transfer_reject.xml", "contact_transfer_reject_response.xml");
}
@Test
public void testSuccess_domainAuthInfo() throws Exception {
void testSuccess_domainAuthInfo() throws Exception {
doSuccessfulTest("contact_transfer_reject_with_authinfo.xml",
"contact_transfer_reject_response.xml");
}
@Test
public void testFailure_badPassword() {
void testFailure_badPassword() {
// Change the contact's password so it does not match the password in the file.
contact =
persistResource(
@@ -154,7 +154,7 @@ public class ContactTransferRejectFlowTest
}
@Test
public void testFailure_neverBeenTransferred() {
void testFailure_neverBeenTransferred() {
changeTransferStatus(null);
EppException thrown =
assertThrows(
@@ -163,7 +163,7 @@ public class ContactTransferRejectFlowTest
}
@Test
public void testFailure_clientApproved() {
void testFailure_clientApproved() {
changeTransferStatus(TransferStatus.CLIENT_APPROVED);
EppException thrown =
assertThrows(
@@ -172,7 +172,7 @@ public class ContactTransferRejectFlowTest
}
@Test
public void testFailure_clientRejected() {
void testFailure_clientRejected() {
changeTransferStatus(TransferStatus.CLIENT_REJECTED);
EppException thrown =
assertThrows(
@@ -181,7 +181,7 @@ public class ContactTransferRejectFlowTest
}
@Test
public void testFailure_clientCancelled() {
void testFailure_clientCancelled() {
changeTransferStatus(TransferStatus.CLIENT_CANCELLED);
EppException thrown =
assertThrows(
@@ -190,7 +190,7 @@ public class ContactTransferRejectFlowTest
}
@Test
public void testFailure_serverApproved() {
void testFailure_serverApproved() {
changeTransferStatus(TransferStatus.SERVER_APPROVED);
EppException thrown =
assertThrows(
@@ -199,7 +199,7 @@ public class ContactTransferRejectFlowTest
}
@Test
public void testFailure_serverCancelled() {
void testFailure_serverCancelled() {
changeTransferStatus(TransferStatus.SERVER_CANCELLED);
EppException thrown =
assertThrows(
@@ -208,7 +208,7 @@ public class ContactTransferRejectFlowTest
}
@Test
public void testFailure_gainingClient() {
void testFailure_gainingClient() {
setClientIdForFlow("NewRegistrar");
EppException thrown =
assertThrows(
@@ -217,7 +217,7 @@ public class ContactTransferRejectFlowTest
}
@Test
public void testFailure_unrelatedClient() {
void testFailure_unrelatedClient() {
setClientIdForFlow("ClientZ");
EppException thrown =
assertThrows(
@@ -226,7 +226,7 @@ public class ContactTransferRejectFlowTest
}
@Test
public void testFailure_deletedContact() throws Exception {
void testFailure_deletedContact() throws Exception {
contact =
persistResource(contact.asBuilder().setDeletionTime(clock.nowUtc().minusDays(1)).build());
ResourceDoesNotExistException thrown =
@@ -238,7 +238,7 @@ public class ContactTransferRejectFlowTest
}
@Test
public void testFailure_nonexistentContact() throws Exception {
void testFailure_nonexistentContact() throws Exception {
deleteResource(contact);
ResourceDoesNotExistException thrown =
assertThrows(
@@ -249,7 +249,7 @@ public class ContactTransferRejectFlowTest
}
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
runFlow();
assertIcannReportingActivityFieldLogged("srs-cont-transfer-reject");
}
@@ -52,20 +52,20 @@ import google.registry.model.transfer.ContactTransferData;
import google.registry.model.transfer.TransferStatus;
import google.registry.persistence.VKey;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link ContactTransferRequestFlow}. */
public class ContactTransferRequestFlowTest
class ContactTransferRequestFlowTest
extends ContactTransferFlowTestCase<ContactTransferRequestFlow, ContactResource> {
public ContactTransferRequestFlowTest() {
ContactTransferRequestFlowTest() {
// We need the transfer to happen at exactly this time in order for the response to match up.
clock.setTo(DateTime.parse("2000-06-08T22:00:00.0Z"));
}
@Before
public void setUp() {
@BeforeEach
void setUp() {
setEppInput("contact_transfer_request.xml");
setClientIdForFlow("NewRegistrar");
contact = persistActiveContact("sh8013");
@@ -146,18 +146,18 @@ public class ContactTransferRequestFlowTest
}
@Test
public void testDryRun() throws Exception {
void testDryRun() throws Exception {
setEppInput("contact_transfer_request.xml");
dryRunFlowAssertResponse(loadFile("contact_transfer_request_response.xml"));
}
@Test
public void testSuccess() throws Exception {
void testSuccess() throws Exception {
doSuccessfulTest("contact_transfer_request.xml", "contact_transfer_request_response.xml");
}
@Test
public void testFailure_noAuthInfo() {
void testFailure_noAuthInfo() {
EppException thrown =
assertThrows(
MissingTransferRequestAuthInfoException.class,
@@ -166,7 +166,7 @@ public class ContactTransferRequestFlowTest
}
@Test
public void testFailure_badPassword() {
void testFailure_badPassword() {
// Change the contact's password so it does not match the password in the file.
contact =
persistResource(
@@ -182,37 +182,37 @@ public class ContactTransferRequestFlowTest
}
@Test
public void testSuccess_clientApproved() throws Exception {
void testSuccess_clientApproved() throws Exception {
changeTransferStatus(TransferStatus.CLIENT_APPROVED);
doSuccessfulTest("contact_transfer_request.xml", "contact_transfer_request_response.xml");
}
@Test
public void testSuccess_clientRejected() throws Exception {
void testSuccess_clientRejected() throws Exception {
changeTransferStatus(TransferStatus.CLIENT_REJECTED);
doSuccessfulTest("contact_transfer_request.xml", "contact_transfer_request_response.xml");
}
@Test
public void testSuccess_clientCancelled() throws Exception {
void testSuccess_clientCancelled() throws Exception {
changeTransferStatus(TransferStatus.CLIENT_CANCELLED);
doSuccessfulTest("contact_transfer_request.xml", "contact_transfer_request_response.xml");
}
@Test
public void testSuccess_serverApproved() throws Exception {
void testSuccess_serverApproved() throws Exception {
changeTransferStatus(TransferStatus.SERVER_APPROVED);
doSuccessfulTest("contact_transfer_request.xml", "contact_transfer_request_response.xml");
}
@Test
public void testSuccess_serverCancelled() throws Exception {
void testSuccess_serverCancelled() throws Exception {
changeTransferStatus(TransferStatus.SERVER_CANCELLED);
doSuccessfulTest("contact_transfer_request.xml", "contact_transfer_request_response.xml");
}
@Test
public void testFailure_pending() {
void testFailure_pending() {
contact =
persistResource(
contact
@@ -233,7 +233,7 @@ public class ContactTransferRequestFlowTest
}
@Test
public void testFailure_sponsoringClient() {
void testFailure_sponsoringClient() {
setClientIdForFlow("TheRegistrar");
EppException thrown =
assertThrows(
@@ -243,7 +243,7 @@ public class ContactTransferRequestFlowTest
}
@Test
public void testFailure_deletedContact() throws Exception {
void testFailure_deletedContact() throws Exception {
contact =
persistResource(contact.asBuilder().setDeletionTime(clock.nowUtc().minusDays(1)).build());
ResourceDoesNotExistException thrown =
@@ -255,7 +255,7 @@ public class ContactTransferRequestFlowTest
}
@Test
public void testFailure_nonexistentContact() throws Exception {
void testFailure_nonexistentContact() throws Exception {
deleteResource(contact);
ResourceDoesNotExistException thrown =
assertThrows(
@@ -266,7 +266,7 @@ public class ContactTransferRequestFlowTest
}
@Test
public void testFailure_clientTransferProhibited() {
void testFailure_clientTransferProhibited() {
contact =
persistResource(
contact.asBuilder().addStatusValue(StatusValue.CLIENT_TRANSFER_PROHIBITED).build());
@@ -279,7 +279,7 @@ public class ContactTransferRequestFlowTest
}
@Test
public void testFailure_serverTransferProhibited() {
void testFailure_serverTransferProhibited() {
contact =
persistResource(
contact.asBuilder().addStatusValue(StatusValue.SERVER_TRANSFER_PROHIBITED).build());
@@ -292,7 +292,7 @@ public class ContactTransferRequestFlowTest
}
@Test
public void testFailure_pendingDelete() {
void testFailure_pendingDelete() {
contact =
persistResource(contact.asBuilder().addStatusValue(StatusValue.PENDING_DELETE).build());
ResourceStatusProhibitsOperationException thrown =
@@ -304,7 +304,7 @@ public class ContactTransferRequestFlowTest
}
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
runFlow();
assertIcannReportingActivityFieldLogged("srs-cont-transfer-request");
}
@@ -41,13 +41,12 @@ import google.registry.model.contact.ContactResource;
import google.registry.model.contact.PostalInfo;
import google.registry.model.contact.PostalInfo.Type;
import google.registry.model.eppcommon.StatusValue;
import org.junit.Test;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link ContactUpdateFlow}. */
public class ContactUpdateFlowTest
extends ResourceFlowTestCase<ContactUpdateFlow, ContactResource> {
class ContactUpdateFlowTest extends ResourceFlowTestCase<ContactUpdateFlow, ContactResource> {
public ContactUpdateFlowTest() {
ContactUpdateFlowTest() {
setEppInput("contact_update.xml");
}
@@ -65,18 +64,18 @@ public class ContactUpdateFlowTest
}
@Test
public void testDryRun() throws Exception {
void testDryRun() throws Exception {
persistActiveContact(getUniqueIdFromCommand());
dryRunFlowAssertResponse(loadFile("generic_success_response.xml"));
}
@Test
public void testSuccess() throws Exception {
void testSuccess() throws Exception {
doSuccessfulTest();
}
@Test
public void testSuccess_updatingInternationalizedPostalInfoDeletesLocalized() throws Exception {
void testSuccess_updatingInternationalizedPostalInfoDeletesLocalized() throws Exception {
ContactResource contact =
persistResource(
newContactResource(getUniqueIdFromCommand()).asBuilder()
@@ -114,7 +113,7 @@ public class ContactUpdateFlowTest
}
@Test
public void testSuccess_updatingLocalizedPostalInfoDeletesInternationalized() throws Exception {
void testSuccess_updatingLocalizedPostalInfoDeletesInternationalized() throws Exception {
setEppInput("contact_update_localized.xml");
ContactResource contact =
persistResource(
@@ -153,7 +152,7 @@ public class ContactUpdateFlowTest
}
@Test
public void testSuccess_partialPostalInfoUpdate() throws Exception {
void testSuccess_partialPostalInfoUpdate() throws Exception {
setEppInput("contact_update_partial_postalinfo.xml");
persistResource(
newContactResource(getUniqueIdFromCommand()).asBuilder()
@@ -188,9 +187,8 @@ public class ContactUpdateFlowTest
.build());
}
@Test
public void testSuccess_updateOnePostalInfo_touchOtherPostalInfoPreservesIt() throws Exception {
void testSuccess_updateOnePostalInfo_touchOtherPostalInfoPreservesIt() throws Exception {
setEppInput("contact_update_partial_postalinfo_preserve_int.xml");
persistResource(
newContactResource(getUniqueIdFromCommand()).asBuilder()
@@ -256,7 +254,7 @@ public class ContactUpdateFlowTest
}
@Test
public void testFailure_neverExisted() throws Exception {
void testFailure_neverExisted() throws Exception {
ResourceDoesNotExistException thrown =
assertThrows(ResourceDoesNotExistException.class, this::runFlow);
assertThat(thrown).hasMessageThat().contains(String.format("(%s)", getUniqueIdFromCommand()));
@@ -264,7 +262,7 @@ public class ContactUpdateFlowTest
}
@Test
public void testFailure_existedButWasDeleted() throws Exception {
void testFailure_existedButWasDeleted() throws Exception {
persistDeletedContact(getUniqueIdFromCommand(), clock.nowUtc().minusDays(1));
ResourceDoesNotExistException thrown =
assertThrows(ResourceDoesNotExistException.class, this::runFlow);
@@ -273,7 +271,7 @@ public class ContactUpdateFlowTest
}
@Test
public void testFailure_statusValueNotClientSettable() throws Exception {
void testFailure_statusValueNotClientSettable() throws Exception {
setEppInput("contact_update_prohibited_status.xml");
persistActiveContact(getUniqueIdFromCommand());
EppException thrown = assertThrows(StatusNotClientSettableException.class, this::runFlow);
@@ -281,7 +279,7 @@ public class ContactUpdateFlowTest
}
@Test
public void testSuccess_superuserStatusValueNotClientSettable() throws Exception {
void testSuccess_superuserStatusValueNotClientSettable() throws Exception {
setEppInput("contact_update_prohibited_status.xml");
persistActiveContact(getUniqueIdFromCommand());
clock.advanceOneMilli();
@@ -290,7 +288,7 @@ public class ContactUpdateFlowTest
}
@Test
public void testFailure_unauthorizedClient() throws Exception {
void testFailure_unauthorizedClient() throws Exception {
sessionMetadata.setClientId("NewRegistrar");
persistActiveContact(getUniqueIdFromCommand());
EppException thrown = assertThrows(ResourceNotOwnedException.class, this::runFlow);
@@ -298,7 +296,7 @@ public class ContactUpdateFlowTest
}
@Test
public void testSuccess_superuserUnauthorizedClient() throws Exception {
void testSuccess_superuserUnauthorizedClient() throws Exception {
sessionMetadata.setClientId("NewRegistrar");
persistActiveContact(getUniqueIdFromCommand());
clock.advanceOneMilli();
@@ -307,7 +305,7 @@ public class ContactUpdateFlowTest
}
@Test
public void testSuccess_clientUpdateProhibited_removed() throws Exception {
void testSuccess_clientUpdateProhibited_removed() throws Exception {
setEppInput("contact_update_remove_client_update_prohibited.xml");
persistResource(
newContactResource(getUniqueIdFromCommand())
@@ -321,7 +319,7 @@ public class ContactUpdateFlowTest
}
@Test
public void testSuccess_superuserClientUpdateProhibited_notRemoved() throws Exception {
void testSuccess_superuserClientUpdateProhibited_notRemoved() throws Exception {
setEppInput("contact_update_prohibited_status.xml");
persistResource(
newContactResource(getUniqueIdFromCommand())
@@ -339,7 +337,7 @@ public class ContactUpdateFlowTest
}
@Test
public void testFailure_clientUpdateProhibited_notRemoved() throws Exception {
void testFailure_clientUpdateProhibited_notRemoved() throws Exception {
persistResource(
newContactResource(getUniqueIdFromCommand())
.asBuilder()
@@ -351,7 +349,7 @@ public class ContactUpdateFlowTest
}
@Test
public void testFailure_serverUpdateProhibited() throws Exception {
void testFailure_serverUpdateProhibited() throws Exception {
persistResource(
newContactResource(getUniqueIdFromCommand())
.asBuilder()
@@ -364,7 +362,7 @@ public class ContactUpdateFlowTest
}
@Test
public void testFailure_pendingDeleteProhibited() throws Exception {
void testFailure_pendingDeleteProhibited() throws Exception {
persistResource(
newContactResource(getUniqueIdFromCommand())
.asBuilder()
@@ -377,13 +375,13 @@ public class ContactUpdateFlowTest
}
@Test
public void testSuccess_nonAsciiInLocAddress() throws Exception {
void testSuccess_nonAsciiInLocAddress() throws Exception {
setEppInput("contact_update_hebrew_loc.xml");
doSuccessfulTest();
}
@Test
public void testFailure_nonAsciiInIntAddress() throws Exception {
void testFailure_nonAsciiInIntAddress() throws Exception {
setEppInput("contact_update_hebrew_int.xml");
persistActiveContact(getUniqueIdFromCommand());
EppException thrown =
@@ -392,7 +390,7 @@ public class ContactUpdateFlowTest
}
@Test
public void testFailure_declineDisclosure() throws Exception {
void testFailure_declineDisclosure() throws Exception {
setEppInput("contact_update_decline_disclosure.xml");
persistActiveContact(getUniqueIdFromCommand());
EppException thrown =
@@ -401,7 +399,7 @@ public class ContactUpdateFlowTest
}
@Test
public void testFailure_addRemoveSameValue() throws Exception {
void testFailure_addRemoveSameValue() throws Exception {
setEppInput("contact_update_add_remove_same.xml");
persistActiveContact(getUniqueIdFromCommand());
EppException thrown = assertThrows(AddRemoveSameValueException.class, this::runFlow);
@@ -409,7 +407,7 @@ public class ContactUpdateFlowTest
}
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
persistActiveContact(getUniqueIdFromCommand());
clock.advanceOneMilli();
runFlow();
@@ -74,14 +74,14 @@ import google.registry.model.reporting.HistoryEntry;
import org.joda.money.CurrencyUnit;
import org.joda.money.Money;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link DomainCheckFlow}. */
public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, DomainBase> {
class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, DomainBase> {
public DomainCheckFlowTest() {
DomainCheckFlowTest() {
setEppInput("domain_check_one_tld.xml");
}
@@ -102,14 +102,14 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
"specificuse,RESERVED_FOR_SPECIFIC_USE");
}
@Before
public void initCheckTest() {
@BeforeEach
void initCheckTest() {
createTld("tld", TldState.QUIET_PERIOD);
persistResource(Registry.get("tld").asBuilder().setReservedLists(createReservedList()).build());
}
@Test
public void testSuccess_nothingExists() throws Exception {
void testSuccess_nothingExists() throws Exception {
doCheckTest(
create(true, "example1.tld", null),
create(true, "example2.tld", null),
@@ -117,7 +117,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_oneExists() throws Exception {
void testSuccess_oneExists() throws Exception {
persistActiveDomain("example1.tld");
doCheckTest(
create(false, "example1.tld", "In use"),
@@ -126,7 +126,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_clTridNotSpecified() throws Exception {
void testSuccess_clTridNotSpecified() throws Exception {
setEppInput("domain_check_no_cltrid.xml");
persistActiveDomain("example1.tld");
doCheckTest(
@@ -136,7 +136,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_oneExists_allocationTokenIsInvalid() throws Exception {
void testSuccess_oneExists_allocationTokenIsInvalid() throws Exception {
setEppInput("domain_check_allocationtoken.xml");
persistActiveDomain("example1.tld");
doCheckTest(
@@ -147,7 +147,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_oneExists_allocationTokenIsValid() throws Exception {
void testSuccess_oneExists_allocationTokenIsValid() throws Exception {
setEppInput("domain_check_allocationtoken.xml");
persistActiveDomain("example1.tld");
persistResource(
@@ -160,7 +160,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_oneExists_allocationTokenIsRedeemed() throws Exception {
void testSuccess_oneExists_allocationTokenIsRedeemed() throws Exception {
setEppInput("domain_check_allocationtoken.xml");
persistActiveDomain("example1.tld");
persistResource(
@@ -177,7 +177,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_oneExists_allocationTokenForReservedDomain() throws Exception {
void testSuccess_oneExists_allocationTokenForReservedDomain() throws Exception {
setEppInput("domain_check_allocationtoken.xml");
persistActiveDomain("example1.tld");
persistResource(
@@ -194,7 +194,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_allocationTokenForReservedDomain_showsFee() throws Exception {
void testSuccess_allocationTokenForReservedDomain_showsFee() throws Exception {
setEppInput("domain_check_allocationtoken_fee_specificuse.xml");
createTld("example");
persistResource(
@@ -209,7 +209,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_oneExists_allocationTokenForWrongDomain() throws Exception {
void testSuccess_oneExists_allocationTokenForWrongDomain() throws Exception {
setEppInput("domain_check_allocationtoken.xml");
persistActiveDomain("example1.tld");
persistResource(
@@ -226,7 +226,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_notOutOfDateToken_forSpecificDomain() throws Exception {
void testSuccess_notOutOfDateToken_forSpecificDomain() throws Exception {
setEppInput("domain_check_allocationtoken.xml");
persistResource(
new AllocationToken.Builder()
@@ -248,7 +248,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_outOfDateToken_forSpecificDomain() throws Exception {
void testSuccess_outOfDateToken_forSpecificDomain() throws Exception {
setEppInput("domain_check_allocationtoken.xml");
persistResource(
new AllocationToken.Builder()
@@ -270,8 +270,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_nothingExists_reservationsOverrideInvalidAllocationTokens()
throws Exception {
void testSuccess_nothingExists_reservationsOverrideInvalidAllocationTokens() throws Exception {
setEppInput("domain_check_reserved_allocationtoken.xml");
// Fill out these reasons
doCheckTest(
@@ -283,7 +282,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_allocationTokenPromotion() throws Exception {
void testSuccess_allocationTokenPromotion() throws Exception {
createTld("example");
persistResource(
new AllocationToken.Builder()
@@ -302,7 +301,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_promotionNotActive() throws Exception {
void testSuccess_promotionNotActive() throws Exception {
createTld("example");
persistResource(
new AllocationToken.Builder()
@@ -324,7 +323,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_promoTokenNotValidForTld() throws Exception {
void testSuccess_promoTokenNotValidForTld() throws Exception {
createTld("example");
persistResource(
new AllocationToken.Builder()
@@ -347,7 +346,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_promoTokenNotValidForRegistrar() throws Exception {
void testSuccess_promoTokenNotValidForRegistrar() throws Exception {
createTld("example");
persistResource(
new AllocationToken.Builder()
@@ -370,7 +369,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_oneReservedInSunrise() throws Exception {
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");
@@ -382,7 +381,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_twoReservedOutsideSunrise() throws Exception {
void testSuccess_twoReservedOutsideSunrise() throws Exception {
setEppInput("domain_check_one_tld_reserved.xml");
doCheckTest(
create(false, "reserved.tld", "Reserved"),
@@ -392,8 +391,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_domainWithMultipleReservationType_useMostSevereMessage()
throws Exception {
void testSuccess_domainWithMultipleReservationType_useMostSevereMessage() throws Exception {
persistResource(
Registry.get("tld")
.asBuilder()
@@ -410,13 +408,13 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_anchorTenantReserved() throws Exception {
void testSuccess_anchorTenantReserved() throws Exception {
setEppInput("domain_check_anchor.xml");
doCheckTest(create(false, "anchor.tld", "Allocation token required"));
}
@Test
public void testSuccess_anchorTenantWithToken() throws Exception {
void testSuccess_anchorTenantWithToken() throws Exception {
setEppInput("domain_check_anchor_allocationtoken.xml");
persistResource(
new AllocationToken.Builder()
@@ -428,7 +426,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_multipartTld_oneReserved() throws Exception {
void testSuccess_multipartTld_oneReserved() throws Exception {
createTld("tld.foo");
persistResource(
Registry.get("tld.foo")
@@ -446,7 +444,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_oneExistsButWasDeleted() throws Exception {
void testSuccess_oneExistsButWasDeleted() throws Exception {
persistDeletedDomain("example1.tld", clock.nowUtc().minusDays(1));
doCheckTest(
create(true, "example1.tld", null),
@@ -455,7 +453,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_duplicatesAllowed() throws Exception {
void testSuccess_duplicatesAllowed() throws Exception {
setEppInput("domain_check_duplicates.xml");
doCheckTest(
create(true, "example1.tld", null),
@@ -464,40 +462,40 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_xmlMatches() throws Exception {
void testSuccess_xmlMatches() throws Exception {
persistActiveDomain("example2.tld");
runFlowAssertResponse(loadFile("domain_check_one_tld_response.xml"));
}
@Test
public void testSuccess_50IdsAllowed() throws Exception {
void testSuccess_50IdsAllowed() throws Exception {
// Make sure we don't have a regression that reduces the number of allowed checks.
setEppInput("domain_check_50.xml");
runFlow();
}
@Test
public void testSuccess_50IdsAllowed_withAllocationToken() throws Exception {
void testSuccess_50IdsAllowed_withAllocationToken() throws Exception {
setEppInput("domain_check_50_allocationtoken.xml");
runFlow();
}
@Test
public void testFailure_tooManyIds() {
void testFailure_tooManyIds() {
setEppInput("domain_check_51.xml");
EppException thrown = assertThrows(TooManyResourceChecksException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFailure_wrongTld() {
void testFailure_wrongTld() {
setEppInput("domain_check.xml");
EppException thrown = assertThrows(TldDoesNotExistException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFailure_notAuthorizedForTld() {
void testFailure_notAuthorizedForTld() {
persistResource(
loadRegistrar("TheRegistrar").asBuilder().setAllowedTlds(ImmutableSet.of()).build());
EppException thrown = assertThrows(NotAuthorizedForTldException.class, this::runFlow);
@@ -505,7 +503,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_superuserNotAuthorizedForTld() throws Exception {
void testSuccess_superuserNotAuthorizedForTld() throws Exception {
persistActiveDomain("example2.tld");
persistResource(
loadRegistrar("TheRegistrar").asBuilder().setAllowedTlds(ImmutableSet.of()).build());
@@ -521,92 +519,92 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testFailure_uppercase() {
void testFailure_uppercase() {
doFailingBadLabelTest("FOO.tld", BadDomainNameCharacterException.class);
}
@Test
public void testFailure_badCharacter() {
void testFailure_badCharacter() {
doFailingBadLabelTest("test_example.tld", BadDomainNameCharacterException.class);
}
@Test
public void testFailure_leadingDash() {
void testFailure_leadingDash() {
doFailingBadLabelTest("-example.tld", LeadingDashException.class);
}
@Test
public void testFailure_trailingDash() {
void testFailure_trailingDash() {
doFailingBadLabelTest("example-.tld", TrailingDashException.class);
}
@Test
public void testFailure_tooLong() {
void testFailure_tooLong() {
doFailingBadLabelTest(Strings.repeat("a", 64) + ".tld", DomainLabelTooLongException.class);
}
@Test
public void testFailure_leadingDot() {
void testFailure_leadingDot() {
doFailingBadLabelTest(".example.tld", EmptyDomainNamePartException.class);
}
@Test
public void testFailure_leadingDotTld() {
void testFailure_leadingDotTld() {
doFailingBadLabelTest("foo..tld", EmptyDomainNamePartException.class);
}
@Test
public void testFailure_tooManyParts() {
void testFailure_tooManyParts() {
doFailingBadLabelTest("foo.example.tld", BadDomainNamePartsCountException.class);
}
@Test
public void testFailure_tooFewParts() {
void testFailure_tooFewParts() {
doFailingBadLabelTest("tld", BadDomainNamePartsCountException.class);
}
@Test
public void testFailure_domainNameExistsAsTld_lowercase() {
void testFailure_domainNameExistsAsTld_lowercase() {
createTlds("foo.tld", "tld");
doFailingBadLabelTest("foo.tld", DomainNameExistsAsTldException.class);
}
@Test
public void testFailure_domainNameExistsAsTld_uppercase() {
void testFailure_domainNameExistsAsTld_uppercase() {
createTlds("foo.tld", "tld");
doFailingBadLabelTest("FOO.TLD", BadDomainNameCharacterException.class);
}
@Test
public void testFailure_invalidPunycode() {
void testFailure_invalidPunycode() {
doFailingBadLabelTest("xn--abcdefg.tld", InvalidPunycodeException.class);
}
@Test
public void testFailure_dashesInThirdAndFourthPosition() {
void testFailure_dashesInThirdAndFourthPosition() {
doFailingBadLabelTest("ab--cdefg.tld", DashesInThirdAndFourthException.class);
}
@Test
public void testFailure_tldDoesNotExist() {
void testFailure_tldDoesNotExist() {
doFailingBadLabelTest("foo.nosuchtld", TldDoesNotExistException.class);
}
@Test
public void testFailure_invalidIdnCodePoints() {
void testFailure_invalidIdnCodePoints() {
// .tld
doFailingBadLabelTest("xn--k3hel9n7bxlu1e.tld", InvalidIdnDomainLabelException.class);
}
@Test
public void testFailure_predelegation() {
void testFailure_predelegation() {
createTld("tld", PREDELEGATION);
EppException thrown = assertThrows(BadCommandForRegistryPhaseException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testAvailExtension() throws Exception {
void testAvailExtension() throws Exception {
persistActiveDomain("example1.tld");
setEppInput("domain_check_avail.xml");
doCheckTest(
@@ -617,7 +615,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
/** Test that premium names are shown as available even if the fee extension is not used. */
@Test
public void testAvailExtension_premiumDomainsAreAvailableWithoutExtension() throws Exception {
void testAvailExtension_premiumDomainsAreAvailableWithoutExtension() throws Exception {
createTld("example");
setEppInput("domain_check_premium.xml");
doCheckTest(create(true, "rich.example", null));
@@ -625,14 +623,14 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
/** Test multiyear periods and explicitly correct currency and that the avail extension is ok. */
@Test
public void testFeeExtension_v06() throws Exception {
void testFeeExtension_v06() throws Exception {
persistActiveDomain("example1.tld");
setEppInput("domain_check_fee_v06.xml", ImmutableMap.of("CURRENCY", "USD"));
runFlowAssertResponse(loadFile("domain_check_fee_response_v06.xml"));
}
@Test
public void testFeeExtension_multipleReservations() throws Exception {
void testFeeExtension_multipleReservations() throws Exception {
persistResource(
Registry.get("tld")
.asBuilder()
@@ -645,21 +643,21 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testFeeExtension_v11() throws Exception {
void testFeeExtension_v11() throws Exception {
persistActiveDomain("example1.tld");
setEppInput("domain_check_fee_v11.xml");
runFlowAssertResponse(loadFile("domain_check_fee_response_v11.xml"));
}
@Test
public void testFeeExtension_v12() throws Exception {
void testFeeExtension_v12() throws Exception {
persistActiveDomain("example1.tld");
setEppInput("domain_check_fee_v12.xml");
runFlowAssertResponse(loadFile("domain_check_fee_response_v12.xml"));
}
@Test
public void testSuccess_thirtyDomains_restoreFees() throws Exception {
void testSuccess_thirtyDomains_restoreFees() throws Exception {
// Note that 30 is more than 25, which is the maximum # of entity groups you can enlist in a
// single Datastore transaction (each DomainBase entity is in a separate entity group).
// It's also pretty common for registrars to send large domain checks.
@@ -676,7 +674,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
* currency.
*/
@Test
public void testFeeExtension_multipleCommands_v06() throws Exception {
void testFeeExtension_multipleCommands_v06() throws Exception {
setEppInput("domain_check_fee_multiple_commands_v06.xml");
runFlowAssertResponse(loadFile("domain_check_fee_multiple_commands_response_v06.xml"));
}
@@ -684,21 +682,21 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
// Version 11 cannot have multiple commands.
@Test
public void testFeeExtension_multipleCommands_v12() throws Exception {
void testFeeExtension_multipleCommands_v12() throws Exception {
setEppInput("domain_check_fee_multiple_commands_v12.xml");
runFlowAssertResponse(loadFile("domain_check_fee_multiple_commands_response_v12.xml"));
}
/** Test the same as {@link #testFeeExtension_multipleCommands_v06} with premium labels. */
@Test
public void testFeeExtension_premiumLabels_v06() throws Exception {
void testFeeExtension_premiumLabels_v06() throws Exception {
createTld("example");
setEppInput("domain_check_fee_premium_v06.xml");
runFlowAssertResponse(loadFile("domain_check_fee_premium_response_v06.xml"));
}
@Test
public void testFeeExtension_premium_eap_v06() throws Exception {
void testFeeExtension_premium_eap_v06() throws Exception {
createTld("example");
setEppInput("domain_check_fee_premium_v06.xml");
clock.setTo(DateTime.parse("2010-01-01T10:00:00Z"));
@@ -718,7 +716,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testFeeExtension_premium_eap_v06_withRenewalOnRestore() throws Exception {
void testFeeExtension_premium_eap_v06_withRenewalOnRestore() throws Exception {
createTld("example");
setEppInput("domain_check_fee_premium_v06.xml");
clock.setTo(DateTime.parse("2010-01-01T10:00:00Z"));
@@ -739,35 +737,35 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testFeeExtension_premiumLabels_v11_create() throws Exception {
void testFeeExtension_premiumLabels_v11_create() throws Exception {
createTld("example");
setEppInput("domain_check_fee_premium_v11_create.xml");
runFlowAssertResponse(loadFile("domain_check_fee_premium_response_v11_create.xml"));
}
@Test
public void testFeeExtension_premiumLabels_v11_renew() throws Exception {
void testFeeExtension_premiumLabels_v11_renew() throws Exception {
createTld("example");
setEppInput("domain_check_fee_premium_v11_renew.xml");
runFlowAssertResponse(loadFile("domain_check_fee_premium_response_v11_renew.xml"));
}
@Test
public void testFeeExtension_premiumLabels_v11_transfer() throws Exception {
void testFeeExtension_premiumLabels_v11_transfer() throws Exception {
createTld("example");
setEppInput("domain_check_fee_premium_v11_transfer.xml");
runFlowAssertResponse(loadFile("domain_check_fee_premium_response_v11_transfer.xml"));
}
@Test
public void testFeeExtension_premiumLabels_v11_restore() throws Exception {
void testFeeExtension_premiumLabels_v11_restore() throws Exception {
createTld("example");
setEppInput("domain_check_fee_premium_v11_restore.xml");
runFlowAssertResponse(loadFile("domain_check_fee_premium_response_v11_restore.xml"));
}
@Test
public void testFeeExtension_premiumLabels_v11_restore_withRenewal() throws Exception {
void testFeeExtension_premiumLabels_v11_restore_withRenewal() throws Exception {
setEppInput("domain_check_fee_premium_v11_restore.xml");
createTld("example");
persistPendingDeleteDomain("rich.example");
@@ -776,21 +774,21 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testFeeExtension_premiumLabels_v11_update() throws Exception {
void testFeeExtension_premiumLabels_v11_update() throws Exception {
createTld("example");
setEppInput("domain_check_fee_premium_v11_update.xml");
runFlowAssertResponse(loadFile("domain_check_fee_premium_response_v11_update.xml"));
}
@Test
public void testFeeExtension_premiumLabels_v12() throws Exception {
void testFeeExtension_premiumLabels_v12() throws Exception {
createTld("example");
setEppInput("domain_check_fee_premium_v12.xml");
runFlowAssertResponse(loadFile("domain_check_fee_premium_response_v12.xml"));
}
@Test
public void testFeeExtension_premiumLabels_v12_withRenewalOnRestore() throws Exception {
void testFeeExtension_premiumLabels_v12_withRenewalOnRestore() throws Exception {
createTld("example");
setEppInput("domain_check_fee_premium_v12.xml");
persistPendingDeleteDomain("rich.example");
@@ -798,7 +796,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testFeeExtension_fractionalCost() throws Exception {
void testFeeExtension_fractionalCost() throws Exception {
// Note that the response xml expects to see "11.10" with two digits after the decimal point.
// This works because Money.getAmount(), used in the flow, returns a BigDecimal that is set to
// display the number of digits that is conventional for the given currency.
@@ -813,7 +811,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
/** Test that create fees are properly omitted/classed on names on reserved lists. */
@Test
public void testFeeExtension_reservedName_v06() throws Exception {
void testFeeExtension_reservedName_v06() throws Exception {
persistResource(
Registry.get("tld")
.asBuilder()
@@ -826,7 +824,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
/** The tests must be split up for version 11, which allows only one command at a time. */
@Test
public void testFeeExtension_reservedName_v11_create() throws Exception {
void testFeeExtension_reservedName_v11_create() throws Exception {
persistResource(
Registry.get("tld")
.asBuilder()
@@ -838,7 +836,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testFeeExtension_reservedName_v11_renew() throws Exception {
void testFeeExtension_reservedName_v11_renew() throws Exception {
persistResource(
Registry.get("tld")
.asBuilder()
@@ -850,7 +848,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testFeeExtension_reservedName_v11_transfer() throws Exception {
void testFeeExtension_reservedName_v11_transfer() throws Exception {
persistResource(
Registry.get("tld")
.asBuilder()
@@ -862,7 +860,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testFeeExtension_reservedName_v11_restore() throws Exception {
void testFeeExtension_reservedName_v11_restore() throws Exception {
persistResource(
Registry.get("tld")
.asBuilder()
@@ -874,7 +872,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testFeeExtension_reservedName_v11_restore_withRenewals() throws Exception {
void testFeeExtension_reservedName_v11_restore_withRenewals() throws Exception {
persistResource(
Registry.get("tld")
.asBuilder()
@@ -891,7 +889,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testFeeExtension_reservedName_v12() throws Exception {
void testFeeExtension_reservedName_v12() throws Exception {
persistResource(
Registry.get("tld")
.asBuilder()
@@ -903,7 +901,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testFeeExtension_feesNotOmittedOnReservedNamesInSunrise_v06() throws Exception {
void testFeeExtension_feesNotOmittedOnReservedNamesInSunrise_v06() throws Exception {
createTld("tld", START_DATE_SUNRISE);
persistResource(
Registry.get("tld")
@@ -916,7 +914,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testFeeExtension_feesNotOmittedOnReservedNamesInSunrise_v06_withRestoreRenewals()
void testFeeExtension_feesNotOmittedOnReservedNamesInSunrise_v06_withRestoreRenewals()
throws Exception {
createTld("tld", START_DATE_SUNRISE);
persistResource(
@@ -935,8 +933,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testFeeExtension_feesNotOmittedOnReservedNamesInSunrise_v11_create()
throws Exception {
void testFeeExtension_feesNotOmittedOnReservedNamesInSunrise_v11_create() throws Exception {
createTld("tld", START_DATE_SUNRISE);
persistResource(
Registry.get("tld")
@@ -949,7 +946,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testFeeExtension_feesNotOmittedOnReservedNamesInSunrise_v11_renew() throws Exception {
void testFeeExtension_feesNotOmittedOnReservedNamesInSunrise_v11_renew() throws Exception {
createTld("tld", START_DATE_SUNRISE);
persistResource(
Registry.get("tld")
@@ -962,8 +959,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testFeeExtension_feesNotOmittedOnReservedNamesInSunrise_v11_transfer()
throws Exception {
void testFeeExtension_feesNotOmittedOnReservedNamesInSunrise_v11_transfer() throws Exception {
createTld("tld", START_DATE_SUNRISE);
persistResource(
Registry.get("tld")
@@ -976,8 +972,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testFeeExtension_feesNotOmittedOnReservedNamesInSunrise_v11_restore()
throws Exception {
void testFeeExtension_feesNotOmittedOnReservedNamesInSunrise_v11_restore() throws Exception {
createTld("tld", START_DATE_SUNRISE);
persistResource(
Registry.get("tld")
@@ -990,7 +985,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testFeeExtension_feesNotOmittedOnReservedNamesInSunrise_v12() throws Exception {
void testFeeExtension_feesNotOmittedOnReservedNamesInSunrise_v12() throws Exception {
createTld("tld", START_DATE_SUNRISE);
persistResource(
Registry.get("tld")
@@ -1003,91 +998,91 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testFeeExtension_wrongCurrency_v06() {
void testFeeExtension_wrongCurrency_v06() {
setEppInput("domain_check_fee_euro_v06.xml");
EppException thrown = assertThrows(CurrencyUnitMismatchException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFeeExtension_wrongCurrency_v11() {
void testFeeExtension_wrongCurrency_v11() {
setEppInput("domain_check_fee_euro_v11.xml");
EppException thrown = assertThrows(CurrencyUnitMismatchException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFeeExtension_wrongCurrency_v12() {
void testFeeExtension_wrongCurrency_v12() {
setEppInput("domain_check_fee_euro_v12.xml");
EppException thrown = assertThrows(CurrencyUnitMismatchException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFeeExtension_badCurrencyType() {
void testFeeExtension_badCurrencyType() {
setEppInput("domain_check_fee_v06.xml", ImmutableMap.of("CURRENCY", "BAD"));
EppException thrown = assertThrows(UnknownCurrencyEppException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFeeExtension_periodNotInYears_v06() {
void testFeeExtension_periodNotInYears_v06() {
setEppInput("domain_check_fee_bad_period_v06.xml");
EppException thrown = assertThrows(BadPeriodUnitException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFeeExtension_periodNotInYears_v11() {
void testFeeExtension_periodNotInYears_v11() {
setEppInput("domain_check_fee_bad_period_v11.xml");
EppException thrown = assertThrows(BadPeriodUnitException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFeeExtension_periodNotInYears_v12() {
void testFeeExtension_periodNotInYears_v12() {
setEppInput("domain_check_fee_bad_period_v12.xml");
EppException thrown = assertThrows(BadPeriodUnitException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFeeExtension_commandWithPhase_v06() {
void testFeeExtension_commandWithPhase_v06() {
setEppInput("domain_check_fee_command_phase_v06.xml");
EppException thrown = assertThrows(FeeChecksDontSupportPhasesException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFeeExtension_commandWithPhase_v11() {
void testFeeExtension_commandWithPhase_v11() {
setEppInput("domain_check_fee_command_phase_v11.xml");
EppException thrown = assertThrows(FeeChecksDontSupportPhasesException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFeeExtension_commandWithPhase_v12() {
void testFeeExtension_commandWithPhase_v12() {
setEppInput("domain_check_fee_command_phase_v12.xml");
EppException thrown = assertThrows(FeeChecksDontSupportPhasesException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFeeExtension_commandSubphase_v06() {
void testFeeExtension_commandSubphase_v06() {
setEppInput("domain_check_fee_command_subphase_v06.xml");
EppException thrown = assertThrows(FeeChecksDontSupportPhasesException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFeeExtension_commandSubphase_v11() {
void testFeeExtension_commandSubphase_v11() {
setEppInput("domain_check_fee_command_subphase_v11.xml");
EppException thrown = assertThrows(FeeChecksDontSupportPhasesException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFeeExtension_commandSubphase_v12() {
void testFeeExtension_commandSubphase_v12() {
setEppInput("domain_check_fee_command_subphase_v12.xml");
EppException thrown = assertThrows(FeeChecksDontSupportPhasesException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
@@ -1095,7 +1090,7 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
// This test is only relevant for v06, since domain names are not specified in v11 or v12.
@Test
public void testFeeExtension_feeCheckNotInAvailabilityCheck() {
void testFeeExtension_feeCheckNotInAvailabilityCheck() {
setEppInput("domain_check_fee_not_in_avail.xml");
EppException thrown =
assertThrows(OnlyCheckedNamesCanBeFeeCheckedException.class, this::runFlow);
@@ -1103,84 +1098,84 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testFeeExtension_multiyearRestore_v06() {
void testFeeExtension_multiyearRestore_v06() {
setEppInput("domain_check_fee_multiyear_restore_v06.xml");
EppException thrown = assertThrows(RestoresAreAlwaysForOneYearException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFeeExtension_multiyearRestore_v11() {
void testFeeExtension_multiyearRestore_v11() {
setEppInput("domain_check_fee_multiyear_restore_v11.xml");
EppException thrown = assertThrows(RestoresAreAlwaysForOneYearException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFeeExtension_multiyearRestore_v12() {
void testFeeExtension_multiyearRestore_v12() {
setEppInput("domain_check_fee_multiyear_restore_v12.xml");
EppException thrown = assertThrows(RestoresAreAlwaysForOneYearException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFeeExtension_multiyearTransfer_v06() {
void testFeeExtension_multiyearTransfer_v06() {
setEppInput("domain_check_fee_multiyear_transfer_v06.xml");
EppException thrown = assertThrows(TransfersAreAlwaysForOneYearException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFeeExtension_multiyearTransfer_v11() {
void testFeeExtension_multiyearTransfer_v11() {
setEppInput("domain_check_fee_multiyear_transfer_v11.xml");
EppException thrown = assertThrows(TransfersAreAlwaysForOneYearException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFeeExtension_multiyearTransfer_v12() {
void testFeeExtension_multiyearTransfer_v12() {
setEppInput("domain_check_fee_multiyear_transfer_v12.xml");
EppException thrown = assertThrows(TransfersAreAlwaysForOneYearException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFeeExtension_unknownCommand_v06() {
void testFeeExtension_unknownCommand_v06() {
setEppInput("domain_check_fee_unknown_command_v06.xml");
EppException thrown = assertThrows(UnknownFeeCommandException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFeeExtension_unknownCommand_v11() {
void testFeeExtension_unknownCommand_v11() {
setEppInput("domain_check_fee_unknown_command_v11.xml");
EppException thrown = assertThrows(UnknownFeeCommandException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFeeExtension_unknownCommand_v12() {
void testFeeExtension_unknownCommand_v12() {
setEppInput("domain_check_fee_unknown_command_v12.xml");
EppException thrown = assertThrows(UnknownFeeCommandException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFeeExtension_invalidCommand_v06() {
void testFeeExtension_invalidCommand_v06() {
setEppInput("domain_check_fee_invalid_command_v06.xml");
EppException thrown = assertThrows(UnknownFeeCommandException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFeeExtension_invalidCommand_v11() {
void testFeeExtension_invalidCommand_v11() {
setEppInput("domain_check_fee_invalid_command_v11.xml");
EppException thrown = assertThrows(UnknownFeeCommandException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFeeExtension_invalidCommand_v12() {
void testFeeExtension_invalidCommand_v12() {
setEppInput("domain_check_fee_invalid_command_v12.xml");
EppException thrown = assertThrows(UnknownFeeCommandException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
@@ -1205,35 +1200,35 @@ public class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFl
}
@Test
public void testSuccess_eapFeeCheck_v06() throws Exception {
void testSuccess_eapFeeCheck_v06() throws Exception {
runEapFeeCheckTest("domain_check_fee_v06.xml", "domain_check_eap_fee_response_v06.xml");
}
@Test
public void testSuccess_eapFeeCheck_v11() throws Exception {
void testSuccess_eapFeeCheck_v11() throws Exception {
runEapFeeCheckTest("domain_check_fee_v11.xml", "domain_check_eap_fee_response_v11.xml");
}
@Test
public void testSuccess_eapFeeCheck_v12() throws Exception {
void testSuccess_eapFeeCheck_v12() throws Exception {
runEapFeeCheckTest("domain_check_fee_v12.xml", "domain_check_eap_fee_response_v12.xml");
}
@Test
public void testSuccess_eapFeeCheck_date_v12() throws Exception {
void testSuccess_eapFeeCheck_date_v12() throws Exception {
runEapFeeCheckTest(
"domain_check_fee_date_v12.xml", "domain_check_eap_fee_response_date_v12.xml");
}
@Ignore
@Disabled
@Test
public void testSuccess_feeCheck_multipleRanges() {
void testSuccess_feeCheck_multipleRanges() {
// TODO: If at some point we have more than one type of fees that are time dependent, populate
// this test to test if the notAfter date is the earliest of the end points of the ranges.
}
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
createTlds("com", "net", "org");
setEppInput("domain_check.xml");
runFlow();
@@ -36,19 +36,19 @@ import google.registry.flows.exceptions.TooManyResourceChecksException;
import google.registry.model.domain.DomainBase;
import google.registry.model.registry.Registry;
import google.registry.model.registry.Registry.TldState;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link DomainClaimsCheckFlow}. */
public class DomainClaimsCheckFlowTest
extends ResourceFlowTestCase<DomainClaimsCheckFlow, DomainBase> {
public DomainClaimsCheckFlowTest() {
DomainClaimsCheckFlowTest() {
setEppInput("domain_check_claims.xml");
}
@Before
public void initCheckTest() {
@BeforeEach
void initCheckTest() {
createTld("tld");
}
@@ -60,25 +60,25 @@ public class DomainClaimsCheckFlowTest
}
@Test
public void testSuccess_noClaims() throws Exception {
void testSuccess_noClaims() throws Exception {
doSuccessfulTest("domain_check_claims_response_none.xml");
}
@Test
public void testSuccess_quietPeriod() throws Exception {
void testSuccess_quietPeriod() throws Exception {
createTld("tld", TldState.QUIET_PERIOD);
doSuccessfulTest("domain_check_claims_response_none.xml");
}
@Test
public void testSuccess_oneClaim() throws Exception {
void testSuccess_oneClaim() throws Exception {
persistClaimsList(
ImmutableMap.of("example2", "2013041500/2/6/9/rJ1NrDO92vDsAzf7EQzgjX4R0000000001"));
doSuccessfulTest("domain_check_claims_response.xml");
}
@Test
public void testSuccess_multipleTlds() throws Exception {
void testSuccess_multipleTlds() throws Exception {
setEppInput("domain_check_claims_multiple_tlds.xml");
createTld("tld1");
createTld("tld2");
@@ -88,28 +88,28 @@ public class DomainClaimsCheckFlowTest
}
@Test
public void testSuccess_50IdsAllowed() throws Exception {
void testSuccess_50IdsAllowed() throws Exception {
// Make sure we don't have a regression that reduces the number of allowed checks.
setEppInput("domain_check_claims_50.xml");
runFlow();
}
@Test
public void testFailure_TooManyIds() {
void testFailure_TooManyIds() {
setEppInput("domain_check_claims_51.xml");
EppException thrown = assertThrows(TooManyResourceChecksException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFailure_tldDoesntExist() {
void testFailure_tldDoesntExist() {
setEppInput("domain_check_claims_bad_tld.xml");
EppException thrown = assertThrows(TldDoesNotExistException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFailure_notAuthorizedForTld() {
void testFailure_notAuthorizedForTld() {
persistResource(
loadRegistrar("TheRegistrar").asBuilder().setAllowedTlds(ImmutableSet.of()).build());
EppException thrown = assertThrows(NotAuthorizedForTldException.class, this::runFlow);
@@ -117,7 +117,7 @@ public class DomainClaimsCheckFlowTest
}
@Test
public void testSuccess_superuserNotAuthorizedForTld() throws Exception {
void testSuccess_superuserNotAuthorizedForTld() throws Exception {
persistClaimsList(
ImmutableMap.of("example2", "2013041500/2/6/9/rJ1NrDO92vDsAzf7EQzgjX4R0000000001"));
persistResource(
@@ -130,7 +130,7 @@ public class DomainClaimsCheckFlowTest
}
@Test
public void testFailure_predelgation() {
void testFailure_predelgation() {
createTld("tld", PREDELEGATION);
setEppInput("domain_check_claims.xml");
EppException thrown = assertThrows(BadCommandForRegistryPhaseException.class, this::runFlow);
@@ -138,7 +138,7 @@ public class DomainClaimsCheckFlowTest
}
@Test
public void testFailure_allocationToken() {
void testFailure_allocationToken() {
createTld("tld");
setEppInput("domain_check_claims_allocationtoken.xml");
EppException thrown =
@@ -147,7 +147,7 @@ public class DomainClaimsCheckFlowTest
}
@Test
public void testFailure_multipleTlds_oneHasEndedClaims() {
void testFailure_multipleTlds_oneHasEndedClaims() {
createTlds("tld1", "tld2");
persistResource(
Registry.get("tld2").asBuilder().setClaimsPeriodEnd(clock.nowUtc().minusMillis(1)).build());
@@ -157,7 +157,7 @@ public class DomainClaimsCheckFlowTest
}
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
runFlow();
assertIcannReportingActivityFieldLogged("srs-dom-check");
assertTldsFieldLogged("tld");
File diff suppressed because it is too large Load Diff
@@ -99,11 +99,11 @@ import java.util.Map;
import org.joda.money.Money;
import org.joda.time.DateTime;
import org.joda.time.Duration;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link DomainDeleteFlow}. */
public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow, DomainBase> {
class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow, DomainBase> {
private DomainBase domain;
private HistoryEntry earlierHistoryEntry;
@@ -119,13 +119,13 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
private static final ImmutableMap<String, String> FEE_12_MAP =
ImmutableMap.of("FEE_VERSION", "0.12", "FEE_NS", "fee12");
public DomainDeleteFlowTest() {
DomainDeleteFlowTest() {
setEppInput("domain_delete.xml");
clock.setTo(TIME_BEFORE_FLOW);
}
@Before
public void initDomainTest() {
@BeforeEach
void initDomainTest() {
createTld("tld");
}
@@ -261,7 +261,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testSuccess_asyncActionsAreEnqueued() throws Exception {
void testSuccess_asyncActionsAreEnqueued() throws Exception {
persistResource(
Registry.get("tld")
.asBuilder()
@@ -286,7 +286,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testDryRun() throws Exception {
void testDryRun() throws Exception {
setUpSuccessfulTest();
setUpGracePeriods(
GracePeriod.create(GracePeriodStatus.ADD, TIME_BEFORE_FLOW.plusDays(1), "foo", null));
@@ -294,7 +294,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testDryRun_noGracePeriods() throws Exception {
void testDryRun_noGracePeriods() throws Exception {
setUpSuccessfulTest();
dryRunFlowAssertResponse(loadFile("domain_delete_response_pending.xml"));
}
@@ -329,7 +329,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testSuccess_updatedEppUpdateTimeAfterPendingRedemption() throws Exception {
void testSuccess_updatedEppUpdateTimeAfterPendingRedemption() throws Exception {
persistResource(
Registry.get("tld")
.asBuilder()
@@ -353,26 +353,26 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testSuccess_addGracePeriodResultsInImmediateDelete() throws Exception {
void testSuccess_addGracePeriodResultsInImmediateDelete() throws Exception {
sessionMetadata.setServiceExtensionUris(ImmutableSet.of());
doImmediateDeleteTest(GracePeriodStatus.ADD, "generic_success_response.xml");
}
@Test
public void testSuccess_addGracePeriodCredit_v06() throws Exception {
void testSuccess_addGracePeriodCredit_v06() throws Exception {
removeServiceExtensionUri(ServiceExtension.FEE_0_11.getUri());
removeServiceExtensionUri(ServiceExtension.FEE_0_12.getUri());
doImmediateDeleteTest(GracePeriodStatus.ADD, "domain_delete_response_fee.xml", FEE_06_MAP);
}
@Test
public void testSuccess_addGracePeriodCredit_v11() throws Exception {
void testSuccess_addGracePeriodCredit_v11() throws Exception {
removeServiceExtensionUri(ServiceExtension.FEE_0_12.getUri());
doImmediateDeleteTest(GracePeriodStatus.ADD, "domain_delete_response_fee.xml", FEE_11_MAP);
}
@Test
public void testSuccess_addGracePeriodCredit_v12() throws Exception {
void testSuccess_addGracePeriodCredit_v12() throws Exception {
doImmediateDeleteTest(GracePeriodStatus.ADD, "domain_delete_response_fee.xml", FEE_12_MAP);
}
@@ -443,31 +443,31 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testSuccess_noAddGracePeriodResultsInPendingDelete() throws Exception {
void testSuccess_noAddGracePeriodResultsInPendingDelete() throws Exception {
sessionMetadata.setServiceExtensionUris(ImmutableSet.of());
doSuccessfulTest_noAddGracePeriod("domain_delete_response_pending.xml");
}
@Test
public void testSuccess_renewGracePeriodCredit_v06() throws Exception {
void testSuccess_renewGracePeriodCredit_v06() throws Exception {
removeServiceExtensionUri(ServiceExtension.FEE_0_11.getUri());
removeServiceExtensionUri(ServiceExtension.FEE_0_12.getUri());
doSuccessfulTest_noAddGracePeriod("domain_delete_response_pending_fee.xml", FEE_06_MAP);
}
@Test
public void testSuccess_renewGracePeriodCredit_v11() throws Exception {
void testSuccess_renewGracePeriodCredit_v11() throws Exception {
removeServiceExtensionUri(ServiceExtension.FEE_0_12.getUri());
doSuccessfulTest_noAddGracePeriod("domain_delete_response_pending_fee.xml", FEE_11_MAP);
}
@Test
public void testSuccess_renewGracePeriodCredit_v12() throws Exception {
void testSuccess_renewGracePeriodCredit_v12() throws Exception {
doSuccessfulTest_noAddGracePeriod("domain_delete_response_pending_fee.xml", FEE_12_MAP);
}
@Test
public void testSuccess_autorenewPollMessageIsNotDeleted() throws Exception {
void testSuccess_autorenewPollMessageIsNotDeleted() throws Exception {
setUpSuccessfulTest();
// Modify the autorenew poll message so that it has unacked messages in the past. This should
// prevent it from being deleted when the domain is deleted.
@@ -489,7 +489,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testSuccess_nonDefaultRedemptionGracePeriod() throws Exception {
void testSuccess_nonDefaultRedemptionGracePeriod() throws Exception {
sessionMetadata.setServiceExtensionUris(ImmutableSet.of());
persistResource(
Registry.get("tld")
@@ -500,7 +500,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testSuccess_nonDefaultPendingDeleteLength() throws Exception {
void testSuccess_nonDefaultPendingDeleteLength() throws Exception {
sessionMetadata.setServiceExtensionUris(ImmutableSet.of());
persistResource(
Registry.get("tld")
@@ -511,7 +511,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testSuccess_autoRenewGracePeriod_v06() throws Exception {
void testSuccess_autoRenewGracePeriod_v06() throws Exception {
removeServiceExtensionUri(ServiceExtension.FEE_0_11.getUri());
removeServiceExtensionUri(ServiceExtension.FEE_0_12.getUri());
setUpAutorenewGracePeriod();
@@ -520,7 +520,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testSuccess_autoRenewGracePeriod_v11() throws Exception {
void testSuccess_autoRenewGracePeriod_v11() throws Exception {
removeServiceExtensionUri(ServiceExtension.FEE_0_12.getUri());
setUpAutorenewGracePeriod();
clock.advanceOneMilli();
@@ -528,14 +528,14 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testSuccess_autoRenewGracePeriod_v12() throws Exception {
void testSuccess_autoRenewGracePeriod_v12() throws Exception {
setUpAutorenewGracePeriod();
clock.advanceOneMilli();
runFlowAssertResponse(loadFile("domain_delete_response_autorenew_fee.xml", FEE_12_MAP));
}
@Test
public void testSuccess_autoRenewGracePeriod_priceChanges_v06() throws Exception {
void testSuccess_autoRenewGracePeriod_priceChanges_v06() throws Exception {
removeServiceExtensionUri(ServiceExtension.FEE_0_11.getUri());
removeServiceExtensionUri(ServiceExtension.FEE_0_12.getUri());
persistResource(
@@ -554,7 +554,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testSuccess_autoRenewGracePeriod_priceChanges_v11() throws Exception {
void testSuccess_autoRenewGracePeriod_priceChanges_v11() throws Exception {
removeServiceExtensionUri(ServiceExtension.FEE_0_12.getUri());
persistResource(
Registry.get("tld")
@@ -572,7 +572,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testSuccess_autoRenewGracePeriod_priceChanges_v12() throws Exception {
void testSuccess_autoRenewGracePeriod_priceChanges_v12() throws Exception {
persistResource(
Registry.get("tld")
.asBuilder()
@@ -589,7 +589,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testSuccess_noPendingTransfer_deletedAndHasNoTransferData() throws Exception {
void testSuccess_noPendingTransfer_deletedAndHasNoTransferData() throws Exception {
setClientIdForFlow("TheRegistrar");
setUpSuccessfulTest();
clock.advanceOneMilli();
@@ -599,7 +599,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testSuccess_pendingTransfer() throws Exception {
void testSuccess_pendingTransfer() throws Exception {
setClientIdForFlow("TheRegistrar");
setUpSuccessfulTest();
// Modify the domain we are testing to include a pending transfer.
@@ -691,7 +691,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testUnlinkingOfResources() throws Exception {
void testUnlinkingOfResources() throws Exception {
sessionMetadata.setServiceExtensionUris(ImmutableSet.of());
setUpSuccessfulTest();
// Persist the billing event so it can be retrieved for cancellation generation and checking.
@@ -726,7 +726,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testSuccess_deletedSubordinateDomain() throws Exception {
void testSuccess_deletedSubordinateDomain() throws Exception {
setUpSuccessfulTest();
persistResource(
newHostResource("ns1." + getUniqueIdFromCommand())
@@ -741,7 +741,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testFailure_predelegation() throws Exception {
void testFailure_predelegation() throws Exception {
createTld("tld", PREDELEGATION);
setUpSuccessfulTest();
EppException thrown = assertThrows(BadCommandForRegistryPhaseException.class, this::runFlow);
@@ -749,7 +749,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testSuccess_superuserPredelegation() throws Exception {
void testSuccess_superuserPredelegation() throws Exception {
createTld("tld", PREDELEGATION);
setUpSuccessfulTest();
clock.advanceOneMilli();
@@ -758,14 +758,14 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testFailure_neverExisted() throws Exception {
void testFailure_neverExisted() throws Exception {
ResourceDoesNotExistException thrown =
assertThrows(ResourceDoesNotExistException.class, this::runFlow);
assertThat(thrown).hasMessageThat().contains(String.format("(%s)", getUniqueIdFromCommand()));
}
@Test
public void testFailure_existedButWasDeleted() throws Exception {
void testFailure_existedButWasDeleted() throws Exception {
persistDeletedDomain(getUniqueIdFromCommand(), clock.nowUtc().minusDays(1));
ResourceDoesNotExistException thrown =
assertThrows(ResourceDoesNotExistException.class, this::runFlow);
@@ -773,7 +773,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testFailure_hasSubordinateHosts() throws Exception {
void testFailure_hasSubordinateHosts() throws Exception {
DomainBase domain = persistActiveDomain(getUniqueIdFromCommand());
HostResource subordinateHost =
persistResource(
@@ -787,7 +787,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testFailure_unauthorizedClient() throws Exception {
void testFailure_unauthorizedClient() throws Exception {
sessionMetadata.setClientId("NewRegistrar");
persistActiveDomain(getUniqueIdFromCommand());
EppException thrown = assertThrows(ResourceNotOwnedException.class, this::runFlow);
@@ -795,7 +795,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testSuccess_superuserUnauthorizedClient() throws Exception {
void testSuccess_superuserUnauthorizedClient() throws Exception {
sessionMetadata.setClientId("NewRegistrar");
setUpSuccessfulTest();
clock.advanceOneMilli();
@@ -804,7 +804,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testFailure_notAuthorizedForTld() throws Exception {
void testFailure_notAuthorizedForTld() throws Exception {
setUpSuccessfulTest();
persistResource(
loadRegistrar("TheRegistrar").asBuilder().setAllowedTlds(ImmutableSet.of()).build());
@@ -813,7 +813,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testSuccess_superuserNotAuthorizedForTld() throws Exception {
void testSuccess_superuserNotAuthorizedForTld() throws Exception {
setUpSuccessfulTest();
persistResource(
loadRegistrar("TheRegistrar").asBuilder().setAllowedTlds(ImmutableSet.of()).build());
@@ -823,7 +823,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testFailure_clientDeleteProhibited() throws Exception {
void testFailure_clientDeleteProhibited() throws Exception {
persistResource(
newDomainBase(getUniqueIdFromCommand())
.asBuilder()
@@ -835,7 +835,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testFailure_serverDeleteProhibited() throws Exception {
void testFailure_serverDeleteProhibited() throws Exception {
persistResource(
newDomainBase(getUniqueIdFromCommand())
.asBuilder()
@@ -847,7 +847,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testFailure_pendingDelete() throws Exception {
void testFailure_pendingDelete() throws Exception {
persistResource(
newDomainBase(getUniqueIdFromCommand())
.asBuilder()
@@ -859,7 +859,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testSuccess_metadata() throws Exception {
void testSuccess_metadata() throws Exception {
eppRequestSource = EppRequestSource.TOOL;
setEppInput("domain_delete_metadata.xml");
setUpSuccessfulTest();
@@ -882,7 +882,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testFailure_metadataNotFromTool() throws Exception {
void testFailure_metadataNotFromTool() throws Exception {
setEppInput("domain_delete_metadata.xml");
persistResource(newDomainBase(getUniqueIdFromCommand()));
EppException thrown = assertThrows(OnlyToolCanPassMetadataException.class, this::runFlow);
@@ -890,7 +890,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
setUpSuccessfulTest();
clock.advanceOneMilli();
runFlow();
@@ -899,7 +899,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testIcannTransactionRecord_testTld_notStored() throws Exception {
void testIcannTransactionRecord_testTld_notStored() throws Exception {
setUpSuccessfulTest();
setUpGracePeriodDurations();
persistResource(Registry.get("tld").asBuilder().setTldType(TldType.TEST).build());
@@ -922,7 +922,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testIcannTransactionRecord_noGrace_entryOutsideMaxGracePeriod() throws Exception {
void testIcannTransactionRecord_noGrace_entryOutsideMaxGracePeriod() throws Exception {
setUpSuccessfulTest();
setUpGracePeriodDurations();
clock.advanceOneMilli();
@@ -947,7 +947,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testIcannTransactionRecord_noGrace_noAddOrRenewRecords() throws Exception {
void testIcannTransactionRecord_noGrace_noAddOrRenewRecords() throws Exception {
setUpSuccessfulTest();
setUpGracePeriodDurations();
clock.advanceOneMilli();
@@ -974,7 +974,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
/** Verifies that if there's no add grace period, we still cancel out valid renew records */
@Test
public void testIcannTransactionRecord_noGrace_hasRenewRecord() throws Exception {
void testIcannTransactionRecord_noGrace_hasRenewRecord() throws Exception {
setUpSuccessfulTest();
setUpGracePeriodDurations();
clock.advanceOneMilli();
@@ -1002,7 +1002,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testIcannTransactionRecord_inGrace_noRecords() throws Exception {
void testIcannTransactionRecord_inGrace_noRecords() throws Exception {
setUpSuccessfulTest();
setUpGracePeriods(
GracePeriod.create(
@@ -1025,7 +1025,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testIcannTransactionRecord_inGrace_multipleRecords() throws Exception {
void testIcannTransactionRecord_inGrace_multipleRecords() throws Exception {
setUpSuccessfulTest();
setUpGracePeriods(
GracePeriod.create(
@@ -1064,8 +1064,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testSuccess_superuserExtension_nonZeroDayGrace_nonZeroDayPendingDelete()
throws Exception {
void testSuccess_superuserExtension_nonZeroDayGrace_nonZeroDayPendingDelete() throws Exception {
eppRequestSource = EppRequestSource.TOOL;
setEppInput(
"domain_delete_superuser_extension.xml",
@@ -1091,8 +1090,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testSuccess_superuserExtension_zeroDayGrace_nonZeroDayPendingDelete()
throws Exception {
void testSuccess_superuserExtension_zeroDayGrace_nonZeroDayPendingDelete() throws Exception {
eppRequestSource = EppRequestSource.TOOL;
setEppInput(
"domain_delete_superuser_extension.xml",
@@ -1112,8 +1110,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testSuccess_superuserExtension_nonZeroDayGrace_zeroDayPendingDelete()
throws Exception {
void testSuccess_superuserExtension_nonZeroDayGrace_zeroDayPendingDelete() throws Exception {
eppRequestSource = EppRequestSource.TOOL;
setEppInput(
"domain_delete_superuser_extension.xml",
@@ -1139,7 +1136,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testSuccess_superuserExtension_zeroDayGrace_zeroDayPendingDelete() throws Exception {
void testSuccess_superuserExtension_zeroDayGrace_zeroDayPendingDelete() throws Exception {
eppRequestSource = EppRequestSource.TOOL;
setEppInput(
"domain_delete_superuser_extension.xml",
@@ -1154,7 +1151,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testSuccess_immediateDelete_withSuperuserAndMetadataExtension() throws Exception {
void testSuccess_immediateDelete_withSuperuserAndMetadataExtension() throws Exception {
eppRequestSource = EppRequestSource.TOOL;
setEppInput(
"domain_delete_superuser_and_metadata_extension.xml",
@@ -1169,7 +1166,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
}
@Test
public void testFailure_allocationTokenNotSupportedOnDelete() {
void testFailure_allocationTokenNotSupportedOnDelete() {
setEppInput("domain_delete_allocationtoken.xml");
EppException thrown = assertThrows(UnimplementedExtensionException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
@@ -33,25 +33,25 @@ import google.registry.flows.domain.DomainFlowUtils.TldDoesNotExistException;
import google.registry.flows.domain.DomainFlowUtils.TrailingDashException;
import google.registry.model.domain.DomainBase;
import google.registry.testing.AppEngineRule;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
public class DomainFlowUtilsTest extends ResourceFlowTestCase<DomainInfoFlow, DomainBase> {
class DomainFlowUtilsTest extends ResourceFlowTestCase<DomainInfoFlow, DomainBase> {
@Before
public void setup() {
@BeforeEach
void setup() {
setEppInput("domain_info.xml");
createTld("tld");
persistResource(AppEngineRule.makeRegistrar1().asBuilder().build());
}
@Test
public void testValidateDomainNameAcceptsValidName() throws EppException {
void testValidateDomainNameAcceptsValidName() throws EppException {
assertThat(DomainFlowUtils.validateDomainName("example.tld")).isNotNull();
}
@Test
public void testValidateDomainName_IllegalCharacters() {
void testValidateDomainName_IllegalCharacters() {
BadDomainNameCharacterException thrown =
assertThrows(
BadDomainNameCharacterException.class,
@@ -63,7 +63,7 @@ public class DomainFlowUtilsTest extends ResourceFlowTestCase<DomainInfoFlow, Do
}
@Test
public void testValidateDomainName_DomainNameWithEmptyParts() {
void testValidateDomainName_DomainNameWithEmptyParts() {
EmptyDomainNamePartException thrown =
assertThrows(
EmptyDomainNamePartException.class,
@@ -73,7 +73,7 @@ public class DomainFlowUtilsTest extends ResourceFlowTestCase<DomainInfoFlow, Do
}
@Test
public void testValidateDomainName_DomainNameWithLessThanTwoParts() {
void testValidateDomainName_DomainNameWithLessThanTwoParts() {
BadDomainNamePartsCountException thrown =
assertThrows(
BadDomainNamePartsCountException.class,
@@ -85,7 +85,7 @@ public class DomainFlowUtilsTest extends ResourceFlowTestCase<DomainInfoFlow, Do
}
@Test
public void testValidateDomainName_invalidTLD() {
void testValidateDomainName_invalidTLD() {
TldDoesNotExistException thrown =
assertThrows(
TldDoesNotExistException.class,
@@ -97,7 +97,7 @@ public class DomainFlowUtilsTest extends ResourceFlowTestCase<DomainInfoFlow, Do
}
@Test
public void testValidateDomainName_DomainNameIsTooLong() {
void testValidateDomainName_DomainNameIsTooLong() {
DomainLabelTooLongException thrown =
assertThrows(
DomainLabelTooLongException.class,
@@ -111,7 +111,7 @@ public class DomainFlowUtilsTest extends ResourceFlowTestCase<DomainInfoFlow, Do
}
@Test
public void testValidateDomainName_leadingDash() {
void testValidateDomainName_leadingDash() {
LeadingDashException thrown =
assertThrows(
LeadingDashException.class, () -> DomainFlowUtils.validateDomainName("-example.foo"));
@@ -120,7 +120,7 @@ public class DomainFlowUtilsTest extends ResourceFlowTestCase<DomainInfoFlow, Do
}
@Test
public void testValidateDomainName_trailingDash() {
void testValidateDomainName_trailingDash() {
TrailingDashException thrown =
assertThrows(
TrailingDashException.class, () -> DomainFlowUtils.validateDomainName("example-.foo"));
@@ -129,7 +129,7 @@ public class DomainFlowUtilsTest extends ResourceFlowTestCase<DomainInfoFlow, Do
}
@Test
public void testValidateDomainName_invalidIDN() {
void testValidateDomainName_invalidIDN() {
InvalidPunycodeException thrown =
assertThrows(
InvalidPunycodeException.class,
@@ -141,7 +141,7 @@ public class DomainFlowUtilsTest extends ResourceFlowTestCase<DomainInfoFlow, Do
}
@Test
public void testValidateDomainName_containsInvalidDashes() {
void testValidateDomainName_containsInvalidDashes() {
DashesInThirdAndFourthException thrown =
assertThrows(
DashesInThirdAndFourthException.class,
@@ -61,11 +61,11 @@ import google.registry.model.ofy.RequestCapturingAsyncDatastoreService;
import google.registry.model.registry.Registry;
import google.registry.testing.AppEngineRule;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link DomainInfoFlow}. */
public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, DomainBase> {
class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, DomainBase> {
/**
* The domain_info_fee.xml default substitutions common to most tests.
@@ -86,8 +86,8 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
private HostResource host3;
private DomainBase domain;
@Before
public void setup() {
@BeforeEach
void setup() {
setEppInput("domain_info.xml");
sessionMetadata.setClientId("NewRegistrar");
clock.setTo(DateTime.parse("2005-03-03T22:00:00.000Z"));
@@ -174,87 +174,87 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testSuccess_allHosts() throws Exception {
void testSuccess_allHosts() throws Exception {
doSuccessfulTest("domain_info_response.xml");
}
@Test
public void testSuccess_clTridNotSpecified() throws Exception {
void testSuccess_clTridNotSpecified() throws Exception {
setEppInput("domain_info_no_cltrid.xml");
doSuccessfulTest("domain_info_response_no_cltrid.xml");
}
@Test
public void testSuccess_allHosts_noDelegatedHosts() throws Exception {
void testSuccess_allHosts_noDelegatedHosts() throws Exception {
// There aren't any delegated hosts.
doSuccessfulTestNoNameservers("domain_info_response_subordinate_hosts.xml");
}
@Test
public void testSuccess_defaultHosts() throws Exception {
void testSuccess_defaultHosts() throws Exception {
setEppInput("domain_info_default_hosts.xml");
doSuccessfulTest("domain_info_response.xml");
}
@Test
public void testSuccess_defaultHosts_noDelegatedHosts() throws Exception {
void testSuccess_defaultHosts_noDelegatedHosts() throws Exception {
setEppInput("domain_info_default_hosts.xml");
// There aren't any delegated hosts.
doSuccessfulTestNoNameservers("domain_info_response_subordinate_hosts.xml");
}
@Test
public void testSuccess_delegatedHosts() throws Exception {
void testSuccess_delegatedHosts() throws Exception {
setEppInput("domain_info_delegated_hosts.xml");
doSuccessfulTest("domain_info_response_delegated_hosts.xml");
}
@Test
public void testSuccess_delegatedHosts_noDelegatedHosts() throws Exception {
void testSuccess_delegatedHosts_noDelegatedHosts() throws Exception {
setEppInput("domain_info_delegated_hosts.xml");
// There aren't any delegated hosts.
doSuccessfulTestNoNameservers("domain_info_response_none_hosts.xml");
}
@Test
public void testSuccess_subordinateHosts() throws Exception {
void testSuccess_subordinateHosts() throws Exception {
setEppInput("domain_info_subordinate_hosts.xml");
doSuccessfulTest("domain_info_response_subordinate_hosts.xml");
}
@Test
public void testSuccess_subordinateHosts_noDelegatedHosts() throws Exception {
void testSuccess_subordinateHosts_noDelegatedHosts() throws Exception {
setEppInput("domain_info_subordinate_hosts.xml");
doSuccessfulTestNoNameservers("domain_info_response_subordinate_hosts.xml");
}
@Test
public void testSuccess_noneHosts() throws Exception {
void testSuccess_noneHosts() throws Exception {
setEppInput("domain_info_none_hosts.xml");
doSuccessfulTest("domain_info_response_none_hosts.xml");
}
@Test
public void testSuccess_noneHosts_noDelegatedHosts() throws Exception {
void testSuccess_noneHosts_noDelegatedHosts() throws Exception {
setEppInput("domain_info_none_hosts.xml");
doSuccessfulTestNoNameservers("domain_info_response_none_hosts.xml");
}
@Test
public void testSuccess_unauthorized() throws Exception {
void testSuccess_unauthorized() throws Exception {
sessionMetadata.setClientId("ClientZ");
doSuccessfulTest("domain_info_response_unauthorized.xml");
}
@Test
public void testSuccess_differentRegistrarWithAuthInfo() throws Exception {
void testSuccess_differentRegistrarWithAuthInfo() throws Exception {
setEppInput("domain_info_with_auth.xml");
sessionMetadata.setClientId("ClientZ");
doSuccessfulTest("domain_info_response.xml");
}
@Test
public void testSuccess_differentRegistrarWithRegistrantAuthInfo() throws Exception {
void testSuccess_differentRegistrarWithRegistrantAuthInfo() throws Exception {
persistTestEntities(false);
setEppInput("domain_info_with_contact_auth.xml");
eppLoader.replaceAll("JD1234-REP", registrant.getRepoId());
@@ -263,7 +263,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testSuccess_differentRegistrarWithContactAuthInfo() throws Exception {
void testSuccess_differentRegistrarWithContactAuthInfo() throws Exception {
persistTestEntities(false);
setEppInput("domain_info_with_contact_auth.xml");
eppLoader.replaceAll("JD1234-REP", registrant.getRepoId());
@@ -272,7 +272,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testSuccess_inQuietPeriod() throws Exception {
void testSuccess_inQuietPeriod() throws Exception {
persistResource(
Registry.get("tld")
.asBuilder()
@@ -282,7 +282,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testSuccess_secDns() throws Exception {
void testSuccess_secDns() throws Exception {
persistTestEntities(false);
// Add the dsData to the saved resource and change the nameservers to match the sample xml.
persistResource(
@@ -317,12 +317,12 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testSuccess_addGracePeriod() throws Exception {
void testSuccess_addGracePeriod() throws Exception {
doAddPeriodTest(GracePeriodStatus.ADD);
}
@Test
public void testSuccess_autoRenewGracePeriod() throws Exception {
void testSuccess_autoRenewGracePeriod() throws Exception {
persistTestEntities(false);
// Add an AUTO_RENEW grace period to the saved resource.
persistResource(
@@ -339,7 +339,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testSuccess_redemptionGracePeriod() throws Exception {
void testSuccess_redemptionGracePeriod() throws Exception {
persistTestEntities(false);
// Add an REDEMPTION grace period to the saved resource, and change a few other fields to match
// the sample xml.
@@ -355,7 +355,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testSuccess_renewGracePeriod() throws Exception {
void testSuccess_renewGracePeriod() throws Exception {
persistTestEntities(false);
// Add an RENEW grace period to the saved resource.
persistResource(
@@ -369,7 +369,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testSuccess_multipleRenewGracePeriods() throws Exception {
void testSuccess_multipleRenewGracePeriods() throws Exception {
persistTestEntities(false);
// Add multiple RENEW grace periods to the saved resource.
persistResource(
@@ -386,7 +386,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testSuccess_transferGracePeriod() throws Exception {
void testSuccess_transferGracePeriod() throws Exception {
persistTestEntities(false);
// Add an TRANSFER grace period to the saved resource.
persistResource(
@@ -400,7 +400,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testSuccess_pendingDelete() throws Exception {
void testSuccess_pendingDelete() throws Exception {
persistTestEntities(false);
// Set the domain to be pending delete with no grace period, which will cause an RGP status of
// pending delete to show up, too.
@@ -410,7 +410,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testSuccess_stackedAddRenewGracePeriods() throws Exception {
void testSuccess_stackedAddRenewGracePeriods() throws Exception {
persistTestEntities(false);
// Add both an ADD and RENEW grace period, both which should show up in the RGP status.
persistResource(
@@ -426,7 +426,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testSuccess_secDnsAndAddGracePeriod() throws Exception {
void testSuccess_secDnsAndAddGracePeriod() throws Exception {
persistTestEntities(false);
// Add both an ADD grace period and SecDNS data.
persistResource(
@@ -443,14 +443,14 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testFailure_neverExisted() throws Exception {
void testFailure_neverExisted() throws Exception {
ResourceDoesNotExistException thrown =
assertThrows(ResourceDoesNotExistException.class, this::runFlow);
assertThat(thrown).hasMessageThat().contains(String.format("(%s)", getUniqueIdFromCommand()));
}
@Test
public void testFailure_existedButWasDeleted() throws Exception {
void testFailure_existedButWasDeleted() throws Exception {
persistResource(
newDomainBase("example.tld")
.asBuilder()
@@ -462,7 +462,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testFailure_differentRegistrarWrongAuthInfo() {
void testFailure_differentRegistrarWrongAuthInfo() {
persistTestEntities(false);
// Change the password of the domain so that it does not match the file.
persistResource(
@@ -477,7 +477,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testFailure_wrongAuthInfo() {
void testFailure_wrongAuthInfo() {
persistTestEntities(false);
// Change the password of the domain so that it does not match the file.
persistResource(
@@ -491,7 +491,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testFailure_differentRegistrarWrongRegistrantAuthInfo() {
void testFailure_differentRegistrarWrongRegistrantAuthInfo() {
persistTestEntities(false);
// Change the password of the registrant so that it does not match the file.
registrant =
@@ -509,7 +509,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testFailure_wrongRegistrantAuthInfo() {
void testFailure_wrongRegistrantAuthInfo() {
persistTestEntities(false);
// Change the password of the registrant so that it does not match the file.
registrant =
@@ -526,7 +526,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testFailure_differentRegistrarWrongContactAuthInfo() {
void testFailure_differentRegistrarWrongContactAuthInfo() {
persistTestEntities(false);
// Change the password of the contact so that it does not match the file.
contact =
@@ -544,7 +544,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testFailure_wrongContactAuthInfo() {
void testFailure_wrongContactAuthInfo() {
persistTestEntities(false);
// Change the password of the contact so that it does not match the file.
contact =
@@ -561,7 +561,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testFailure_differentRegistrarUnrelatedContactAuthInfo() {
void testFailure_differentRegistrarUnrelatedContactAuthInfo() {
persistTestEntities(false);
ContactResource unrelatedContact = persistActiveContact("foo1234");
sessionMetadata.setClientId("ClientZ");
@@ -573,7 +573,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testFailure_unrelatedContactAuthInfo() {
void testFailure_unrelatedContactAuthInfo() {
persistTestEntities(false);
ContactResource unrelatedContact = persistActiveContact("foo1234");
setEppInput("domain_info_with_contact_auth.xml");
@@ -588,7 +588,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
* info commands and responses, so we don't need to test the other versions.
*/
@Test
public void testFeeExtension_createCommand() throws Exception {
void testFeeExtension_createCommand() throws Exception {
setEppInput(
"domain_info_fee.xml",
updateSubstitutions(
@@ -608,7 +608,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
/** Test renew command. */
@Test
public void testFeeExtension_renewCommand() throws Exception {
void testFeeExtension_renewCommand() throws Exception {
setEppInput(
"domain_info_fee.xml",
updateSubstitutions(
@@ -628,7 +628,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
/** Test transfer command. */
@Test
public void testFeeExtension_transferCommand() throws Exception {
void testFeeExtension_transferCommand() throws Exception {
setEppInput(
"domain_info_fee.xml",
updateSubstitutions(
@@ -648,7 +648,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
/** Test restore command. */
@Test
public void testFeeExtension_restoreCommand() throws Exception {
void testFeeExtension_restoreCommand() throws Exception {
setEppInput(
"domain_info_fee.xml",
updateSubstitutions(
@@ -660,7 +660,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testFeeExtension_restoreCommand_pendingDelete_noRenewal() throws Exception {
void testFeeExtension_restoreCommand_pendingDelete_noRenewal() throws Exception {
setEppInput(
"domain_info_fee.xml",
updateSubstitutions(SUBSTITUTION_BASE, "COMMAND", "restore", "PERIOD", "1"));
@@ -675,7 +675,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testFeeExtension_restoreCommand_pendingDelete_withRenewal() throws Exception {
void testFeeExtension_restoreCommand_pendingDelete_withRenewal() throws Exception {
createTld("example");
setEppInput(
"domain_info_fee.xml",
@@ -694,7 +694,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
/** Test create command on a premium label. */
@Test
public void testFeeExtension_createCommandPremium() throws Exception {
void testFeeExtension_createCommandPremium() throws Exception {
createTld("example");
setEppInput(
"domain_info_fee.xml",
@@ -712,7 +712,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
/** Test renew command on a premium label. */
@Test
public void testFeeExtension_renewCommandPremium() throws Exception {
void testFeeExtension_renewCommandPremium() throws Exception {
createTld("example");
setEppInput(
"domain_info_fee.xml",
@@ -730,7 +730,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
/** Test transfer command on a premium label. */
@Test
public void testFeeExtension_transferCommandPremium() throws Exception {
void testFeeExtension_transferCommandPremium() throws Exception {
createTld("example");
setEppInput(
"domain_info_fee.xml",
@@ -748,7 +748,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
/** Test restore command on a premium label. */
@Test
public void testFeeExtension_restoreCommandPremium() throws Exception {
void testFeeExtension_restoreCommandPremium() throws Exception {
createTld("example");
setEppInput(
"domain_info_fee.xml",
@@ -763,7 +763,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
/** Test setting the currency explicitly to a wrong value. */
@Test
public void testFeeExtension_wrongCurrency() {
void testFeeExtension_wrongCurrency() {
setEppInput(
"domain_info_fee.xml",
updateSubstitutions(
@@ -777,7 +777,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testFeeExtension_unknownCurrency() {
void testFeeExtension_unknownCurrency() {
setEppInput(
"domain_info_fee.xml",
updateSubstitutions(
@@ -791,7 +791,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
/** Test requesting a period that isn't in years. */
@Test
public void testFeeExtension_periodNotInYears() {
void testFeeExtension_periodNotInYears() {
setEppInput(
"domain_info_fee.xml",
updateSubstitutions(
@@ -806,7 +806,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
/** Test a command that specifies a phase. */
@Test
public void testFeeExtension_commandPhase() {
void testFeeExtension_commandPhase() {
setEppInput("domain_info_fee_command_phase.xml");
persistTestEntities(false);
EppException thrown = assertThrows(FeeChecksDontSupportPhasesException.class, this::runFlow);
@@ -815,7 +815,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
/** Test a command that specifies a subphase. */
@Test
public void testFeeExtension_commandSubphase() {
void testFeeExtension_commandSubphase() {
setEppInput("domain_info_fee_command_subphase.xml");
persistTestEntities(false);
EppException thrown = assertThrows(FeeChecksDontSupportPhasesException.class, this::runFlow);
@@ -824,7 +824,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
/** Test a restore for more than one year. */
@Test
public void testFeeExtension_multiyearRestore() {
void testFeeExtension_multiyearRestore() {
setEppInput(
"domain_info_fee.xml",
updateSubstitutions(
@@ -838,7 +838,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
/** Test a transfer for more than one year. */
@Test
public void testFeeExtension_multiyearTransfer() {
void testFeeExtension_multiyearTransfer() {
setEppInput(
"domain_info_fee.xml",
updateSubstitutions(
@@ -852,7 +852,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
/** Test that we load contacts and hosts as a batch rather than individually. */
@Test
public void testBatchLoadingOfReferences() throws Exception {
void testBatchLoadingOfReferences() throws Exception {
persistTestEntities(false);
// Clear out the session cache so that we count actual Datastore calls.
ofy().clearSessionCache();
@@ -880,7 +880,7 @@ public class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, Dom
}
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
persistTestEntities(false);
runFlow();
assertIcannReportingActivityFieldLogged("srs-dom-info");
@@ -73,11 +73,11 @@ import java.util.Map;
import org.joda.money.Money;
import org.joda.time.DateTime;
import org.joda.time.Duration;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link DomainRenewFlow}. */
public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, DomainBase> {
class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, DomainBase> {
private static final ImmutableMap<String, String> FEE_BASE_MAP =
ImmutableMap.of(
@@ -94,10 +94,10 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
private static final ImmutableMap<String, String> FEE_12_MAP =
updateSubstitutions(FEE_BASE_MAP, "FEE_VERSION", "0.12", "FEE_NS", "fee12");
final DateTime expirationTime = DateTime.parse("2000-04-03T22:00:00.0Z");
private final DateTime expirationTime = DateTime.parse("2000-04-03T22:00:00.0Z");
@Before
public void initDomainTest() {
@BeforeEach
void initDomainTest() {
createTld("tld");
clock.setTo(expirationTime.minusMillis(2));
setEppInput("domain_renew.xml", ImmutableMap.of("DOMAIN", "example.tld", "YEARS", "5"));
@@ -244,7 +244,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testDryRun() throws Exception {
void testDryRun() throws Exception {
persistDomain();
dryRunFlowAssertResponse(
loadFile(
@@ -253,7 +253,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testSuccess() throws Exception {
void testSuccess() throws Exception {
persistDomain();
doSuccessfulTest(
"domain_renew_response.xml",
@@ -262,7 +262,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testSuccess_recurringClientIdIsSame_whenSuperuserOverridesRenewal() throws Exception {
void testSuccess_recurringClientIdIsSame_whenSuperuserOverridesRenewal() throws Exception {
persistDomain();
setClientIdForFlow("NewRegistrar");
doSuccessfulTest(
@@ -275,7 +275,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testSuccess_customLogicFee() throws Exception {
void testSuccess_customLogicFee() throws Exception {
// The "costly-renew" domain has an additional RENEW fee of 100 from custom logic on top of the
// normal $11 standard renew price for this TLD.
ImmutableMap<String, String> customFeeMap =
@@ -297,56 +297,56 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testSuccess_fee_v06() throws Exception {
void testSuccess_fee_v06() throws Exception {
setEppInput("domain_renew_fee.xml", FEE_06_MAP);
persistDomain();
doSuccessfulTest("domain_renew_response_fee.xml", 5, FEE_06_MAP);
}
@Test
public void testSuccess_fee_v11() throws Exception {
void testSuccess_fee_v11() throws Exception {
setEppInput("domain_renew_fee.xml", FEE_11_MAP);
persistDomain();
doSuccessfulTest("domain_renew_response_fee.xml", 5, FEE_11_MAP);
}
@Test
public void testSuccess_fee_v12() throws Exception {
void testSuccess_fee_v12() throws Exception {
setEppInput("domain_renew_fee.xml", FEE_12_MAP);
persistDomain();
doSuccessfulTest("domain_renew_response_fee.xml", 5, FEE_12_MAP);
}
@Test
public void testSuccess_fee_withDefaultAttributes_v06() throws Exception {
void testSuccess_fee_withDefaultAttributes_v06() throws Exception {
setEppInput("domain_renew_fee_defaults.xml", FEE_06_MAP);
persistDomain();
doSuccessfulTest("domain_renew_response_fee.xml", 5, FEE_06_MAP);
}
@Test
public void testSuccess_fee_withDefaultAttributes_v11() throws Exception {
void testSuccess_fee_withDefaultAttributes_v11() throws Exception {
setEppInput("domain_renew_fee_defaults.xml", FEE_11_MAP);
persistDomain();
doSuccessfulTest("domain_renew_response_fee.xml", 5, FEE_11_MAP);
}
@Test
public void testSuccess_fee_withDefaultAttributes_v12() throws Exception {
void testSuccess_fee_withDefaultAttributes_v12() throws Exception {
setEppInput("domain_renew_fee_defaults.xml", FEE_12_MAP);
persistDomain();
doSuccessfulTest("domain_renew_response_fee.xml", 5, FEE_12_MAP);
}
@Test
public void testFailure_fee_unknownCurrency() {
void testFailure_fee_unknownCurrency() {
setEppInput("domain_renew_fee.xml", updateSubstitutions(FEE_06_MAP, "CURRENCY", "BAD"));
EppException thrown = assertThrows(UnknownCurrencyEppException.class, this::persistDomain);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFailure_refundableFee_v06() throws Exception {
void testFailure_refundableFee_v06() throws Exception {
setEppInput("domain_renew_fee_refundable.xml", FEE_06_MAP);
persistDomain();
EppException thrown = assertThrows(UnsupportedFeeAttributeException.class, this::runFlow);
@@ -354,7 +354,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_refundableFee_v11() throws Exception {
void testFailure_refundableFee_v11() throws Exception {
setEppInput("domain_renew_fee_refundable.xml", FEE_11_MAP);
persistDomain();
EppException thrown = assertThrows(UnsupportedFeeAttributeException.class, this::runFlow);
@@ -362,7 +362,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_refundableFee_v12() throws Exception {
void testFailure_refundableFee_v12() throws Exception {
setEppInput("domain_renew_fee_refundable.xml", FEE_12_MAP);
persistDomain();
EppException thrown = assertThrows(UnsupportedFeeAttributeException.class, this::runFlow);
@@ -370,7 +370,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_gracePeriodFee_v06() throws Exception {
void testFailure_gracePeriodFee_v06() throws Exception {
setEppInput("domain_renew_fee_grace_period.xml", FEE_06_MAP);
persistDomain();
EppException thrown = assertThrows(UnsupportedFeeAttributeException.class, this::runFlow);
@@ -378,7 +378,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_gracePeriodFee_v11() throws Exception {
void testFailure_gracePeriodFee_v11() throws Exception {
setEppInput("domain_renew_fee_grace_period.xml", FEE_11_MAP);
persistDomain();
EppException thrown = assertThrows(UnsupportedFeeAttributeException.class, this::runFlow);
@@ -386,7 +386,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_gracePeriodFee_v12() throws Exception {
void testFailure_gracePeriodFee_v12() throws Exception {
setEppInput("domain_renew_fee_grace_period.xml", FEE_12_MAP);
persistDomain();
EppException thrown = assertThrows(UnsupportedFeeAttributeException.class, this::runFlow);
@@ -394,7 +394,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_appliedFee_v06() throws Exception {
void testFailure_appliedFee_v06() throws Exception {
setEppInput("domain_renew_fee_applied.xml", FEE_06_MAP);
persistDomain();
EppException thrown = assertThrows(UnsupportedFeeAttributeException.class, this::runFlow);
@@ -402,7 +402,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_appliedFee_v11() throws Exception {
void testFailure_appliedFee_v11() throws Exception {
setEppInput("domain_renew_fee_applied.xml", FEE_11_MAP);
persistDomain();
EppException thrown = assertThrows(UnsupportedFeeAttributeException.class, this::runFlow);
@@ -410,7 +410,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_appliedFee_v12() throws Exception {
void testFailure_appliedFee_v12() throws Exception {
setEppInput("domain_renew_fee_applied.xml", FEE_12_MAP);
persistDomain();
EppException thrown = assertThrows(UnsupportedFeeAttributeException.class, this::runFlow);
@@ -418,17 +418,17 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_suspendedRegistrarCantRenewDomain() {
void testFailure_suspendedRegistrarCantRenewDomain() {
doFailingTest_invalidRegistrarState(State.SUSPENDED);
}
@Test
public void testFailure_pendingRegistrarCantRenewDomain() {
void testFailure_pendingRegistrarCantRenewDomain() {
doFailingTest_invalidRegistrarState(State.PENDING);
}
@Test
public void testFailure_disabledRegistrarCantRenewDomain() {
void testFailure_disabledRegistrarCantRenewDomain() {
doFailingTest_invalidRegistrarState(State.DISABLED);
}
@@ -445,7 +445,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testSuccess_nonDefaultRenewGracePeriod() throws Exception {
void testSuccess_nonDefaultRenewGracePeriod() throws Exception {
persistResource(
Registry.get("tld")
.asBuilder()
@@ -459,14 +459,14 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testSuccess_missingPeriod() throws Exception {
void testSuccess_missingPeriod() throws Exception {
setEppInput("domain_renew_missing_period.xml");
persistDomain();
doSuccessfulTest("domain_renew_response_missing_period.xml", 1);
}
@Test
public void testSuccess_autorenewPollMessageIsNotDeleted() throws Exception {
void testSuccess_autorenewPollMessageIsNotDeleted() throws Exception {
persistDomain();
// Modify the autorenew poll message so that it has an undelivered message in the past.
persistResource(
@@ -505,14 +505,14 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_neverExisted() throws Exception {
void testFailure_neverExisted() throws Exception {
ResourceDoesNotExistException thrown =
assertThrows(ResourceDoesNotExistException.class, this::runFlow);
assertThat(thrown).hasMessageThat().contains(String.format("(%s)", getUniqueIdFromCommand()));
}
@Test
public void testFailure_existedButWasDeleted() throws Exception {
void testFailure_existedButWasDeleted() throws Exception {
persistDeletedDomain(getUniqueIdFromCommand(), clock.nowUtc().minusDays(1));
ResourceDoesNotExistException thrown =
assertThrows(ResourceDoesNotExistException.class, this::runFlow);
@@ -520,7 +520,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_clientRenewProhibited() throws Exception {
void testFailure_clientRenewProhibited() throws Exception {
persistDomain(StatusValue.CLIENT_RENEW_PROHIBITED);
ResourceStatusProhibitsOperationException thrown =
assertThrows(ResourceStatusProhibitsOperationException.class, this::runFlow);
@@ -528,7 +528,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_serverRenewProhibited() throws Exception {
void testFailure_serverRenewProhibited() throws Exception {
persistDomain(StatusValue.SERVER_RENEW_PROHIBITED);
ResourceStatusProhibitsOperationException thrown =
assertThrows(ResourceStatusProhibitsOperationException.class, this::runFlow);
@@ -536,7 +536,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_pendingDelete() throws Exception {
void testFailure_pendingDelete() throws Exception {
persistResource(
newDomainBase(getUniqueIdFromCommand())
.asBuilder()
@@ -550,7 +550,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_wrongFeeAmount_v06() throws Exception {
void testFailure_wrongFeeAmount_v06() throws Exception {
setEppInput("domain_renew_fee.xml", FEE_06_MAP);
persistResource(
Registry.get("tld")
@@ -563,7 +563,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_wrongFeeAmount_v11() throws Exception {
void testFailure_wrongFeeAmount_v11() throws Exception {
setEppInput("domain_renew_fee.xml", FEE_11_MAP);
persistResource(
Registry.get("tld")
@@ -576,7 +576,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_wrongFeeAmount_v12() throws Exception {
void testFailure_wrongFeeAmount_v12() throws Exception {
setEppInput("domain_renew_fee.xml", FEE_12_MAP);
persistResource(
Registry.get("tld")
@@ -589,7 +589,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_wrongCurrency_v06() throws Exception {
void testFailure_wrongCurrency_v06() throws Exception {
setEppInput("domain_renew_fee.xml", FEE_06_MAP);
persistResource(
Registry.get("tld")
@@ -607,7 +607,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_wrongCurrency_v11() throws Exception {
void testFailure_wrongCurrency_v11() throws Exception {
setEppInput("domain_renew_fee.xml", FEE_11_MAP);
persistResource(
Registry.get("tld")
@@ -625,7 +625,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_wrongCurrency_v12() throws Exception {
void testFailure_wrongCurrency_v12() throws Exception {
setEppInput("domain_renew_fee.xml", FEE_12_MAP);
persistResource(
Registry.get("tld")
@@ -643,7 +643,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_feeGivenInWrongScale_v06() throws Exception {
void testFailure_feeGivenInWrongScale_v06() throws Exception {
setEppInput("domain_renew_fee_bad_scale.xml", FEE_06_MAP);
persistDomain();
EppException thrown = assertThrows(CurrencyValueScaleException.class, this::runFlow);
@@ -651,7 +651,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_feeGivenInWrongScale_v11() throws Exception {
void testFailure_feeGivenInWrongScale_v11() throws Exception {
setEppInput("domain_renew_fee_bad_scale.xml", FEE_11_MAP);
persistDomain();
EppException thrown = assertThrows(CurrencyValueScaleException.class, this::runFlow);
@@ -659,7 +659,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_feeGivenInWrongScale_v12() throws Exception {
void testFailure_feeGivenInWrongScale_v12() throws Exception {
setEppInput("domain_renew_fee_bad_scale.xml", FEE_12_MAP);
persistDomain();
EppException thrown = assertThrows(CurrencyValueScaleException.class, this::runFlow);
@@ -667,7 +667,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_pendingTransfer() throws Exception {
void testFailure_pendingTransfer() throws Exception {
persistDomain();
persistWithPendingTransfer(
reloadResourceByForeignKey()
@@ -680,7 +680,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_periodInMonths() throws Exception {
void testFailure_periodInMonths() throws Exception {
setEppInput("domain_renew_months.xml");
persistDomain();
EppException thrown = assertThrows(BadPeriodUnitException.class, this::runFlow);
@@ -688,7 +688,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_max10Years() throws Exception {
void testFailure_max10Years() throws Exception {
setEppInput("domain_renew_11_years.xml");
persistDomain();
EppException thrown = assertThrows(ExceedsMaxRegistrationYearsException.class, this::runFlow);
@@ -696,7 +696,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_curExpDateMustMatch() throws Exception {
void testFailure_curExpDateMustMatch() throws Exception {
persistDomain();
// Note expiration time is off by one day.
persistResource(
@@ -710,7 +710,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_unauthorizedClient() throws Exception {
void testFailure_unauthorizedClient() throws Exception {
setClientIdForFlow("NewRegistrar");
persistActiveDomain(getUniqueIdFromCommand());
EppException thrown = assertThrows(ResourceNotOwnedException.class, this::runFlow);
@@ -718,7 +718,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testSuccess_superuserUnauthorizedClient() throws Exception {
void testSuccess_superuserUnauthorizedClient() throws Exception {
setClientIdForFlow("NewRegistrar");
persistDomain();
runFlowAssertResponse(
@@ -730,7 +730,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_notAuthorizedForTld() throws Exception {
void testFailure_notAuthorizedForTld() throws Exception {
persistResource(
loadRegistrar("TheRegistrar").asBuilder().setAllowedTlds(ImmutableSet.of()).build());
persistDomain();
@@ -739,7 +739,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testSuccess_superuserNotAuthorizedForTld() throws Exception {
void testSuccess_superuserNotAuthorizedForTld() throws Exception {
persistResource(
loadRegistrar("TheRegistrar").asBuilder().setAllowedTlds(ImmutableSet.of()).build());
persistDomain();
@@ -752,7 +752,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testFailure_feeNotProvidedOnPremiumName() throws Exception {
void testFailure_feeNotProvidedOnPremiumName() throws Exception {
createTld("example");
setEppInput("domain_renew_premium.xml");
persistDomain();
@@ -761,7 +761,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
persistDomain();
runFlow();
assertIcannReportingActivityFieldLogged("srs-dom-renew");
@@ -769,7 +769,7 @@ public class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, D
}
@Test
public void testIcannTransactionRecord_getsStored() throws Exception {
void testIcannTransactionRecord_getsStored() throws Exception {
persistDomain();
// Test with a nonstandard Renew period to ensure the reporting time is correct regardless
persistResource(
@@ -73,11 +73,11 @@ import google.registry.model.reporting.HistoryEntry;
import java.util.Map;
import org.joda.money.Money;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link DomainRestoreRequestFlow}. */
public class DomainRestoreRequestFlowTest
class DomainRestoreRequestFlowTest
extends ResourceFlowTestCase<DomainRestoreRequestFlow, DomainBase> {
private static final ImmutableMap<String, String> FEE_06_MAP =
@@ -87,8 +87,8 @@ public class DomainRestoreRequestFlowTest
private static final ImmutableMap<String, String> FEE_12_MAP =
ImmutableMap.of("FEE_VERSION", "0.12", "FEE_NS", "fee12", "CURRENCY", "USD");
@Before
public void initDomainTest() {
@BeforeEach
void initDomainTest() {
createTld("tld");
setEppInput("domain_update_restore_request.xml", ImmutableMap.of("DOMAIN", "example.tld"));
}
@@ -128,14 +128,14 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testDryRun() throws Exception {
void testDryRun() throws Exception {
setEppInput("domain_update_restore_request.xml", ImmutableMap.of("DOMAIN", "example.tld"));
persistPendingDeleteDomain();
dryRunFlowAssertResponse(loadFile("generic_success_response.xml"));
}
@Test
public void testSuccess_expiryStillInFuture_notExtended() throws Exception {
void testSuccess_expiryStillInFuture_notExtended() throws Exception {
setEppInput("domain_update_restore_request.xml", ImmutableMap.of("DOMAIN", "example.tld"));
DateTime expirationTime = clock.nowUtc().plusYears(5).plusDays(45);
persistPendingDeleteDomain(expirationTime);
@@ -202,7 +202,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testSuccess_expiryInPast_extendedByOneYear() throws Exception {
void testSuccess_expiryInPast_extendedByOneYear() throws Exception {
setEppInput("domain_update_restore_request.xml", ImmutableMap.of("DOMAIN", "example.tld"));
DateTime expirationTime = clock.nowUtc().minusDays(20);
DateTime newExpirationTime = expirationTime.plusYears(1);
@@ -280,14 +280,14 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testSuccess_fee_v06() throws Exception {
void testSuccess_fee_v06() throws Exception {
setEppInput("domain_update_restore_request_fee.xml", FEE_06_MAP);
persistPendingDeleteDomain();
runFlowAssertResponse(loadFile("domain_update_restore_request_response_fee.xml", FEE_06_MAP));
}
@Test
public void testSuccess_fee_v06_noRenewal() throws Exception {
void testSuccess_fee_v06_noRenewal() throws Exception {
setEppInput("domain_update_restore_request_fee_no_renewal.xml", FEE_06_MAP);
persistPendingDeleteDomain(clock.nowUtc().plusMonths(6));
runFlowAssertResponse(
@@ -295,42 +295,42 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testSuccess_fee_v11() throws Exception {
void testSuccess_fee_v11() throws Exception {
setEppInput("domain_update_restore_request_fee.xml", FEE_11_MAP);
persistPendingDeleteDomain();
runFlowAssertResponse(loadFile("domain_update_restore_request_response_fee.xml", FEE_11_MAP));
}
@Test
public void testSuccess_fee_v12() throws Exception {
void testSuccess_fee_v12() throws Exception {
setEppInput("domain_update_restore_request_fee.xml", FEE_12_MAP);
persistPendingDeleteDomain();
runFlowAssertResponse(loadFile("domain_update_restore_request_response_fee.xml", FEE_12_MAP));
}
@Test
public void testSuccess_fee_withDefaultAttributes_v06() throws Exception {
void testSuccess_fee_withDefaultAttributes_v06() throws Exception {
setEppInput("domain_update_restore_request_fee_defaults.xml", FEE_06_MAP);
persistPendingDeleteDomain();
runFlowAssertResponse(loadFile("domain_update_restore_request_response_fee.xml", FEE_06_MAP));
}
@Test
public void testSuccess_fee_withDefaultAttributes_v11() throws Exception {
void testSuccess_fee_withDefaultAttributes_v11() throws Exception {
setEppInput("domain_update_restore_request_fee_defaults.xml", FEE_11_MAP);
persistPendingDeleteDomain();
runFlowAssertResponse(loadFile("domain_update_restore_request_response_fee.xml", FEE_11_MAP));
}
@Test
public void testSuccess_fee_withDefaultAttributes_v12() throws Exception {
void testSuccess_fee_withDefaultAttributes_v12() throws Exception {
setEppInput("domain_update_restore_request_fee_defaults.xml", FEE_12_MAP);
persistPendingDeleteDomain();
runFlowAssertResponse(loadFile("domain_update_restore_request_response_fee.xml", FEE_12_MAP));
}
@Test
public void testFailure_fee_unknownCurrency() {
void testFailure_fee_unknownCurrency() {
ImmutableMap<String, String> substitutions =
ImmutableMap.of("FEE_VERSION", "0.12", "FEE_NS", "fee12", "CURRENCY", "BAD");
setEppInput("domain_update_restore_request_fee.xml", substitutions);
@@ -340,7 +340,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_refundableFee_v06() throws Exception {
void testFailure_refundableFee_v06() throws Exception {
setEppInput("domain_update_restore_request_fee_refundable.xml", FEE_06_MAP);
persistPendingDeleteDomain();
EppException thrown = assertThrows(UnsupportedFeeAttributeException.class, this::runFlow);
@@ -348,7 +348,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_refundableFee_v11() throws Exception {
void testFailure_refundableFee_v11() throws Exception {
setEppInput("domain_update_restore_request_fee_refundable.xml", FEE_11_MAP);
persistPendingDeleteDomain();
EppException thrown = assertThrows(UnsupportedFeeAttributeException.class, this::runFlow);
@@ -356,7 +356,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_refundableFee_v12() throws Exception {
void testFailure_refundableFee_v12() throws Exception {
setEppInput("domain_update_restore_request_fee_refundable.xml", FEE_12_MAP);
persistPendingDeleteDomain();
EppException thrown = assertThrows(UnsupportedFeeAttributeException.class, this::runFlow);
@@ -364,7 +364,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_gracePeriodFee_v06() throws Exception {
void testFailure_gracePeriodFee_v06() throws Exception {
setEppInput("domain_update_restore_request_fee_grace_period.xml", FEE_06_MAP);
persistPendingDeleteDomain();
EppException thrown = assertThrows(UnsupportedFeeAttributeException.class, this::runFlow);
@@ -372,7 +372,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_gracePeriodFee_v11() throws Exception {
void testFailure_gracePeriodFee_v11() throws Exception {
setEppInput("domain_update_restore_request_fee_grace_period.xml", FEE_11_MAP);
persistPendingDeleteDomain();
EppException thrown = assertThrows(UnsupportedFeeAttributeException.class, this::runFlow);
@@ -380,7 +380,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_gracePeriodFee_v12() throws Exception {
void testFailure_gracePeriodFee_v12() throws Exception {
setEppInput("domain_update_restore_request_fee_grace_period.xml", FEE_12_MAP);
persistPendingDeleteDomain();
EppException thrown = assertThrows(UnsupportedFeeAttributeException.class, this::runFlow);
@@ -388,7 +388,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_appliedFee_v06() throws Exception {
void testFailure_appliedFee_v06() throws Exception {
setEppInput("domain_update_restore_request_fee_applied.xml", FEE_06_MAP);
persistPendingDeleteDomain();
EppException thrown = assertThrows(UnsupportedFeeAttributeException.class, this::runFlow);
@@ -396,7 +396,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_appliedFee_v11() throws Exception {
void testFailure_appliedFee_v11() throws Exception {
setEppInput("domain_update_restore_request_fee_applied.xml", FEE_11_MAP);
persistPendingDeleteDomain();
EppException thrown = assertThrows(UnsupportedFeeAttributeException.class, this::runFlow);
@@ -404,7 +404,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_appliedFee_v12() throws Exception {
void testFailure_appliedFee_v12() throws Exception {
setEppInput("domain_update_restore_request_fee_applied.xml", FEE_12_MAP);
persistPendingDeleteDomain();
EppException thrown = assertThrows(UnsupportedFeeAttributeException.class, this::runFlow);
@@ -412,7 +412,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testSuccess_premiumNotBlocked() throws Exception {
void testSuccess_premiumNotBlocked() throws Exception {
createTld("example");
setEppInput("domain_update_restore_request_premium.xml");
persistPendingDeleteDomain();
@@ -420,7 +420,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testSuccess_premiumNotBlocked_andNoRenewal() throws Exception {
void testSuccess_premiumNotBlocked_andNoRenewal() throws Exception {
createTld("example");
setEppInput("domain_update_restore_request_premium_no_renewal.xml");
persistPendingDeleteDomain(clock.nowUtc().plusYears(2));
@@ -429,7 +429,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testSuccess_superuserOverridesReservedList() throws Exception {
void testSuccess_superuserOverridesReservedList() throws Exception {
persistResource(
Registry.get("tld")
.asBuilder()
@@ -441,7 +441,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testSuccess_superuserOverridesPremiumNameBlock() throws Exception {
void testSuccess_superuserOverridesPremiumNameBlock() throws Exception {
createTld("example");
setEppInput("domain_update_restore_request_premium.xml");
persistPendingDeleteDomain();
@@ -454,7 +454,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_doesNotExist() throws Exception {
void testFailure_doesNotExist() throws Exception {
ResourceDoesNotExistException thrown =
assertThrows(ResourceDoesNotExistException.class, this::runFlow);
assertThat(thrown).hasMessageThat().contains(String.format("(%s)", getUniqueIdFromCommand()));
@@ -462,7 +462,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_suspendedRegistrarCantRestoreDomain() {
void testFailure_suspendedRegistrarCantRestoreDomain() {
persistResource(
Registrar.loadByClientId("TheRegistrar")
.get()
@@ -475,7 +475,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_pendingRegistrarCantRestoreDomain() {
void testFailure_pendingRegistrarCantRestoreDomain() {
persistResource(
Registrar.loadByClientId("TheRegistrar")
.get()
@@ -488,7 +488,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_wrongFeeAmount_v06() throws Exception {
void testFailure_wrongFeeAmount_v06() throws Exception {
setEppInput("domain_update_restore_request_fee.xml", FEE_06_MAP);
persistPendingDeleteDomain();
persistResource(
@@ -498,7 +498,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_wrongFeeAmount_v11() throws Exception {
void testFailure_wrongFeeAmount_v11() throws Exception {
setEppInput("domain_update_restore_request_fee.xml", FEE_11_MAP);
persistPendingDeleteDomain();
persistResource(
@@ -508,7 +508,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_wrongFeeAmount_v12() throws Exception {
void testFailure_wrongFeeAmount_v12() throws Exception {
setEppInput("domain_update_restore_request_fee.xml", FEE_12_MAP);
persistPendingDeleteDomain();
persistResource(
@@ -535,22 +535,22 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_wrongCurrency_v06() throws Exception {
void testFailure_wrongCurrency_v06() throws Exception {
runWrongCurrencyTest(FEE_06_MAP);
}
@Test
public void testFailure_wrongCurrency_v11() throws Exception {
void testFailure_wrongCurrency_v11() throws Exception {
runWrongCurrencyTest(FEE_11_MAP);
}
@Test
public void testFailure_wrongCurrency_v12() throws Exception {
void testFailure_wrongCurrency_v12() throws Exception {
runWrongCurrencyTest(FEE_12_MAP);
}
@Test
public void testFailure_feeGivenInWrongScale_v06() throws Exception {
void testFailure_feeGivenInWrongScale_v06() throws Exception {
setEppInput("domain_update_restore_request_fee_bad_scale.xml", FEE_06_MAP);
persistPendingDeleteDomain();
EppException thrown = assertThrows(CurrencyValueScaleException.class, this::runFlow);
@@ -558,7 +558,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_feeGivenInWrongScale_v11() throws Exception {
void testFailure_feeGivenInWrongScale_v11() throws Exception {
setEppInput("domain_update_restore_request_fee_bad_scale.xml", FEE_11_MAP);
persistPendingDeleteDomain();
EppException thrown = assertThrows(CurrencyValueScaleException.class, this::runFlow);
@@ -566,7 +566,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_feeGivenInWrongScale_v12() throws Exception {
void testFailure_feeGivenInWrongScale_v12() throws Exception {
setEppInput("domain_update_restore_request_fee_bad_scale.xml", FEE_12_MAP);
persistPendingDeleteDomain();
EppException thrown = assertThrows(CurrencyValueScaleException.class, this::runFlow);
@@ -574,7 +574,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_notInRedemptionPeriod() throws Exception {
void testFailure_notInRedemptionPeriod() throws Exception {
persistResource(
newDomainBase(getUniqueIdFromCommand())
.asBuilder()
@@ -586,21 +586,21 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_notDeleted() throws Exception {
void testFailure_notDeleted() throws Exception {
persistActiveDomain(getUniqueIdFromCommand());
EppException thrown = assertThrows(DomainNotEligibleForRestoreException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFailure_fullyDeleted() throws Exception {
void testFailure_fullyDeleted() throws Exception {
persistDeletedDomain(getUniqueIdFromCommand(), clock.nowUtc().minusDays(1));
EppException thrown = assertThrows(ResourceDoesNotExistException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFailure_withChange() throws Exception {
void testFailure_withChange() throws Exception {
persistPendingDeleteDomain();
setEppInput("domain_update_restore_request_with_change.xml");
EppException thrown = assertThrows(RestoreCommandIncludesChangesException.class, this::runFlow);
@@ -608,7 +608,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_withAdd() throws Exception {
void testFailure_withAdd() throws Exception {
persistPendingDeleteDomain();
setEppInput("domain_update_restore_request_with_add.xml");
EppException thrown = assertThrows(RestoreCommandIncludesChangesException.class, this::runFlow);
@@ -616,7 +616,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_withRemove() throws Exception {
void testFailure_withRemove() throws Exception {
persistPendingDeleteDomain();
setEppInput("domain_update_restore_request_with_remove.xml");
EppException thrown = assertThrows(RestoreCommandIncludesChangesException.class, this::runFlow);
@@ -624,7 +624,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_withSecDnsExtension() throws Exception {
void testFailure_withSecDnsExtension() throws Exception {
persistPendingDeleteDomain();
setEppInput("domain_update_restore_request_with_secdns.xml");
EppException thrown = assertThrows(UnimplementedExtensionException.class, this::runFlow);
@@ -632,7 +632,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_unauthorizedClient() throws Exception {
void testFailure_unauthorizedClient() throws Exception {
sessionMetadata.setClientId("NewRegistrar");
persistPendingDeleteDomain();
EppException thrown = assertThrows(ResourceNotOwnedException.class, this::runFlow);
@@ -640,7 +640,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testSuccess_superuserUnauthorizedClient() throws Exception {
void testSuccess_superuserUnauthorizedClient() throws Exception {
sessionMetadata.setClientId("NewRegistrar");
persistPendingDeleteDomain();
EppException thrown =
@@ -651,7 +651,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_notAuthorizedForTld() throws Exception {
void testFailure_notAuthorizedForTld() throws Exception {
persistResource(
loadRegistrar("TheRegistrar").asBuilder().setAllowedTlds(ImmutableSet.of()).build());
persistPendingDeleteDomain();
@@ -660,7 +660,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testSuccess_superuserNotAuthorizedForTld() throws Exception {
void testSuccess_superuserNotAuthorizedForTld() throws Exception {
persistResource(
loadRegistrar("TheRegistrar").asBuilder().setAllowedTlds(ImmutableSet.of()).build());
persistPendingDeleteDomain();
@@ -669,7 +669,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_premiumBlocked() throws Exception {
void testFailure_premiumBlocked() throws Exception {
createTld("example");
setEppInput("domain_update_restore_request_premium.xml");
persistPendingDeleteDomain();
@@ -680,7 +680,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_reservedBlocked() throws Exception {
void testFailure_reservedBlocked() throws Exception {
createTld("tld");
persistResource(
Registry.get("tld")
@@ -693,7 +693,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_premiumNotAcked() throws Exception {
void testFailure_premiumNotAcked() throws Exception {
createTld("example");
setEppInput("domain_update_restore_request.xml", ImmutableMap.of("DOMAIN", "rich.example"));
persistPendingDeleteDomain();
@@ -702,7 +702,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
persistPendingDeleteDomain();
runFlow();
assertIcannReportingActivityFieldLogged("srs-dom-rgp-restore-request");
@@ -710,7 +710,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testIcannTransactionReportField_getsStored() throws Exception {
void testIcannTransactionReportField_getsStored() throws Exception {
persistPendingDeleteDomain();
runFlow();
DomainBase domain = reloadResourceByForeignKey();
@@ -726,7 +726,7 @@ public class DomainRestoreRequestFlowTest
}
@Test
public void testFailure_restoreReportsAreNotSupported() {
void testFailure_restoreReportsAreNotSupported() {
setEppInput("domain_update_restore_report.xml");
// This exception is referred to by its fully qualified path (rather than being imported) so
// that it is not included in the list of exceptions thrown by DomainRestoreRequestFlow, as this
@@ -77,15 +77,15 @@ import java.util.stream.Stream;
import org.joda.money.Money;
import org.joda.time.DateTime;
import org.joda.time.Duration;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link DomainTransferApproveFlow}. */
public class DomainTransferApproveFlowTest
class DomainTransferApproveFlowTest
extends DomainTransferFlowTestCase<DomainTransferApproveFlow, DomainBase> {
@Before
public void setUp() {
@BeforeEach
void setUp() {
setEppInput("domain_transfer_approve.xml");
// Change the registry so that the renew price changes a day minus 1 millisecond before the
// transfer (right after there will be an autorenew in the test case that has one) and then
@@ -341,18 +341,18 @@ public class DomainTransferApproveFlowTest
}
@Test
public void testDryRun() throws Exception {
void testDryRun() throws Exception {
setEppLoader("domain_transfer_approve.xml");
dryRunFlowAssertResponse(loadFile("domain_transfer_approve_response.xml"));
}
@Test
public void testSuccess() throws Exception {
void testSuccess() throws Exception {
doSuccessfulTest("tld", "domain_transfer_approve.xml", "domain_transfer_approve_response.xml");
}
@Test
public void testSuccess_nonDefaultTransferGracePeriod() throws Exception {
void testSuccess_nonDefaultTransferGracePeriod() throws Exception {
// We have to set up a new domain in a different TLD so that the billing event will be persisted
// with the new transfer grace period in mind.
createTld("net");
@@ -367,7 +367,7 @@ public class DomainTransferApproveFlowTest
}
@Test
public void testSuccess_domainAuthInfo() throws Exception {
void testSuccess_domainAuthInfo() throws Exception {
doSuccessfulTest(
"tld",
"domain_transfer_approve_domain_authinfo.xml",
@@ -375,7 +375,7 @@ public class DomainTransferApproveFlowTest
}
@Test
public void testSuccess_contactAuthInfo() throws Exception {
void testSuccess_contactAuthInfo() throws Exception {
doSuccessfulTest(
"tld",
"domain_transfer_approve_contact_authinfo.xml",
@@ -383,7 +383,7 @@ public class DomainTransferApproveFlowTest
}
@Test
public void testSuccess_autorenewBeforeTransfer() throws Exception {
void testSuccess_autorenewBeforeTransfer() throws Exception {
domain = reloadResourceByForeignKey();
DateTime oldExpirationTime = clock.nowUtc().minusDays(1);
persistResource(domain.asBuilder().setRegistrationExpirationTime(oldExpirationTime).build());
@@ -407,7 +407,7 @@ public class DomainTransferApproveFlowTest
}
@Test
public void testFailure_badContactPassword() {
void testFailure_badContactPassword() {
// Change the contact's password so it does not match the password in the file.
contact =
persistResource(
@@ -423,7 +423,7 @@ public class DomainTransferApproveFlowTest
}
@Test
public void testFailure_badDomainPassword() {
void testFailure_badDomainPassword() {
// Change the domain's password so it does not match the password in the file.
persistResource(
domain
@@ -438,7 +438,7 @@ public class DomainTransferApproveFlowTest
}
@Test
public void testFailure_neverBeenTransferred() {
void testFailure_neverBeenTransferred() {
changeTransferStatus(null);
EppException thrown =
assertThrows(
@@ -447,7 +447,7 @@ public class DomainTransferApproveFlowTest
}
@Test
public void testFailure_clientApproved() {
void testFailure_clientApproved() {
changeTransferStatus(TransferStatus.CLIENT_APPROVED);
EppException thrown =
assertThrows(
@@ -456,7 +456,7 @@ public class DomainTransferApproveFlowTest
}
@Test
public void testFailure_clientRejected() {
void testFailure_clientRejected() {
changeTransferStatus(TransferStatus.CLIENT_REJECTED);
EppException thrown =
assertThrows(
@@ -465,7 +465,7 @@ public class DomainTransferApproveFlowTest
}
@Test
public void testFailure_clientCancelled() {
void testFailure_clientCancelled() {
changeTransferStatus(TransferStatus.CLIENT_CANCELLED);
EppException thrown =
assertThrows(
@@ -474,7 +474,7 @@ public class DomainTransferApproveFlowTest
}
@Test
public void testFailure_serverApproved() {
void testFailure_serverApproved() {
changeTransferStatus(TransferStatus.SERVER_APPROVED);
EppException thrown =
assertThrows(
@@ -483,7 +483,7 @@ public class DomainTransferApproveFlowTest
}
@Test
public void testFailure_serverCancelled() {
void testFailure_serverCancelled() {
changeTransferStatus(TransferStatus.SERVER_CANCELLED);
EppException thrown =
assertThrows(
@@ -492,7 +492,7 @@ public class DomainTransferApproveFlowTest
}
@Test
public void testFailure_gainingClient() {
void testFailure_gainingClient() {
setClientIdForFlow("NewRegistrar");
EppException thrown =
assertThrows(
@@ -501,7 +501,7 @@ public class DomainTransferApproveFlowTest
}
@Test
public void testFailure_unrelatedClient() {
void testFailure_unrelatedClient() {
setClientIdForFlow("ClientZ");
EppException thrown =
assertThrows(
@@ -510,7 +510,7 @@ public class DomainTransferApproveFlowTest
}
@Test
public void testFailure_deletedDomain() throws Exception {
void testFailure_deletedDomain() throws Exception {
persistResource(domain.asBuilder().setDeletionTime(clock.nowUtc().minusDays(1)).build());
ResourceDoesNotExistException thrown =
assertThrows(
@@ -520,7 +520,7 @@ public class DomainTransferApproveFlowTest
}
@Test
public void testFailure_nonexistentDomain() throws Exception {
void testFailure_nonexistentDomain() throws Exception {
deleteResource(domain);
ResourceDoesNotExistException thrown =
assertThrows(
@@ -530,7 +530,7 @@ public class DomainTransferApproveFlowTest
}
@Test
public void testFailure_notAuthorizedForTld() {
void testFailure_notAuthorizedForTld() {
persistResource(
loadRegistrar("TheRegistrar").asBuilder().setAllowedTlds(ImmutableSet.of()).build());
EppException thrown =
@@ -543,7 +543,7 @@ public class DomainTransferApproveFlowTest
}
@Test
public void testSuccess_superuserNotAuthorizedForTld() throws Exception {
void testSuccess_superuserNotAuthorizedForTld() throws Exception {
persistResource(
loadRegistrar("TheRegistrar").asBuilder().setAllowedTlds(ImmutableSet.of()).build());
runFlowAssertResponse(
@@ -556,7 +556,7 @@ public class DomainTransferApproveFlowTest
// entering pending delete phase. So it's already handled in that test case.
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
runFlow();
assertIcannReportingActivityFieldLogged("srs-dom-transfer-approve");
assertTldsFieldLogged("tld");
@@ -572,7 +572,7 @@ public class DomainTransferApproveFlowTest
}
@Test
public void testIcannTransactionRecord_noRecordsToCancel() throws Exception {
void testIcannTransactionRecord_noRecordsToCancel() throws Exception {
setUpGracePeriodDurations();
clock.advanceOneMilli();
runFlow();
@@ -585,7 +585,7 @@ public class DomainTransferApproveFlowTest
}
@Test
public void testIcannTransactionRecord_cancelsPreviousRecords() throws Exception {
void testIcannTransactionRecord_cancelsPreviousRecords() throws Exception {
clock.advanceOneMilli();
setUpGracePeriodDurations();
DomainTransactionRecord previousSuccessRecord =
@@ -613,7 +613,7 @@ public class DomainTransferApproveFlowTest
}
@Test
public void testSuccess_superuserExtension_transferPeriodZero() throws Exception {
void testSuccess_superuserExtension_transferPeriodZero() throws Exception {
domain = reloadResourceByForeignKey();
DomainTransferData.Builder transferDataBuilder = domain.getTransferData().asBuilder();
persistResource(
@@ -632,8 +632,7 @@ public class DomainTransferApproveFlowTest
}
@Test
public void testSuccess_superuserExtension_transferPeriodZero_autorenewGraceActive()
throws Exception {
void testSuccess_superuserExtension_transferPeriodZero_autorenewGraceActive() throws Exception {
DomainBase domain = reloadResourceByForeignKey();
Key<Recurring> existingAutorenewEvent = domain.getAutorenewBillingEvent();
// Set domain to have auto-renewed just before the transfer request, so that it will have an
@@ -55,15 +55,15 @@ import google.registry.model.transfer.TransferResponse.DomainTransferResponse;
import google.registry.model.transfer.TransferStatus;
import org.joda.time.DateTime;
import org.joda.time.Duration;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link DomainTransferCancelFlow}. */
public class DomainTransferCancelFlowTest
class DomainTransferCancelFlowTest
extends DomainTransferFlowTestCase<DomainTransferCancelFlow, DomainBase> {
@Before
public void setUp() {
@BeforeEach
void setUp() {
setEppInput("domain_transfer_cancel.xml");
setClientIdForFlow("NewRegistrar");
setupDomainWithPendingTransfer("example", "tld");
@@ -192,31 +192,31 @@ public class DomainTransferCancelFlowTest
}
@Test
public void testDryRun() throws Exception {
void testDryRun() throws Exception {
setEppInput("domain_transfer_cancel.xml");
eppLoader.replaceAll("JD1234-REP", contact.getRepoId());
dryRunFlowAssertResponse(loadFile("domain_transfer_cancel_response.xml"));
}
@Test
public void testSuccess() throws Exception {
void testSuccess() throws Exception {
doSuccessfulTest("domain_transfer_cancel.xml", "domain_transfer_cancel_response.xml");
}
@Test
public void testSuccess_domainAuthInfo() throws Exception {
void testSuccess_domainAuthInfo() throws Exception {
doSuccessfulTest(
"domain_transfer_cancel_domain_authinfo.xml", "domain_transfer_cancel_response.xml");
}
@Test
public void testSuccess_contactAuthInfo() throws Exception {
void testSuccess_contactAuthInfo() throws Exception {
doSuccessfulTest(
"domain_transfer_cancel_contact_authinfo.xml", "domain_transfer_cancel_response.xml");
}
@Test
public void testFailure_badContactPassword() {
void testFailure_badContactPassword() {
// Change the contact's password so it does not match the password in the file.
contact =
persistResource(
@@ -232,7 +232,7 @@ public class DomainTransferCancelFlowTest
}
@Test
public void testFailure_badDomainPassword() {
void testFailure_badDomainPassword() {
// Change the domain's password so it does not match the password in the file.
domain =
persistResource(
@@ -248,7 +248,7 @@ public class DomainTransferCancelFlowTest
}
@Test
public void testFailure_neverBeenTransferred() {
void testFailure_neverBeenTransferred() {
changeTransferStatus(null);
EppException thrown =
assertThrows(
@@ -257,7 +257,7 @@ public class DomainTransferCancelFlowTest
}
@Test
public void testFailure_clientApproved() {
void testFailure_clientApproved() {
changeTransferStatus(TransferStatus.CLIENT_APPROVED);
EppException thrown =
assertThrows(
@@ -266,7 +266,7 @@ public class DomainTransferCancelFlowTest
}
@Test
public void testFailure_clientRejected() {
void testFailure_clientRejected() {
changeTransferStatus(TransferStatus.CLIENT_REJECTED);
EppException thrown =
assertThrows(
@@ -275,7 +275,7 @@ public class DomainTransferCancelFlowTest
}
@Test
public void testFailure_clientCancelled() {
void testFailure_clientCancelled() {
changeTransferStatus(TransferStatus.CLIENT_CANCELLED);
EppException thrown =
assertThrows(
@@ -284,7 +284,7 @@ public class DomainTransferCancelFlowTest
}
@Test
public void testFailure_serverApproved() {
void testFailure_serverApproved() {
changeTransferStatus(TransferStatus.SERVER_APPROVED);
EppException thrown =
assertThrows(
@@ -293,7 +293,7 @@ public class DomainTransferCancelFlowTest
}
@Test
public void testFailure_serverCancelled() {
void testFailure_serverCancelled() {
changeTransferStatus(TransferStatus.SERVER_CANCELLED);
EppException thrown =
assertThrows(
@@ -302,7 +302,7 @@ public class DomainTransferCancelFlowTest
}
@Test
public void testFailure_sponsoringClient() {
void testFailure_sponsoringClient() {
setClientIdForFlow("TheRegistrar");
EppException thrown =
assertThrows(
@@ -311,7 +311,7 @@ public class DomainTransferCancelFlowTest
}
@Test
public void testFailure_unrelatedClient() {
void testFailure_unrelatedClient() {
setClientIdForFlow("ClientZ");
EppException thrown =
assertThrows(
@@ -320,7 +320,7 @@ public class DomainTransferCancelFlowTest
}
@Test
public void testFailure_deletedDomain() throws Exception {
void testFailure_deletedDomain() throws Exception {
domain =
persistResource(domain.asBuilder().setDeletionTime(clock.nowUtc().minusDays(1)).build());
ResourceDoesNotExistException thrown =
@@ -330,7 +330,7 @@ public class DomainTransferCancelFlowTest
}
@Test
public void testFailure_nonexistentDomain() throws Exception {
void testFailure_nonexistentDomain() throws Exception {
deleteResource(domain);
ResourceDoesNotExistException thrown =
assertThrows(
@@ -339,7 +339,7 @@ public class DomainTransferCancelFlowTest
}
@Test
public void testFailure_notAuthorizedForTld() {
void testFailure_notAuthorizedForTld() {
persistResource(
loadRegistrar("NewRegistrar").asBuilder().setAllowedTlds(ImmutableSet.of()).build());
EppException thrown =
@@ -352,7 +352,7 @@ public class DomainTransferCancelFlowTest
}
@Test
public void testSuccess_superuserNotAuthorizedForTld() throws Exception {
void testSuccess_superuserNotAuthorizedForTld() throws Exception {
persistResource(
loadRegistrar("NewRegistrar").asBuilder().setAllowedTlds(ImmutableSet.of()).build());
clock.advanceOneMilli();
@@ -364,7 +364,7 @@ public class DomainTransferCancelFlowTest
// entering pending delete phase. So it's already handled in that test case.
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
clock.advanceOneMilli();
runFlow();
assertIcannReportingActivityFieldLogged("srs-dom-transfer-cancel");
@@ -372,7 +372,7 @@ public class DomainTransferCancelFlowTest
}
@Test
public void testIcannTransactionRecord_noRecordsToCancel() throws Exception {
void testIcannTransactionRecord_noRecordsToCancel() throws Exception {
clock.advanceOneMilli();
runFlow();
HistoryEntry persistedEntry = getOnlyHistoryEntryOfType(domain, DOMAIN_TRANSFER_CANCEL);
@@ -381,7 +381,7 @@ public class DomainTransferCancelFlowTest
}
@Test
public void testIcannTransactionRecord_cancelsPreviousRecords() throws Exception {
void testIcannTransactionRecord_cancelsPreviousRecords() throws Exception {
clock.advanceOneMilli();
persistResource(
Registry.get("tld")
@@ -46,7 +46,7 @@ import google.registry.model.transfer.TransferStatus;
import google.registry.testing.AppEngineRule;
import org.joda.time.DateTime;
import org.joda.time.Duration;
import org.junit.Before;
import org.junit.jupiter.api.BeforeEach;
/**
* Base class for domain transfer flow unit tests.
@@ -60,28 +60,28 @@ public class DomainTransferFlowTestCase<F extends Flow, R extends EppResource>
// Transfer is requested on the 6th and expires on the 11th.
// The "now" of this flow is on the 9th, 3 days in.
protected static final DateTime TRANSFER_REQUEST_TIME = DateTime.parse("2000-06-06T22:00:00.0Z");
protected static final DateTime TRANSFER_EXPIRATION_TIME =
static final DateTime TRANSFER_REQUEST_TIME = DateTime.parse("2000-06-06T22:00:00.0Z");
static final DateTime TRANSFER_EXPIRATION_TIME =
TRANSFER_REQUEST_TIME.plus(Registry.DEFAULT_AUTOMATIC_TRANSFER_LENGTH);
protected static final Duration TIME_SINCE_REQUEST = Duration.standardDays(3);
protected static final int EXTENDED_REGISTRATION_YEARS = 1;
protected static final DateTime REGISTRATION_EXPIRATION_TIME =
private static final Duration TIME_SINCE_REQUEST = Duration.standardDays(3);
private static final int EXTENDED_REGISTRATION_YEARS = 1;
private static final DateTime REGISTRATION_EXPIRATION_TIME =
DateTime.parse("2001-09-08T22:00:00.0Z");
protected static final DateTime EXTENDED_REGISTRATION_EXPIRATION_TIME =
static final DateTime EXTENDED_REGISTRATION_EXPIRATION_TIME =
REGISTRATION_EXPIRATION_TIME.plusYears(EXTENDED_REGISTRATION_YEARS);
protected ContactResource contact;
protected DomainBase domain;
protected HostResource subordinateHost;
protected HistoryEntry historyEntryDomainCreate;
HostResource subordinateHost;
private HistoryEntry historyEntryDomainCreate;
public DomainTransferFlowTestCase() {
DomainTransferFlowTestCase() {
checkState(!Registry.DEFAULT_TRANSFER_GRACE_PERIOD.isShorterThan(TIME_SINCE_REQUEST));
clock.setTo(TRANSFER_REQUEST_TIME.plus(TIME_SINCE_REQUEST));
}
@Before
public void makeClientZ() {
@BeforeEach
void makeClientZ() {
// Registrar ClientZ is used in tests that need another registrar that definitely doesn't own
// the resources in question.
persistResource(
@@ -97,7 +97,7 @@ public class DomainTransferFlowTestCase<F extends Flow, R extends EppResource>
}
/** Adds a domain with no pending transfer on it. */
protected void setupDomain(String label, String tld) {
void setupDomain(String label, String tld) {
createTld(tld);
contact = persistActiveContact("jd1234");
domain =
@@ -124,7 +124,7 @@ public class DomainTransferFlowTestCase<F extends Flow, R extends EppResource>
historyEntryDomainCreate = getOnlyHistoryEntryOfType(domain, DOMAIN_CREATE);
}
protected BillingEvent.OneTime getBillingEventForImplicitTransfer() {
BillingEvent.OneTime getBillingEventForImplicitTransfer() {
HistoryEntry historyEntry =
getOnlyHistoryEntryOfType(domain, HistoryEntry.Type.DOMAIN_TRANSFER_REQUEST);
return createBillingEventForTransfer(
@@ -135,7 +135,7 @@ public class DomainTransferFlowTestCase<F extends Flow, R extends EppResource>
}
/** Get the autorenew event that the losing client will have after a SERVER_APPROVED transfer. */
protected BillingEvent.Recurring getLosingClientAutorenewEvent() {
BillingEvent.Recurring getLosingClientAutorenewEvent() {
return new BillingEvent.Recurring.Builder()
.setReason(Reason.RENEW)
.setFlags(ImmutableSet.of(Flag.AUTO_RENEW))
@@ -148,7 +148,7 @@ public class DomainTransferFlowTestCase<F extends Flow, R extends EppResource>
}
/** Get the autorenew event that the gaining client will have after a SERVER_APPROVED transfer. */
protected BillingEvent.Recurring getGainingClientAutorenewEvent() {
BillingEvent.Recurring getGainingClientAutorenewEvent() {
return new BillingEvent.Recurring.Builder()
.setReason(Reason.RENEW)
.setFlags(ImmutableSet.of(Flag.AUTO_RENEW))
@@ -160,7 +160,7 @@ public class DomainTransferFlowTestCase<F extends Flow, R extends EppResource>
.build();
}
protected void assertTransferFailed(
void assertTransferFailed(
DomainBase domain, TransferStatus status, TransferData oldTransferData) {
assertAboutDomains().that(domain)
.doesNotHaveStatusValue(StatusValue.PENDING_TRANSFER).and()
@@ -176,7 +176,7 @@ public class DomainTransferFlowTestCase<F extends Flow, R extends EppResource>
}
/** Adds a domain that has a pending transfer on it from TheRegistrar to NewRegistrar. */
protected void setupDomainWithPendingTransfer(String label, String tld) {
void setupDomainWithPendingTransfer(String label, String tld) {
setupDomain(label, tld);
domain = persistWithPendingTransfer(domain);
}
@@ -34,15 +34,15 @@ import google.registry.model.domain.DomainBase;
import google.registry.model.eppcommon.AuthInfo.PasswordAuth;
import google.registry.model.reporting.HistoryEntry;
import google.registry.model.transfer.TransferStatus;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link DomainTransferQueryFlow}. */
public class DomainTransferQueryFlowTest
class DomainTransferQueryFlowTest
extends DomainTransferFlowTestCase<DomainTransferQueryFlow, DomainBase> {
@Before
public void setUp() {
@BeforeEach
void setUp() {
setEppInput("domain_transfer_query.xml");
setClientIdForFlow("NewRegistrar");
setupDomainWithPendingTransfer("example", "tld");
@@ -80,67 +80,67 @@ public class DomainTransferQueryFlowTest
}
@Test
public void testSuccess() throws Exception {
void testSuccess() throws Exception {
doSuccessfulTest("domain_transfer_query.xml", "domain_transfer_query_response.xml", 1);
}
@Test
public void testSuccess_sponsoringClient() throws Exception {
void testSuccess_sponsoringClient() throws Exception {
setClientIdForFlow("TheRegistrar");
doSuccessfulTest("domain_transfer_query.xml", "domain_transfer_query_response.xml", 1);
}
@Test
public void testSuccess_domainAuthInfo() throws Exception {
void testSuccess_domainAuthInfo() throws Exception {
setClientIdForFlow("ClientZ");
doSuccessfulTest(
"domain_transfer_query_domain_authinfo.xml", "domain_transfer_query_response.xml", 1);
}
@Test
public void testSuccess_contactAuthInfo() throws Exception {
void testSuccess_contactAuthInfo() throws Exception {
setClientIdForFlow("ClientZ");
doSuccessfulTest(
"domain_transfer_query_contact_authinfo.xml", "domain_transfer_query_response.xml", 1);
}
@Test
public void testSuccess_clientApproved() throws Exception {
void testSuccess_clientApproved() throws Exception {
changeTransferStatus(TransferStatus.CLIENT_APPROVED);
doSuccessfulTest(
"domain_transfer_query.xml", "domain_transfer_query_response_client_approved.xml", 1);
}
@Test
public void testSuccess_clientRejected() throws Exception {
void testSuccess_clientRejected() throws Exception {
changeTransferStatus(TransferStatus.CLIENT_REJECTED);
doSuccessfulTest(
"domain_transfer_query.xml", "domain_transfer_query_response_client_rejected.xml", 1);
}
@Test
public void testSuccess_clientCancelled() throws Exception {
void testSuccess_clientCancelled() throws Exception {
changeTransferStatus(TransferStatus.CLIENT_CANCELLED);
doSuccessfulTest(
"domain_transfer_query.xml", "domain_transfer_query_response_client_cancelled.xml", 1);
}
@Test
public void testSuccess_serverApproved() throws Exception {
void testSuccess_serverApproved() throws Exception {
changeTransferStatus(TransferStatus.SERVER_APPROVED);
doSuccessfulTest(
"domain_transfer_query.xml", "domain_transfer_query_response_server_approved.xml", 1);
}
@Test
public void testSuccess_serverCancelled() throws Exception {
void testSuccess_serverCancelled() throws Exception {
changeTransferStatus(TransferStatus.SERVER_CANCELLED);
doSuccessfulTest(
"domain_transfer_query.xml", "domain_transfer_query_response_server_cancelled.xml", 1);
}
@Test
public void testSuccess_tenYears() throws Exception {
void testSuccess_tenYears() throws Exception {
// Extend registration by 9 years here; with the extra 1 year from the transfer, we should
// hit the 10-year capping.
domain =
@@ -153,7 +153,7 @@ public class DomainTransferQueryFlowTest
}
@Test
public void testFailure_pendingDeleteDomain() throws Exception {
void testFailure_pendingDeleteDomain() throws Exception {
changeTransferStatus(TransferStatus.SERVER_CANCELLED);
domain =
persistResource(domain.asBuilder().setDeletionTime(clock.nowUtc().plusDays(1)).build());
@@ -162,7 +162,7 @@ public class DomainTransferQueryFlowTest
}
@Test
public void testFailure_badContactPassword() {
void testFailure_badContactPassword() {
// Change the contact's password so it does not match the password in the file.
contact =
persistResource(
@@ -178,7 +178,7 @@ public class DomainTransferQueryFlowTest
}
@Test
public void testFailure_badDomainPassword() {
void testFailure_badDomainPassword() {
// Change the domain's password so it does not match the password in the file.
domain =
persistResource(
@@ -194,7 +194,7 @@ public class DomainTransferQueryFlowTest
}
@Test
public void testFailure_neverBeenTransferred() {
void testFailure_neverBeenTransferred() {
changeTransferStatus(null);
EppException thrown =
assertThrows(
@@ -204,7 +204,7 @@ public class DomainTransferQueryFlowTest
}
@Test
public void testFailure_unrelatedClient() {
void testFailure_unrelatedClient() {
setClientIdForFlow("ClientZ");
EppException thrown =
assertThrows(
@@ -214,7 +214,7 @@ public class DomainTransferQueryFlowTest
}
@Test
public void testFailure_deletedDomain() throws Exception {
void testFailure_deletedDomain() throws Exception {
domain =
persistResource(domain.asBuilder().setDeletionTime(clock.nowUtc().minusDays(1)).build());
ResourceDoesNotExistException thrown =
@@ -224,7 +224,7 @@ public class DomainTransferQueryFlowTest
}
@Test
public void testFailure_nonexistentDomain() throws Exception {
void testFailure_nonexistentDomain() throws Exception {
deleteResource(domain);
ResourceDoesNotExistException thrown =
assertThrows(
@@ -233,14 +233,14 @@ public class DomainTransferQueryFlowTest
}
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
runFlow();
assertIcannReportingActivityFieldLogged("srs-dom-transfer-query");
assertTldsFieldLogged("tld");
}
@Test
public void testSuccess_serverApproved_afterAutorenews() throws Exception {
void testSuccess_serverApproved_afterAutorenews() throws Exception {
// Set the clock to just past the extended registration time. We'd expect the domain to have
// auto-renewed once, but the transfer query response should be the same.
clock.setTo(EXTENDED_REGISTRATION_EXPIRATION_TIME.plusMillis(1));
@@ -58,15 +58,15 @@ import google.registry.model.transfer.TransferResponse;
import google.registry.model.transfer.TransferStatus;
import org.joda.time.DateTime;
import org.joda.time.Duration;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link DomainTransferRejectFlow}. */
public class DomainTransferRejectFlowTest
class DomainTransferRejectFlowTest
extends DomainTransferFlowTestCase<DomainTransferRejectFlow, DomainBase> {
@Before
public void setUp() {
@BeforeEach
void setUp() {
setEppInput("domain_transfer_reject.xml");
setClientIdForFlow("TheRegistrar");
setupDomainWithPendingTransfer("example", "tld");
@@ -152,31 +152,31 @@ public class DomainTransferRejectFlowTest
}
@Test
public void testSuccess() throws Exception {
void testSuccess() throws Exception {
doSuccessfulTest("domain_transfer_reject.xml", "domain_transfer_reject_response.xml");
}
@Test
public void testDryRun() throws Exception {
void testDryRun() throws Exception {
setEppInput("domain_transfer_reject.xml");
eppLoader.replaceAll("JD1234-REP", contact.getRepoId());
dryRunFlowAssertResponse(loadFile("domain_transfer_reject_response.xml"));
}
@Test
public void testSuccess_domainAuthInfo() throws Exception {
void testSuccess_domainAuthInfo() throws Exception {
doSuccessfulTest(
"domain_transfer_reject_domain_authinfo.xml", "domain_transfer_reject_response.xml");
}
@Test
public void testSuccess_contactAuthInfo() throws Exception {
void testSuccess_contactAuthInfo() throws Exception {
doSuccessfulTest(
"domain_transfer_reject_contact_authinfo.xml", "domain_transfer_reject_response.xml");
}
@Test
public void testFailure_notAuthorizedForTld() {
void testFailure_notAuthorizedForTld() {
persistResource(
loadRegistrar("TheRegistrar").asBuilder().setAllowedTlds(ImmutableSet.of()).build());
EppException thrown =
@@ -189,7 +189,7 @@ public class DomainTransferRejectFlowTest
}
@Test
public void testSuccess_superuserNotAuthorizedForTld() throws Exception {
void testSuccess_superuserNotAuthorizedForTld() throws Exception {
persistResource(
loadRegistrar("TheRegistrar").asBuilder().setAllowedTlds(ImmutableSet.of()).build());
runFlowAssertResponse(
@@ -197,7 +197,7 @@ public class DomainTransferRejectFlowTest
}
@Test
public void testFailure_badContactPassword() {
void testFailure_badContactPassword() {
// Change the contact's password so it does not match the password in the file.
contact =
persistResource(
@@ -213,7 +213,7 @@ public class DomainTransferRejectFlowTest
}
@Test
public void testFailure_badDomainPassword() {
void testFailure_badDomainPassword() {
// Change the domain's password so it does not match the password in the file.
domain =
persistResource(
@@ -229,7 +229,7 @@ public class DomainTransferRejectFlowTest
}
@Test
public void testFailure_neverBeenTransferred() {
void testFailure_neverBeenTransferred() {
changeTransferStatus(null);
EppException thrown =
assertThrows(
@@ -238,7 +238,7 @@ public class DomainTransferRejectFlowTest
}
@Test
public void testFailure_clientApproved() {
void testFailure_clientApproved() {
changeTransferStatus(TransferStatus.CLIENT_APPROVED);
EppException thrown =
assertThrows(
@@ -247,7 +247,7 @@ public class DomainTransferRejectFlowTest
}
@Test
public void testFailure_clientRejected() {
void testFailure_clientRejected() {
changeTransferStatus(TransferStatus.CLIENT_REJECTED);
EppException thrown =
assertThrows(
@@ -256,7 +256,7 @@ public class DomainTransferRejectFlowTest
}
@Test
public void testFailure_clientCancelled() {
void testFailure_clientCancelled() {
changeTransferStatus(TransferStatus.CLIENT_CANCELLED);
EppException thrown =
assertThrows(
@@ -265,7 +265,7 @@ public class DomainTransferRejectFlowTest
}
@Test
public void testFailure_serverApproved() {
void testFailure_serverApproved() {
changeTransferStatus(TransferStatus.SERVER_APPROVED);
EppException thrown =
assertThrows(
@@ -274,7 +274,7 @@ public class DomainTransferRejectFlowTest
}
@Test
public void testFailure_serverCancelled() {
void testFailure_serverCancelled() {
changeTransferStatus(TransferStatus.SERVER_CANCELLED);
EppException thrown =
assertThrows(
@@ -283,7 +283,7 @@ public class DomainTransferRejectFlowTest
}
@Test
public void testFailure_gainingClient() {
void testFailure_gainingClient() {
setClientIdForFlow("NewRegistrar");
EppException thrown =
assertThrows(
@@ -292,7 +292,7 @@ public class DomainTransferRejectFlowTest
}
@Test
public void testFailure_unrelatedClient() {
void testFailure_unrelatedClient() {
setClientIdForFlow("ClientZ");
EppException thrown =
assertThrows(
@@ -301,7 +301,7 @@ public class DomainTransferRejectFlowTest
}
@Test
public void testFailure_deletedDomain() throws Exception {
void testFailure_deletedDomain() throws Exception {
domain =
persistResource(domain.asBuilder().setDeletionTime(clock.nowUtc().minusDays(1)).build());
ResourceDoesNotExistException thrown =
@@ -311,7 +311,7 @@ public class DomainTransferRejectFlowTest
}
@Test
public void testFailure_nonexistentDomain() throws Exception {
void testFailure_nonexistentDomain() throws Exception {
deleteResource(domain);
ResourceDoesNotExistException thrown =
assertThrows(
@@ -323,7 +323,7 @@ public class DomainTransferRejectFlowTest
// entering pending delete phase. So it's already handled in that test case.
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
runFlow();
assertIcannReportingActivityFieldLogged("srs-dom-transfer-reject");
assertTldsFieldLogged("tld");
@@ -339,7 +339,7 @@ public class DomainTransferRejectFlowTest
}
@Test
public void testIcannTransactionRecord_noRecordsToCancel() throws Exception {
void testIcannTransactionRecord_noRecordsToCancel() throws Exception {
setUpGracePeriodDurations();
runFlow();
HistoryEntry persistedEntry = getOnlyHistoryEntryOfType(domain, DOMAIN_TRANSFER_REJECT);
@@ -349,7 +349,7 @@ public class DomainTransferRejectFlowTest
}
@Test
public void testIcannTransactionRecord_cancelsPreviousRecords() throws Exception {
void testIcannTransactionRecord_cancelsPreviousRecords() throws Exception {
setUpGracePeriodDurations();
DomainTransactionRecord previousSuccessRecord =
DomainTransactionRecord.create("tld", clock.nowUtc().plusDays(1), TRANSFER_SUCCESSFUL, 1);
@@ -109,11 +109,11 @@ import java.util.stream.Stream;
import org.joda.money.Money;
import org.joda.time.DateTime;
import org.joda.time.Duration;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link DomainTransferRequestFlow}. */
public class DomainTransferRequestFlowTest
class DomainTransferRequestFlowTest
extends DomainTransferFlowTestCase<DomainTransferRequestFlow, DomainBase> {
private static final ImmutableMap<String, String> BASE_FEE_MAP =
@@ -151,8 +151,8 @@ public class DomainTransferRequestFlowTest
.put("FEE_NS", "fee12")
.build();
@Before
public void setUp() {
@BeforeEach
void setUp() {
setEppInput("domain_transfer_request.xml");
setClientIdForFlow("NewRegistrar");
}
@@ -655,7 +655,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testDryRun() throws Exception {
void testDryRun() throws Exception {
setupDomain("example", "tld");
setEppInput("domain_transfer_request.xml");
eppLoader.replaceAll("JD1234-REP", contact.getRepoId());
@@ -663,34 +663,34 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testSuccess() throws Exception {
void testSuccess() throws Exception {
setupDomain("example", "tld");
doSuccessfulTest("domain_transfer_request.xml", "domain_transfer_request_response.xml");
}
@Test
public void testSuccess_fee_v06() throws Exception {
void testSuccess_fee_v06() throws Exception {
setupDomain("example", "tld");
doSuccessfulTest(
"domain_transfer_request_fee.xml", "domain_transfer_request_response_fee.xml", FEE_06_MAP);
}
@Test
public void testSuccess_fee_v11() throws Exception {
void testSuccess_fee_v11() throws Exception {
setupDomain("example", "tld");
doSuccessfulTest(
"domain_transfer_request_fee.xml", "domain_transfer_request_response_fee.xml", FEE_11_MAP);
}
@Test
public void testSuccess_fee_v12() throws Exception {
void testSuccess_fee_v12() throws Exception {
setupDomain("example", "tld");
doSuccessfulTest(
"domain_transfer_request_fee.xml", "domain_transfer_request_response_fee.xml", FEE_12_MAP);
}
@Test
public void testSuccess_fee_withDefaultAttributes_v06() throws Exception {
void testSuccess_fee_withDefaultAttributes_v06() throws Exception {
setupDomain("example", "tld");
doSuccessfulTest(
"domain_transfer_request_fee_defaults.xml",
@@ -699,7 +699,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testSuccess_fee_withDefaultAttributes_v11() throws Exception {
void testSuccess_fee_withDefaultAttributes_v11() throws Exception {
setupDomain("example", "tld");
doSuccessfulTest(
"domain_transfer_request_fee_defaults.xml",
@@ -708,7 +708,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testSuccess_fee_withDefaultAttributes_v12() throws Exception {
void testSuccess_fee_withDefaultAttributes_v12() throws Exception {
setupDomain("example", "tld");
doSuccessfulTest(
"domain_transfer_request_fee_defaults.xml",
@@ -717,7 +717,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_refundableFee_v06() {
void testFailure_refundableFee_v06() {
setupDomain("example", "tld");
EppException thrown =
assertThrows(
@@ -727,7 +727,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_refundableFee_v11() {
void testFailure_refundableFee_v11() {
setupDomain("example", "tld");
EppException thrown =
assertThrows(
@@ -737,7 +737,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_refundableFee_v12() {
void testFailure_refundableFee_v12() {
setupDomain("example", "tld");
EppException thrown =
assertThrows(
@@ -747,7 +747,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_gracePeriodFee_v06() {
void testFailure_gracePeriodFee_v06() {
setupDomain("example", "tld");
EppException thrown =
assertThrows(
@@ -757,7 +757,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_gracePeriodFee_v11() {
void testFailure_gracePeriodFee_v11() {
setupDomain("example", "tld");
EppException thrown =
assertThrows(
@@ -767,7 +767,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_gracePeriodFee_v12() {
void testFailure_gracePeriodFee_v12() {
setupDomain("example", "tld");
EppException thrown =
assertThrows(
@@ -777,7 +777,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_appliedFee_v06() {
void testFailure_appliedFee_v06() {
setupDomain("example", "tld");
EppException thrown =
assertThrows(
@@ -787,7 +787,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_appliedFee_v11() {
void testFailure_appliedFee_v11() {
setupDomain("example", "tld");
EppException thrown =
assertThrows(
@@ -797,7 +797,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_appliedFee_v12() {
void testFailure_appliedFee_v12() {
setupDomain("example", "tld");
EppException thrown =
assertThrows(
@@ -807,7 +807,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_suspendedRegistrarCantTransferDomain() {
void testFailure_suspendedRegistrarCantTransferDomain() {
setupDomain("example", "tld");
clock.advanceOneMilli();
persistResource(
@@ -824,7 +824,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_pendingRegistrarCantTransferDomain() {
void testFailure_pendingRegistrarCantTransferDomain() {
setupDomain("example", "tld");
clock.advanceOneMilli();
persistResource(
@@ -841,7 +841,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testSuccess_nonDefaultAutomaticTransferLength() throws Exception {
void testSuccess_nonDefaultAutomaticTransferLength() throws Exception {
setupDomain("example", "tld");
persistResource(
Registry.get("tld")
@@ -853,7 +853,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testSuccess_nonDefaultTransferGracePeriod() throws Exception {
void testSuccess_nonDefaultTransferGracePeriod() throws Exception {
setupDomain("example", "tld");
persistResource(
Registry.get("tld")
@@ -864,14 +864,14 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testSuccess_missingPeriod_defaultsToOneYear() throws Exception {
void testSuccess_missingPeriod_defaultsToOneYear() throws Exception {
setupDomain("example", "tld");
doSuccessfulTest(
"domain_transfer_request_missing_period.xml", "domain_transfer_request_response.xml");
}
@Test
public void testSuccess_canTransferAwayFromSuspendedRegistrar() throws Exception {
void testSuccess_canTransferAwayFromSuspendedRegistrar() throws Exception {
setupDomain("example", "tld");
clock.advanceOneMilli();
persistResource(
@@ -884,7 +884,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testSuccess_inQuietPeriod() throws Exception {
void testSuccess_inQuietPeriod() throws Exception {
setupDomain("example", "tld");
persistResource(
Registry.get("tld")
@@ -895,7 +895,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_multiYearPeriod() {
void testFailure_multiYearPeriod() {
setupDomain("example", "tld");
clock.advanceOneMilli();
EppException thrown =
@@ -906,8 +906,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testSuccess_superuserExtension_zeroPeriod_nonZeroAutomaticTransferLength()
throws Exception {
void testSuccess_superuserExtension_zeroPeriod_nonZeroAutomaticTransferLength() throws Exception {
setupDomain("example", "tld");
eppRequestSource = EppRequestSource.TOOL;
clock.advanceOneMilli();
@@ -922,8 +921,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testSuccess_superuserExtension_zeroPeriod_zeroAutomaticTransferLength()
throws Exception {
void testSuccess_superuserExtension_zeroPeriod_zeroAutomaticTransferLength() throws Exception {
setupDomain("example", "tld");
eppRequestSource = EppRequestSource.TOOL;
clock.advanceOneMilli();
@@ -938,7 +936,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testSuccess_superuserExtension_nonZeroPeriod_nonZeroAutomaticTransferLength()
void testSuccess_superuserExtension_nonZeroPeriod_nonZeroAutomaticTransferLength()
throws Exception {
setupDomain("example", "tld");
eppRequestSource = EppRequestSource.TOOL;
@@ -954,7 +952,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testSuccess_superuserExtension_zeroPeriod_autorenewGraceActive() throws Exception {
void testSuccess_superuserExtension_zeroPeriod_autorenewGraceActive() throws Exception {
eppRequestSource = EppRequestSource.TOOL;
setupDomain("example", "tld");
Key<BillingEvent.Recurring> existingAutorenewEvent = domain.getAutorenewBillingEvent();
@@ -986,7 +984,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_superuserExtension_twoYearPeriod() {
void testFailure_superuserExtension_twoYearPeriod() {
setupDomain("example", "tld");
eppRequestSource = EppRequestSource.TOOL;
clock.advanceOneMilli();
@@ -1000,7 +998,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_superuserExtension_zeroPeriod_feeTransferExtension() {
void testFailure_superuserExtension_zeroPeriod_feeTransferExtension() {
setupDomain("example", "tld");
eppRequestSource = EppRequestSource.TOOL;
clock.advanceOneMilli();
@@ -1014,7 +1012,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testSuccess_cappedExpiration() throws Exception {
void testSuccess_cappedExpiration() throws Exception {
setupDomain("example", "tld");
// Set the domain to expire 10 years from now (as if it were just created with a 10-year term).
domain =
@@ -1031,14 +1029,14 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testSuccess_domainAuthInfo() throws Exception {
void testSuccess_domainAuthInfo() throws Exception {
setupDomain("example", "tld");
doSuccessfulTest(
"domain_transfer_request_domain_authinfo.xml", "domain_transfer_request_response.xml");
}
@Test
public void testSuccess_customLogicFee() throws Exception {
void testSuccess_customLogicFee() throws Exception {
setupDomain("expensive-domain", "foo");
clock.advanceOneMilli();
doSuccessfulTest(
@@ -1057,7 +1055,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_notAuthorizedForTld() {
void testFailure_notAuthorizedForTld() {
setupDomain("example", "tld");
persistResource(
loadRegistrar("NewRegistrar").asBuilder().setAllowedTlds(ImmutableSet.of()).build());
@@ -1071,7 +1069,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testSuccess_superuserNotAuthorizedForTld() throws Exception {
void testSuccess_superuserNotAuthorizedForTld() throws Exception {
setupDomain("example", "tld");
persistResource(
loadRegistrar("NewRegistrar").asBuilder().setAllowedTlds(ImmutableSet.of()).build());
@@ -1081,7 +1079,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testSuccess_autorenewGraceActive_onlyAtTransferRequestTime() throws Exception {
void testSuccess_autorenewGraceActive_onlyAtTransferRequestTime() throws Exception {
setupDomain("example", "tld");
// Set the domain to have auto-renewed long enough ago that it is still in the autorenew grace
// period at the transfer request time, but will have exited it by the automatic transfer time.
@@ -1110,7 +1108,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testSuccess_autorenewGraceActive_throughoutTransferWindow() throws Exception {
void testSuccess_autorenewGraceActive_throughoutTransferWindow() throws Exception {
setupDomain("example", "tld");
Key<BillingEvent.Recurring> existingAutorenewEvent = domain.getAutorenewBillingEvent();
// Set domain to have auto-renewed just before the transfer request, so that it will have an
@@ -1148,7 +1146,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testSuccess_autorenewGraceActive_onlyAtAutomaticTransferTime() throws Exception {
void testSuccess_autorenewGraceActive_onlyAtAutomaticTransferTime() throws Exception {
setupDomain("example", "tld");
Key<BillingEvent.Recurring> existingAutorenewEvent = domain.getAutorenewBillingEvent();
// Set domain to expire in 1 day, so that it will be in the autorenew grace period by the
@@ -1176,7 +1174,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testSuccess_premiumNotBlocked() throws Exception {
void testSuccess_premiumNotBlocked() throws Exception {
setupDomain("rich", "example");
clock.advanceOneMilli();
// We don't verify the results; just check that the flow doesn't fail.
@@ -1184,7 +1182,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testSuccess_premiumNotBlockedInSuperuserMode() throws Exception {
void testSuccess_premiumNotBlockedInSuperuserMode() throws Exception {
setupDomain("rich", "example");
clock.advanceOneMilli();
// Modify the Registrar to block premium names.
@@ -1206,22 +1204,22 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_wrongCurrency_v06() {
void testFailure_wrongCurrency_v06() {
runWrongCurrencyTest(FEE_06_MAP);
}
@Test
public void testFailure_wrongCurrency_v11() {
void testFailure_wrongCurrency_v11() {
runWrongCurrencyTest(FEE_11_MAP);
}
@Test
public void testFailure_wrongCurrency_v12() {
void testFailure_wrongCurrency_v12() {
runWrongCurrencyTest(FEE_12_MAP);
}
@Test
public void testFailure_unknownCurrency() {
void testFailure_unknownCurrency() {
Map<String, String> substitutions = Maps.newHashMap();
substitutions.putAll(FEE_06_MAP);
substitutions.put("CURRENCY", "BAD");
@@ -1232,7 +1230,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_feeGivenInWrongScale_v06() {
void testFailure_feeGivenInWrongScale_v06() {
setupDomain("example", "tld");
EppException thrown =
assertThrows(
@@ -1242,7 +1240,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_feeGivenInWrongScale_v11() {
void testFailure_feeGivenInWrongScale_v11() {
setupDomain("example", "tld");
EppException thrown =
assertThrows(
@@ -1252,7 +1250,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_feeGivenInWrongScale_v12() {
void testFailure_feeGivenInWrongScale_v12() {
setupDomain("example", "tld");
EppException thrown =
assertThrows(
@@ -1275,25 +1273,25 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_wrongFeeAmount_v06() {
void testFailure_wrongFeeAmount_v06() {
setupDomain("example", "tld");
runWrongFeeAmountTest(FEE_06_MAP);
}
@Test
public void testFailure_wrongFeeAmount_v11() {
void testFailure_wrongFeeAmount_v11() {
setupDomain("example", "tld");
runWrongFeeAmountTest(FEE_11_MAP);
}
@Test
public void testFailure_wrongFeeAmount_v12() {
void testFailure_wrongFeeAmount_v12() {
setupDomain("example", "tld");
runWrongFeeAmountTest(FEE_12_MAP);
}
@Test
public void testFailure_premiumBlocked() {
void testFailure_premiumBlocked() {
setupDomain("rich", "example");
// Modify the Registrar to block premium names.
persistResource(loadRegistrar("NewRegistrar").asBuilder().setBlockPremiumNames(true).build());
@@ -1305,7 +1303,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_feeNotProvidedOnPremiumName() {
void testFailure_feeNotProvidedOnPremiumName() {
setupDomain("rich", "example");
EppException thrown =
assertThrows(
@@ -1315,7 +1313,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_noAuthInfo() {
void testFailure_noAuthInfo() {
setupDomain("example", "tld");
EppException thrown =
assertThrows(
@@ -1325,7 +1323,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_badContactPassword() {
void testFailure_badContactPassword() {
setupDomain("example", "tld");
// Change the contact's password so it does not match the password in the file.
contact =
@@ -1342,7 +1340,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_badContactRepoId() {
void testFailure_badContactRepoId() {
setupDomain("example", "tld");
// Set the contact to a different ROID, but don't persist it; this is just so the substitution
// code above will write the wrong ROID into the file.
@@ -1355,42 +1353,42 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testSuccess_clientApproved() throws Exception {
void testSuccess_clientApproved() throws Exception {
setupDomain("example", "tld");
changeTransferStatus(TransferStatus.CLIENT_APPROVED);
doSuccessfulTest("domain_transfer_request.xml", "domain_transfer_request_response.xml");
}
@Test
public void testSuccess_clientRejected() throws Exception {
void testSuccess_clientRejected() throws Exception {
setupDomain("example", "tld");
changeTransferStatus(TransferStatus.CLIENT_REJECTED);
doSuccessfulTest("domain_transfer_request.xml", "domain_transfer_request_response.xml");
}
@Test
public void testSuccess_clientCancelled() throws Exception {
void testSuccess_clientCancelled() throws Exception {
setupDomain("example", "tld");
changeTransferStatus(TransferStatus.CLIENT_CANCELLED);
doSuccessfulTest("domain_transfer_request.xml", "domain_transfer_request_response.xml");
}
@Test
public void testSuccess_serverApproved() throws Exception {
void testSuccess_serverApproved() throws Exception {
setupDomain("example", "tld");
changeTransferStatus(TransferStatus.SERVER_APPROVED);
doSuccessfulTest("domain_transfer_request.xml", "domain_transfer_request_response.xml");
}
@Test
public void testSuccess_serverCancelled() throws Exception {
void testSuccess_serverCancelled() throws Exception {
setupDomain("example", "tld");
changeTransferStatus(TransferStatus.SERVER_CANCELLED);
doSuccessfulTest("domain_transfer_request.xml", "domain_transfer_request_response.xml");
}
@Test
public void testFailure_pending() {
void testFailure_pending() {
setupDomain("example", "tld");
domain =
persistResource(
@@ -1412,7 +1410,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_badDomainPassword() {
void testFailure_badDomainPassword() {
setupDomain("example", "tld");
// Change the domain's password so it does not match the password in the file.
domain =
@@ -1429,7 +1427,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_sponsoringClient() {
void testFailure_sponsoringClient() {
setupDomain("example", "tld");
setClientIdForFlow("TheRegistrar");
EppException thrown =
@@ -1440,7 +1438,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_deletedDomain() throws Exception {
void testFailure_deletedDomain() throws Exception {
setupDomain("example", "tld");
domain =
persistResource(domain.asBuilder().setDeletionTime(clock.nowUtc().minusDays(1)).build());
@@ -1452,7 +1450,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_invalidDomain() throws Exception {
void testFailure_invalidDomain() throws Exception {
setupDomain("example", "tld");
setEppInput(
"domain_transfer_request_wildcard.xml",
@@ -1467,7 +1465,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_nonexistentDomain() {
void testFailure_nonexistentDomain() {
createTld("tld");
contact = persistActiveContact("jd1234");
ResourceDoesNotExistException thrown =
@@ -1478,7 +1476,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_periodInMonths() {
void testFailure_periodInMonths() {
setupDomain("example", "tld");
EppException thrown =
assertThrows(
@@ -1488,7 +1486,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_clientTransferProhibited() {
void testFailure_clientTransferProhibited() {
setupDomain("example", "tld");
domain =
persistResource(
@@ -1501,7 +1499,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_serverTransferProhibited() {
void testFailure_serverTransferProhibited() {
setupDomain("example", "tld");
domain =
persistResource(
@@ -1514,7 +1512,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testFailure_pendingDelete() {
void testFailure_pendingDelete() {
setupDomain("example", "tld");
domain = persistResource(domain.asBuilder().addStatusValue(StatusValue.PENDING_DELETE).build());
ResourceStatusProhibitsOperationException thrown =
@@ -1525,7 +1523,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
setupDomain("example", "tld");
clock.advanceOneMilli();
runTest("domain_transfer_request.xml", UserPrivileges.NORMAL);
@@ -1534,7 +1532,7 @@ public class DomainTransferRequestFlowTest
}
@Test
public void testIcannTransactionRecord_getsStored() throws Exception {
void testIcannTransactionRecord_getsStored() throws Exception {
setupDomain("example", "tld");
persistResource(
Registry.get("tld")
@@ -90,8 +90,8 @@ import google.registry.model.registry.Registry;
import google.registry.model.reporting.HistoryEntry;
import google.registry.persistence.VKey;
import org.joda.money.Money;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link DomainUpdateFlow}. */
public class DomainUpdateFlowTest extends ResourceFlowTestCase<DomainUpdateFlow, DomainBase> {
@@ -110,7 +110,7 @@ public class DomainUpdateFlowTest extends ResourceFlowTestCase<DomainUpdateFlow,
ContactResource unusedContact;
HistoryEntry historyEntryDomainCreate;
@Before
@BeforeEach
public void initDomainTest() {
createTld("tld");
// Note that "domain_update.xml" tests adding and removing the same contact type.
@@ -48,7 +48,6 @@ import google.registry.model.domain.token.AllocationToken.TokenStatus;
import google.registry.model.registry.Registry;
import google.registry.model.reporting.HistoryEntry;
import google.registry.testing.AppEngineRule;
import google.registry.testing.ShardableTestCase;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Rule;
@@ -58,7 +57,7 @@ import org.junit.runners.JUnit4;
/** Unit tests for {@link AllocationTokenFlowUtils}. */
@RunWith(JUnit4.class)
public class AllocationTokenFlowUtilsTest extends ShardableTestCase {
public class AllocationTokenFlowUtilsTest {
private final AllocationTokenFlowUtils flowUtils =
new AllocationTokenFlowUtils(new AllocationTokenCustomLogic());
@@ -24,17 +24,17 @@ import google.registry.flows.EppException;
import google.registry.flows.ResourceCheckFlowTestCase;
import google.registry.flows.exceptions.TooManyResourceChecksException;
import google.registry.model.host.HostResource;
import org.junit.Test;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link HostCheckFlow}. */
public class HostCheckFlowTest extends ResourceCheckFlowTestCase<HostCheckFlow, HostResource> {
class HostCheckFlowTest extends ResourceCheckFlowTestCase<HostCheckFlow, HostResource> {
public HostCheckFlowTest() {
HostCheckFlowTest() {
setEppInput("host_check.xml");
}
@Test
public void testNothingExists() throws Exception {
void testNothingExists() throws Exception {
// These ids come from the check xml.
doCheckTest(
create(true, "ns1.example.tld", null),
@@ -43,7 +43,7 @@ public class HostCheckFlowTest extends ResourceCheckFlowTestCase<HostCheckFlow,
}
@Test
public void testOneExists() throws Exception {
void testOneExists() throws Exception {
persistActiveHost("ns1.example.tld");
// These ids come from the check xml.
doCheckTest(
@@ -53,7 +53,7 @@ public class HostCheckFlowTest extends ResourceCheckFlowTestCase<HostCheckFlow,
}
@Test
public void testOneExistsButWasDeleted() throws Exception {
void testOneExistsButWasDeleted() throws Exception {
persistDeletedHost("ns1.example.tld", clock.nowUtc().minusDays(1));
// These ids come from the check xml.
doCheckTest(
@@ -63,27 +63,27 @@ public class HostCheckFlowTest extends ResourceCheckFlowTestCase<HostCheckFlow,
}
@Test
public void testXmlMatches() throws Exception {
void testXmlMatches() throws Exception {
persistActiveHost("ns2.example.tld");
runFlowAssertResponse(loadFile("host_check_response.xml"));
}
@Test
public void test50IdsAllowed() throws Exception {
void test50IdsAllowed() throws Exception {
// Make sure we don't have a regression that reduces the number of allowed checks.
setEppInput("host_check_50.xml");
runFlow();
}
@Test
public void testTooManyIds() {
void testTooManyIds() {
setEppInput("host_check_51.xml");
EppException thrown = assertThrows(TooManyResourceChecksException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
runFlow();
assertIcannReportingActivityFieldLogged("srs-host-check");
}
@@ -54,10 +54,10 @@ import google.registry.model.eppcommon.StatusValue;
import google.registry.model.host.HostResource;
import google.registry.model.reporting.HistoryEntry;
import org.joda.time.DateTime;
import org.junit.Test;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link HostCreateFlow}. */
public class HostCreateFlowTest extends ResourceFlowTestCase<HostCreateFlow, HostResource> {
class HostCreateFlowTest extends ResourceFlowTestCase<HostCreateFlow, HostResource> {
private void setEppHostCreateInput(String hostName, String hostAddrs) {
setEppInput(
@@ -73,7 +73,7 @@ public class HostCreateFlowTest extends ResourceFlowTestCase<HostCreateFlow, Hos
+ "<host:addr ip=\"v6\">1080:0:0:0:8:800:200C:417A</host:addr>");
}
public HostCreateFlowTest() {
HostCreateFlowTest() {
setEppHostCreateInput("ns1.example.tld", null);
clock.setTo(DateTime.parse("1999-04-03T22:00:00.0Z"));
}
@@ -101,19 +101,19 @@ public class HostCreateFlowTest extends ResourceFlowTestCase<HostCreateFlow, Hos
}
@Test
public void testDryRun() throws Exception {
void testDryRun() throws Exception {
dryRunFlowAssertResponse(loadFile("host_create_response.xml"));
}
@Test
public void testSuccess_externalNeverExisted() throws Exception {
void testSuccess_externalNeverExisted() throws Exception {
doSuccessfulTest();
assertAboutHosts().that(reloadResourceByForeignKey()).hasSuperordinateDomain(null);
assertNoDnsTasksEnqueued();
}
@Test
public void testSuccess_internalNeverExisted() throws Exception {
void testSuccess_internalNeverExisted() throws Exception {
doSuccessfulInternalTest("tld");
HostResource host = reloadResourceByForeignKey();
DomainBase superordinateDomain =
@@ -124,7 +124,7 @@ public class HostCreateFlowTest extends ResourceFlowTestCase<HostCreateFlow, Hos
}
@Test
public void testFailure_multipartTLDsAndInvalidHost() {
void testFailure_multipartTLDsAndInvalidHost() {
createTlds("bar.tld", "tld");
setEppHostCreateInputWithIps("ns1.bar.tld");
@@ -133,7 +133,7 @@ public class HostCreateFlowTest extends ResourceFlowTestCase<HostCreateFlow, Hos
}
@Test
public void testSuccess_externalExistedButWasDeleted() throws Exception {
void testSuccess_externalExistedButWasDeleted() throws Exception {
persistDeletedHost(getUniqueIdFromCommand(), clock.nowUtc().minusDays(1));
doSuccessfulTest();
assertAboutHosts().that(reloadResourceByForeignKey()).hasSuperordinateDomain(null);
@@ -141,7 +141,7 @@ public class HostCreateFlowTest extends ResourceFlowTestCase<HostCreateFlow, Hos
}
@Test
public void testSuccess_internalExistedButWasDeleted() throws Exception {
void testSuccess_internalExistedButWasDeleted() throws Exception {
persistDeletedHost(getUniqueIdFromCommand(), clock.nowUtc().minusDays(1));
doSuccessfulInternalTest("tld");
HostResource host = reloadResourceByForeignKey();
@@ -153,7 +153,7 @@ public class HostCreateFlowTest extends ResourceFlowTestCase<HostCreateFlow, Hos
}
@Test
public void testFailure_subordinateNeedsIps() {
void testFailure_subordinateNeedsIps() {
setEppHostCreateInput("ns1.example.tld", null);
createTld("tld");
persistActiveDomain("example.tld");
@@ -162,7 +162,7 @@ public class HostCreateFlowTest extends ResourceFlowTestCase<HostCreateFlow, Hos
}
@Test
public void testFailure_externalMustNotHaveIps() {
void testFailure_externalMustNotHaveIps() {
setEppHostCreateInputWithIps("ns1.example.external");
createTld("tld");
persistActiveDomain("example.tld");
@@ -171,7 +171,7 @@ public class HostCreateFlowTest extends ResourceFlowTestCase<HostCreateFlow, Hos
}
@Test
public void testFailure_superordinateMissing() {
void testFailure_superordinateMissing() {
setEppHostCreateInput("ns1.example.tld", null);
createTld("tld");
SuperordinateDomainDoesNotExistException thrown =
@@ -180,7 +180,7 @@ public class HostCreateFlowTest extends ResourceFlowTestCase<HostCreateFlow, Hos
}
@Test
public void testFailure_superordinateInPendingDelete() {
void testFailure_superordinateInPendingDelete() {
setEppHostCreateInputWithIps("ns1.example.tld");
createTld("tld");
persistResource(
@@ -198,7 +198,7 @@ public class HostCreateFlowTest extends ResourceFlowTestCase<HostCreateFlow, Hos
}
@Test
public void testFailure_alreadyExists() throws Exception {
void testFailure_alreadyExists() throws Exception {
setEppHostCreateInput("ns1.example.tld", null);
persistActiveHost(getUniqueIdFromCommand());
ResourceAlreadyExistsForThisClientException thrown =
@@ -210,7 +210,7 @@ public class HostCreateFlowTest extends ResourceFlowTestCase<HostCreateFlow, Hos
}
@Test
public void testFailure_resourceContention() throws Exception {
void testFailure_resourceContention() throws Exception {
setEppHostCreateInput("ns1.example.tld", null);
String targetId = getUniqueIdFromCommand();
persistResource(
@@ -227,14 +227,14 @@ public class HostCreateFlowTest extends ResourceFlowTestCase<HostCreateFlow, Hos
}
@Test
public void testFailure_nonLowerCaseHostname() {
void testFailure_nonLowerCaseHostname() {
setEppHostCreateInput("ns1.EXAMPLE.tld", null);
EppException thrown = assertThrows(HostNameNotLowerCaseException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFailure_nonPunyCodedHostname() {
void testFailure_nonPunyCodedHostname() {
setEppHostCreateInput("ns1.çauçalito.みんな", null);
HostNameNotPunyCodedException thrown =
assertThrows(HostNameNotPunyCodedException.class, this::runFlow);
@@ -242,21 +242,21 @@ public class HostCreateFlowTest extends ResourceFlowTestCase<HostCreateFlow, Hos
}
@Test
public void testFailure_nonCanonicalHostname() {
void testFailure_nonCanonicalHostname() {
setEppHostCreateInput("ns1.example.tld.", null);
EppException thrown = assertThrows(HostNameNotNormalizedException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFailure_longHostName() {
void testFailure_longHostName() {
setEppHostCreateInputWithIps("a" + Strings.repeat(".labelpart", 25) + ".tld");
EppException thrown = assertThrows(HostNameTooLongException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFailure_ip4AddressWithIp6Declaration() {
void testFailure_ip4AddressWithIp6Declaration() {
setEppHostCreateInput(
"ns1.example.tld",
"<host:addr ip=\"v4\">192.0.2.2</host:addr>\n"
@@ -273,37 +273,37 @@ public class HostCreateFlowTest extends ResourceFlowTestCase<HostCreateFlow, Hos
}
@Test
public void testFailure_badCharacter() {
void testFailure_badCharacter() {
doFailingHostNameTest("foo bar", InvalidHostNameException.class);
}
@Test
public void testFailure_tooShallowPublicSuffix() {
void testFailure_tooShallowPublicSuffix() {
doFailingHostNameTest("example.tld", HostNameTooShallowException.class);
}
@Test
public void testFailure_tooShallowCcTld() {
void testFailure_tooShallowCcTld() {
doFailingHostNameTest("foo.co.uk", HostNameTooShallowException.class);
}
@Test
public void testFailure_barePublicSuffix() {
void testFailure_barePublicSuffix() {
doFailingHostNameTest("com", HostNameTooShallowException.class);
}
@Test
public void testFailure_bareCcTld() {
void testFailure_bareCcTld() {
doFailingHostNameTest("co.uk", HostNameTooShallowException.class);
}
@Test
public void testFailure_tooShallowNewTld() {
void testFailure_tooShallowNewTld() {
doFailingHostNameTest("example.lol", HostNameTooShallowException.class);
}
@Test
public void testFailure_ccTldInBailiwick() {
void testFailure_ccTldInBailiwick() {
createTld("co.uk");
setEppHostCreateInputWithIps("foo.co.uk");
EppException thrown = assertThrows(HostNameTooShallowException.class, this::runFlow);
@@ -311,7 +311,7 @@ public class HostCreateFlowTest extends ResourceFlowTestCase<HostCreateFlow, Hos
}
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
runFlow();
assertIcannReportingActivityFieldLogged("srs-host-create");
}
@@ -47,25 +47,25 @@ import google.registry.model.reporting.HistoryEntry;
import google.registry.model.transfer.DomainTransferData;
import google.registry.model.transfer.TransferStatus;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link HostDeleteFlow}. */
public class HostDeleteFlowTest extends ResourceFlowTestCase<HostDeleteFlow, HostResource> {
class HostDeleteFlowTest extends ResourceFlowTestCase<HostDeleteFlow, HostResource> {
@Before
public void initFlowTest() {
@BeforeEach
void initFlowTest() {
setEppInput("host_delete.xml", ImmutableMap.of("HOSTNAME", "ns1.example.tld"));
}
@Test
public void testDryRun() throws Exception {
void testDryRun() throws Exception {
persistActiveHost("ns1.example.tld");
dryRunFlowAssertResponse(loadFile("host_delete_response.xml"));
}
@Test
public void testSuccess() throws Exception {
void testSuccess() throws Exception {
persistActiveHost("ns1.example.tld");
clock.advanceOneMilli();
assertTransactionalFlow(true);
@@ -83,7 +83,7 @@ public class HostDeleteFlowTest extends ResourceFlowTestCase<HostDeleteFlow, Hos
}
@Test
public void testSuccess_clTridNotSpecified() throws Exception {
void testSuccess_clTridNotSpecified() throws Exception {
setEppInput("host_delete_no_cltrid.xml", ImmutableMap.of("HOSTNAME", "ns1.example.tld"));
persistActiveHost("ns1.example.tld");
clock.advanceOneMilli();
@@ -102,14 +102,14 @@ public class HostDeleteFlowTest extends ResourceFlowTestCase<HostDeleteFlow, Hos
}
@Test
public void testFailure_neverExisted() {
void testFailure_neverExisted() {
ResourceDoesNotExistException thrown =
assertThrows(ResourceDoesNotExistException.class, this::runFlow);
assertThat(thrown).hasMessageThat().contains("(ns1.example.tld)");
}
@Test
public void testFailure_existedButWasDeleted() {
void testFailure_existedButWasDeleted() {
persistDeletedHost("ns1.example.tld", clock.nowUtc().minusDays(1));
ResourceDoesNotExistException thrown =
assertThrows(ResourceDoesNotExistException.class, this::runFlow);
@@ -127,25 +127,25 @@ public class HostDeleteFlowTest extends ResourceFlowTestCase<HostDeleteFlow, Hos
}
@Test
public void testFailure_existedButWasClientDeleteProhibited() {
void testFailure_existedButWasClientDeleteProhibited() {
doFailingStatusTest(
StatusValue.CLIENT_DELETE_PROHIBITED, ResourceStatusProhibitsOperationException.class);
}
@Test
public void testFailure_existedButWasServerDeleteProhibited() {
void testFailure_existedButWasServerDeleteProhibited() {
doFailingStatusTest(
StatusValue.SERVER_DELETE_PROHIBITED, ResourceStatusProhibitsOperationException.class);
}
@Test
public void testFailure_existedButWasPendingDelete() {
void testFailure_existedButWasPendingDelete() {
doFailingStatusTest(
StatusValue.PENDING_DELETE, ResourceStatusProhibitsOperationException.class);
}
@Test
public void testFailure_unauthorizedClient() {
void testFailure_unauthorizedClient() {
sessionMetadata.setClientId("NewRegistrar");
persistActiveHost("ns1.example.tld");
EppException thrown = assertThrows(ResourceNotOwnedException.class, this::runFlow);
@@ -153,7 +153,7 @@ public class HostDeleteFlowTest extends ResourceFlowTestCase<HostDeleteFlow, Hos
}
@Test
public void testSuccess_superuserUnauthorizedClient() throws Exception {
void testSuccess_superuserUnauthorizedClient() throws Exception {
sessionMetadata.setClientId("NewRegistrar");
persistActiveHost("ns1.example.tld");
clock.advanceOneMilli();
@@ -172,7 +172,7 @@ public class HostDeleteFlowTest extends ResourceFlowTestCase<HostDeleteFlow, Hos
}
@Test
public void testSuccess_authorizedClientReadFromSuperordinate() throws Exception {
void testSuccess_authorizedClientReadFromSuperordinate() throws Exception {
sessionMetadata.setClientId("TheRegistrar");
createTld("tld");
DomainBase domain =
@@ -192,7 +192,7 @@ public class HostDeleteFlowTest extends ResourceFlowTestCase<HostDeleteFlow, Hos
}
@Test
public void testFailure_unauthorizedClientReadFromSuperordinate() {
void testFailure_unauthorizedClientReadFromSuperordinate() {
sessionMetadata.setClientId("TheRegistrar");
createTld("tld");
DomainBase domain =
@@ -212,7 +212,7 @@ public class HostDeleteFlowTest extends ResourceFlowTestCase<HostDeleteFlow, Hos
}
@Test
public void testSuccess_authorizedClientReadFromTransferredSuperordinate() throws Exception {
void testSuccess_authorizedClientReadFromTransferredSuperordinate() throws Exception {
sessionMetadata.setClientId("NewRegistrar");
createTld("tld");
// Setup a transfer that should have been server approved a day ago.
@@ -245,7 +245,7 @@ public class HostDeleteFlowTest extends ResourceFlowTestCase<HostDeleteFlow, Hos
}
@Test
public void testFailure_unauthorizedClientReadFromTransferredSuperordinate() {
void testFailure_unauthorizedClientReadFromTransferredSuperordinate() {
sessionMetadata.setClientId("NewRegistrar");
createTld("tld");
// Setup a transfer that should have been server approved a day ago.
@@ -278,7 +278,7 @@ public class HostDeleteFlowTest extends ResourceFlowTestCase<HostDeleteFlow, Hos
}
@Test
public void testFailure_failfastWhenLinkedToDomain() {
void testFailure_failfastWhenLinkedToDomain() {
createTld("tld");
persistResource(
newDomainBase("example.tld")
@@ -290,14 +290,14 @@ public class HostDeleteFlowTest extends ResourceFlowTestCase<HostDeleteFlow, Hos
}
@Test
public void testFailure_nonLowerCaseHostname() {
void testFailure_nonLowerCaseHostname() {
setEppInput("host_delete.xml", ImmutableMap.of("HOSTNAME", "NS1.EXAMPLE.NET"));
EppException thrown = assertThrows(HostNameNotLowerCaseException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFailure_nonPunyCodedHostname() {
void testFailure_nonPunyCodedHostname() {
setEppInput("host_delete.xml", ImmutableMap.of("HOSTNAME", "ns1.çauçalito.tld"));
HostNameNotPunyCodedException thrown =
assertThrows(HostNameNotPunyCodedException.class, this::runFlow);
@@ -305,14 +305,14 @@ public class HostDeleteFlowTest extends ResourceFlowTestCase<HostDeleteFlow, Hos
}
@Test
public void testFailure_nonCanonicalHostname() {
void testFailure_nonCanonicalHostname() {
setEppInput("host_delete.xml", ImmutableMap.of("HOSTNAME", "ns1.example.tld."));
EppException thrown = assertThrows(HostNameNotNormalizedException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
persistActiveHost("ns1.example.tld");
clock.advanceOneMilli();
runFlow();
@@ -36,18 +36,18 @@ import google.registry.model.eppcommon.StatusValue;
import google.registry.model.host.HostResource;
import javax.annotation.Nullable;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link HostInfoFlow}. */
public class HostInfoFlowTest extends ResourceFlowTestCase<HostInfoFlow, HostResource> {
class HostInfoFlowTest extends ResourceFlowTestCase<HostInfoFlow, HostResource> {
public HostInfoFlowTest() {
HostInfoFlowTest() {
setEppInput("host_info.xml", ImmutableMap.of("HOSTNAME", "ns1.example.tld"));
}
@Before
public void initHostTest() {
@BeforeEach
void initHostTest() {
createTld("foobar");
}
@@ -73,7 +73,7 @@ public class HostInfoFlowTest extends ResourceFlowTestCase<HostInfoFlow, HostRes
}
@Test
public void testSuccess() throws Exception {
void testSuccess() throws Exception {
persistHostResource();
assertTransactionalFlow(false);
// Check that the persisted host info was returned.
@@ -86,7 +86,7 @@ public class HostInfoFlowTest extends ResourceFlowTestCase<HostInfoFlow, HostRes
}
@Test
public void testSuccess_linked() throws Exception {
void testSuccess_linked() throws Exception {
persistHostResource();
persistResource(
newDomainBase("example.foobar")
@@ -130,31 +130,31 @@ public class HostInfoFlowTest extends ResourceFlowTestCase<HostInfoFlow, HostRes
}
@Test
public void testSuccess_withSuperordinateDomain_hostMovedAfterDomainTransfer() throws Exception {
void testSuccess_withSuperordinateDomain_hostMovedAfterDomainTransfer() throws Exception {
runTest_superordinateDomain(
DateTime.parse("2000-01-08T09:00:00.0Z"), DateTime.parse("2000-03-01T01:00:00.0Z"));
}
@Test
public void testSuccess_withSuperordinateDomain_hostMovedBeforeDomainTransfer() throws Exception {
void testSuccess_withSuperordinateDomain_hostMovedBeforeDomainTransfer() throws Exception {
runTest_superordinateDomain(
DateTime.parse("2000-04-08T09:00:00.0Z"), DateTime.parse("2000-02-08T09:00:00.0Z"));
}
@Test
public void testSuccess_withSuperordinateDomain() throws Exception {
void testSuccess_withSuperordinateDomain() throws Exception {
runTest_superordinateDomain(DateTime.parse("2000-04-08T09:00:00.0Z"), null);
}
@Test
public void testFailure_neverExisted() throws Exception {
void testFailure_neverExisted() throws Exception {
ResourceDoesNotExistException thrown =
assertThrows(ResourceDoesNotExistException.class, this::runFlow);
assertThat(thrown).hasMessageThat().contains(String.format("(%s)", getUniqueIdFromCommand()));
}
@Test
public void testFailure_existedButWasDeleted() throws Exception {
void testFailure_existedButWasDeleted() throws Exception {
persistResource(
persistHostResource().asBuilder().setDeletionTime(clock.nowUtc().minusDays(1)).build());
ResourceDoesNotExistException thrown =
@@ -163,14 +163,14 @@ public class HostInfoFlowTest extends ResourceFlowTestCase<HostInfoFlow, HostRes
}
@Test
public void testFailure_nonLowerCaseHostname() {
void testFailure_nonLowerCaseHostname() {
setEppInput("host_info.xml", ImmutableMap.of("HOSTNAME", "NS1.EXAMPLE.NET"));
EppException thrown = assertThrows(HostNameNotLowerCaseException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFailure_nonPunyCodedHostname() {
void testFailure_nonPunyCodedHostname() {
setEppInput("host_info.xml", ImmutableMap.of("HOSTNAME", "ns1.çauçalito.tld"));
HostNameNotPunyCodedException thrown =
assertThrows(HostNameNotPunyCodedException.class, this::runFlow);
@@ -178,14 +178,14 @@ public class HostInfoFlowTest extends ResourceFlowTestCase<HostInfoFlow, HostRes
}
@Test
public void testFailure_nonCanonicalHostname() {
void testFailure_nonCanonicalHostname() {
setEppInput("host_info.xml", ImmutableMap.of("HOSTNAME", "ns1.example.tld."));
EppException thrown = assertThrows(HostNameNotNormalizedException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
persistHostResource();
runFlow();
assertIcannReportingActivityFieldLogged("srs-host-info");
@@ -79,10 +79,10 @@ import google.registry.model.transfer.TransferStatus;
import google.registry.testing.TaskQueueHelper.TaskMatcher;
import javax.annotation.Nullable;
import org.joda.time.DateTime;
import org.junit.Test;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link HostUpdateFlow}. */
public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, HostResource> {
class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, HostResource> {
private void setEppHostUpdateInput(
String oldHostName, String newHostName, String ipOrStatusToAdd, String ipOrStatusToRem) {
@@ -99,7 +99,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
nullToEmpty(ipOrStatusToRem)));
}
public HostUpdateFlowTest() {
HostUpdateFlowTest() {
setEppHostUpdateInput("ns1.example.tld", "ns2.example.tld", null, null);
}
@@ -133,7 +133,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testDryRun() throws Exception {
void testDryRun() throws Exception {
createTld("tld");
persistActiveSubordinateHost(oldHostName(), persistActiveDomain("example.tld"));
dryRunFlowAssertResponse(loadFile("generic_success_response.xml"));
@@ -169,7 +169,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_rename_noOtherHostEverUsedTheOldName() throws Exception {
void testSuccess_rename_noOtherHostEverUsedTheOldName() throws Exception {
createTld("tld");
persistActiveSubordinateHost(oldHostName(), persistActiveDomain("example.tld"));
HostResource renamedHost = doSuccessfulTest();
@@ -186,7 +186,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_withReferencingDomain() throws Exception {
void testSuccess_withReferencingDomain() throws Exception {
createTld("tld");
createTld("xn--q9jyb4c");
HostResource host =
@@ -208,7 +208,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_nameUnchanged_superordinateDomainNeverTransferred() throws Exception {
void testSuccess_nameUnchanged_superordinateDomainNeverTransferred() throws Exception {
setEppInput("host_update_name_unchanged.xml");
createTld("tld");
DomainBase domain = persistActiveDomain("example.tld");
@@ -232,7 +232,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_nameUnchanged_superordinateDomainWasTransferred() throws Exception {
void testSuccess_nameUnchanged_superordinateDomainWasTransferred() throws Exception {
sessionMetadata.setClientId("NewRegistrar");
setEppInput("host_update_name_unchanged.xml");
createTld("tld");
@@ -258,7 +258,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_internalToInternalOnSameDomain() throws Exception {
void testSuccess_internalToInternalOnSameDomain() throws Exception {
setEppHostUpdateInput(
"ns1.example.tld",
"ns2.example.tld",
@@ -292,7 +292,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_internalToInternalOnSameTld() throws Exception {
void testSuccess_internalToInternalOnSameTld() throws Exception {
setEppHostUpdateInput(
"ns2.foo.tld",
"ns2.example.tld",
@@ -328,7 +328,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_internalToInternalOnDifferentTld() throws Exception {
void testSuccess_internalToInternalOnDifferentTld() throws Exception {
setEppHostUpdateInput(
"ns1.example.foo",
"ns2.example.tld",
@@ -367,7 +367,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_internalToExternal() throws Exception {
void testSuccess_internalToExternal() throws Exception {
setEppHostUpdateInput(
"ns1.example.foo",
"ns2.example.tld",
@@ -409,7 +409,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_externalToInternal() throws Exception {
void testFailure_externalToInternal() throws Exception {
setEppHostUpdateInput(
"ns1.example.foo", "ns2.example.tld", "<host:addr ip=\"v4\">192.0.2.22</host:addr>", null);
createTld("tld");
@@ -421,7 +421,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_superuserExternalToInternal() throws Exception {
void testSuccess_superuserExternalToInternal() throws Exception {
setEppHostUpdateInput(
"ns1.example.foo", "ns2.example.tld", "<host:addr ip=\"v4\">192.0.2.22</host:addr>", null);
createTld("tld");
@@ -445,7 +445,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_externalToExternal() throws Exception {
void testFailure_externalToExternal() throws Exception {
setEppHostUpdateInput("ns1.example.foo", "ns2.example.tld", null, null);
persistActiveHost(oldHostName());
EppException thrown = assertThrows(CannotRenameExternalHostException.class, this::runFlow);
@@ -453,7 +453,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_superuserExternalToExternal() throws Exception {
void testSuccess_superuserExternalToExternal() throws Exception {
setEppHostUpdateInput("ns1.example.foo", "ns2.example.tld", null, null);
persistActiveHost(oldHostName());
HostResource renamedHost = doSuccessfulTestAsSuperuser();
@@ -470,7 +470,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_superuserClientUpdateProhibited() throws Exception {
void testSuccess_superuserClientUpdateProhibited() throws Exception {
setEppInput("host_update_add_status.xml");
persistResource(
newHostResource(oldHostName())
@@ -492,7 +492,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_subordToSubord_lastTransferTimeFromPreviousSuperordinateWinsOut()
void testSuccess_subordToSubord_lastTransferTimeFromPreviousSuperordinateWinsOut()
throws Exception {
setEppHostUpdateInput(
"ns2.foo.tld",
@@ -528,7 +528,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_subordToSubord_lastTransferTimeOnExistingHostWinsOut() throws Exception {
void testSuccess_subordToSubord_lastTransferTimeOnExistingHostWinsOut() throws Exception {
setEppHostUpdateInput(
"ns2.foo.tld",
"ns2.example.tld",
@@ -566,7 +566,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_subordToSubord_lastTransferTimeOnExistingHostWinsOut_whenNullOnNewDomain()
void testSuccess_subordToSubord_lastTransferTimeOnExistingHostWinsOut_whenNullOnNewDomain()
throws Exception {
setEppHostUpdateInput(
"ns2.foo.tld",
@@ -601,7 +601,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_subordToSubord_lastTransferTimeOnExistingHostWins_whenNullOnBothDomains()
void testSuccess_subordToSubord_lastTransferTimeOnExistingHostWins_whenNullOnBothDomains()
throws Exception {
setEppHostUpdateInput(
"ns2.foo.tld",
@@ -632,7 +632,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_subordToSubord_lastTransferTimeIsNull_whenNullOnBoth() throws Exception {
void testSuccess_subordToSubord_lastTransferTimeIsNull_whenNullOnBoth() throws Exception {
setEppHostUpdateInput(
"ns2.foo.tld",
"ns2.example.tld",
@@ -663,7 +663,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_internalToExternal_lastTransferTimeFrozenWhenComingFromSuperordinate()
void testSuccess_internalToExternal_lastTransferTimeFrozenWhenComingFromSuperordinate()
throws Exception {
setEppHostUpdateInput(
"ns1.example.foo",
@@ -699,8 +699,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_internalToExternal_lastTransferTimeFrozenWhenComingFromHost()
throws Exception {
void testSuccess_internalToExternal_lastTransferTimeFrozenWhenComingFromHost() throws Exception {
setEppHostUpdateInput(
"ns1.example.foo",
"ns2.example.tld",
@@ -735,7 +734,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_internalToExternal_lastTransferTimeFrozenWhenDomainOverridesHost()
void testSuccess_internalToExternal_lastTransferTimeFrozenWhenDomainOverridesHost()
throws Exception {
setEppHostUpdateInput(
"ns1.example.foo",
@@ -789,14 +788,14 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_externalToSubord_lastTransferTimeNotOverridden_whenLessRecent()
void testSuccess_externalToSubord_lastTransferTimeNotOverridden_whenLessRecent()
throws Exception {
doExternalToInternalLastTransferTimeTest(
clock.nowUtc().minusDays(2), clock.nowUtc().minusDays(1));
}
@Test
public void testSuccess_externalToSubord_lastTransferTimeNotOverridden_whenMoreRecent()
void testSuccess_externalToSubord_lastTransferTimeNotOverridden_whenMoreRecent()
throws Exception {
doExternalToInternalLastTransferTimeTest(
clock.nowUtc().minusDays(2), clock.nowUtc().minusDays(3));
@@ -804,13 +803,12 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
/** Test when the new superdordinate domain has never been transferred before. */
@Test
public void testSuccess_externalToSubord_lastTransferTimeNotOverridden_whenNull()
throws Exception {
void testSuccess_externalToSubord_lastTransferTimeNotOverridden_whenNull() throws Exception {
doExternalToInternalLastTransferTimeTest(clock.nowUtc().minusDays(2), null);
}
@Test
public void testFailure_superordinateMissing() throws Exception {
void testFailure_superordinateMissing() throws Exception {
createTld("tld");
persistActiveHost(oldHostName());
SuperordinateDomainDoesNotExistException thrown =
@@ -819,7 +817,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_superordinateInPendingDelete() throws Exception {
void testFailure_superordinateInPendingDelete() throws Exception {
setEppHostUpdateInput(
"ns1.example.tld",
"ns2.example.tld",
@@ -844,14 +842,14 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_neverExisted() throws Exception {
void testFailure_neverExisted() throws Exception {
ResourceDoesNotExistException thrown =
assertThrows(ResourceDoesNotExistException.class, this::runFlow);
assertThat(thrown).hasMessageThat().contains(String.format("(%s)", getUniqueIdFromCommand()));
}
@Test
public void testFailure_neverExisted_updateWithoutNameChange() throws Exception {
void testFailure_neverExisted_updateWithoutNameChange() throws Exception {
setEppInput("host_update_name_unchanged.xml");
ResourceDoesNotExistException thrown =
assertThrows(ResourceDoesNotExistException.class, this::runFlow);
@@ -859,7 +857,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_existedButWasDeleted() throws Exception {
void testFailure_existedButWasDeleted() throws Exception {
persistDeletedHost(oldHostName(), clock.nowUtc().minusDays(1));
ResourceDoesNotExistException thrown =
assertThrows(ResourceDoesNotExistException.class, this::runFlow);
@@ -867,7 +865,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_renameToCurrentName() throws Exception {
void testFailure_renameToCurrentName() throws Exception {
createTld("tld");
persistActiveSubordinateHost(oldHostName(), persistActiveDomain("example.tld"));
clock.advanceOneMilli();
@@ -878,7 +876,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_renameToNameOfExistingOtherHost() throws Exception {
void testFailure_renameToNameOfExistingOtherHost() throws Exception {
createTld("tld");
persistActiveSubordinateHost(oldHostName(), persistActiveDomain("example.tld"));
persistActiveHost("ns2.example.tld");
@@ -888,14 +886,14 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_referToNonLowerCaseHostname() {
void testFailure_referToNonLowerCaseHostname() {
setEppHostUpdateInput("ns1.EXAMPLE.tld", "ns2.example.tld", null, null);
EppException thrown = assertThrows(HostNameNotLowerCaseException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
}
@Test
public void testFailure_renameToNonLowerCaseHostname() {
void testFailure_renameToNonLowerCaseHostname() {
persistActiveHost("ns1.example.tld");
setEppHostUpdateInput("ns1.example.tld", "ns2.EXAMPLE.tld", null, null);
EppException thrown = assertThrows(HostNameNotLowerCaseException.class, this::runFlow);
@@ -903,7 +901,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_referToNonPunyCodedHostname() {
void testFailure_referToNonPunyCodedHostname() {
setEppHostUpdateInput("ns1.çauçalito.tld", "ns1.sausalito.tld", null, null);
HostNameNotPunyCodedException thrown =
assertThrows(HostNameNotPunyCodedException.class, this::runFlow);
@@ -911,7 +909,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_renameToNonPunyCodedHostname() {
void testFailure_renameToNonPunyCodedHostname() {
persistActiveHost("ns1.sausalito.tld");
setEppHostUpdateInput("ns1.sausalito.tld", "ns1.çauçalito.tld", null, null);
HostNameNotPunyCodedException thrown =
@@ -920,7 +918,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_referToNonCanonicalHostname() {
void testFailure_referToNonCanonicalHostname() {
persistActiveHost("ns1.example.tld.");
setEppHostUpdateInput("ns1.example.tld.", "ns2.example.tld", null, null);
EppException thrown = assertThrows(HostNameNotNormalizedException.class, this::runFlow);
@@ -928,7 +926,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_renameToNonCanonicalHostname() {
void testFailure_renameToNonCanonicalHostname() {
persistActiveHost("ns1.example.tld");
setEppHostUpdateInput("ns1.example.tld", "ns2.example.tld.", null, null);
EppException thrown = assertThrows(HostNameNotNormalizedException.class, this::runFlow);
@@ -936,7 +934,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_subordinateNeedsIps() throws Exception {
void testFailure_subordinateNeedsIps() throws Exception {
setEppHostUpdateInput(
"ns1.example.tld",
"ns2.example.tld",
@@ -950,7 +948,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_subordinateToExternal_mustRemoveAllIps() throws Exception {
void testFailure_subordinateToExternal_mustRemoveAllIps() throws Exception {
setEppHostUpdateInput("ns1.example.tld", "ns2.example.com", null, null);
createTld("tld");
persistActiveSubordinateHost(oldHostName(), persistActiveDomain("example.tld"));
@@ -959,7 +957,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_subordinateToExternal_cantAddAnIp() throws Exception {
void testFailure_subordinateToExternal_cantAddAnIp() throws Exception {
setEppHostUpdateInput(
"ns1.example.tld", "ns2.example.com", "<host:addr ip=\"v4\">192.0.2.22</host:addr>", null);
createTld("tld");
@@ -969,7 +967,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_addRemoveSameStatusValues() throws Exception {
void testFailure_addRemoveSameStatusValues() throws Exception {
createTld("tld");
persistActiveDomain("example.tld");
setEppHostUpdateInput(
@@ -983,7 +981,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_addRemoveSameInetAddresses() throws Exception {
void testFailure_addRemoveSameInetAddresses() throws Exception {
createTld("tld");
persistActiveSubordinateHost(oldHostName(), persistActiveDomain("example.tld"));
setEppHostUpdateInput(
@@ -996,7 +994,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_clientUpdateProhibited_removed() throws Exception {
void testSuccess_clientUpdateProhibited_removed() throws Exception {
setEppInput("host_update_remove_client_update_prohibited.xml");
persistResource(
newHostResource(oldHostName())
@@ -1011,7 +1009,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_clientUpdateProhibited() throws Exception {
void testFailure_clientUpdateProhibited() throws Exception {
createTld("tld");
persistResource(
newHostResource(oldHostName())
@@ -1025,7 +1023,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_serverUpdateProhibited() throws Exception {
void testFailure_serverUpdateProhibited() throws Exception {
createTld("tld");
persistResource(
newHostResource(oldHostName())
@@ -1039,7 +1037,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_pendingDelete() throws Exception {
void testFailure_pendingDelete() throws Exception {
createTld("tld");
persistResource(
newHostResource(oldHostName())
@@ -1053,7 +1051,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_statusValueNotClientSettable() throws Exception {
void testFailure_statusValueNotClientSettable() throws Exception {
createTld("tld");
persistActiveSubordinateHost(oldHostName(), persistActiveDomain("example.tld"));
setEppInput("host_update_prohibited_status.xml");
@@ -1062,7 +1060,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_superuserStatusValueNotClientSettable() throws Exception {
void testSuccess_superuserStatusValueNotClientSettable() throws Exception {
setEppInput("host_update_prohibited_status.xml");
createTld("tld");
persistActiveDomain("example.tld");
@@ -1074,7 +1072,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_unauthorizedClient() {
void testFailure_unauthorizedClient() {
sessionMetadata.setClientId("NewRegistrar");
persistActiveHost("ns1.example.tld");
EppException thrown = assertThrows(ResourceNotOwnedException.class, this::runFlow);
@@ -1082,7 +1080,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_superuserUnauthorizedClient() throws Exception {
void testSuccess_superuserUnauthorizedClient() throws Exception {
sessionMetadata.setClientId("NewRegistrar");
persistActiveHost(oldHostName());
@@ -1092,7 +1090,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_authorizedClientReadFromSuperordinate() throws Exception {
void testSuccess_authorizedClientReadFromSuperordinate() throws Exception {
sessionMetadata.setClientId("NewRegistrar");
createTld("tld");
DomainBase domain =
@@ -1114,7 +1112,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_unauthorizedClientReadFromSuperordinate() {
void testFailure_unauthorizedClientReadFromSuperordinate() {
sessionMetadata.setClientId("NewRegistrar");
createTld("tld");
DomainBase domain =
@@ -1136,7 +1134,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_authorizedClientReadFromTransferredSuperordinate() throws Exception {
void testSuccess_authorizedClientReadFromTransferredSuperordinate() throws Exception {
sessionMetadata.setClientId("NewRegistrar");
createTld("tld");
// Create a domain that will belong to NewRegistrar after cloneProjectedAtTime is called.
@@ -1154,7 +1152,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_unauthorizedClientReadFromTransferredSuperordinate() {
void testFailure_unauthorizedClientReadFromTransferredSuperordinate() {
sessionMetadata.setClientId("TheRegistrar");
createTld("tld");
// Create a domain that will belong to NewRegistrar after cloneProjectedAtTime is called.
@@ -1172,7 +1170,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_newSuperordinateOwnedByDifferentRegistrar() throws Exception {
void testFailure_newSuperordinateOwnedByDifferentRegistrar() throws Exception {
setEppHostUpdateInput(
"ns1.example.foo", "ns2.example.tld", "<host:addr ip=\"v4\">192.0.2.22</host:addr>", null);
sessionMetadata.setClientId("TheRegistrar");
@@ -1192,7 +1190,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_newSuperordinateWasTransferredToDifferentRegistrar() throws Exception {
void testFailure_newSuperordinateWasTransferredToDifferentRegistrar() throws Exception {
setEppHostUpdateInput(
"ns1.example.foo", "ns2.example.tld", "<host:addr ip=\"v4\">192.0.2.22</host:addr>", null);
sessionMetadata.setClientId("TheRegistrar");
@@ -1210,7 +1208,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testSuccess_newSuperordinateWasTransferredToCorrectRegistrar() throws Exception {
void testSuccess_newSuperordinateWasTransferredToCorrectRegistrar() throws Exception {
setEppHostUpdateInput(
"ns1.example.foo", "ns2.example.tld", "<host:addr ip=\"v4\">192.0.2.22</host:addr>", null);
sessionMetadata.setClientId("NewRegistrar");
@@ -1249,17 +1247,17 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_renameToBadCharacter() throws Exception {
void testFailure_renameToBadCharacter() throws Exception {
doFailingHostNameTest("foo bar", InvalidHostNameException.class);
}
@Test
public void testFailure_renameToNotPunyCoded() throws Exception {
void testFailure_renameToNotPunyCoded() throws Exception {
doFailingHostNameTest("みんな", HostNameNotPunyCodedException.class);
}
@Test
public void testFailure_renameToTooLong() throws Exception {
void testFailure_renameToTooLong() throws Exception {
// Host names can be max 253 chars.
String suffix = ".example.tld";
String tooLong = Strings.repeat("a", 254 - suffix.length()) + suffix;
@@ -1267,38 +1265,38 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testFailure_renameToTooShallowPublicSuffix() throws Exception {
void testFailure_renameToTooShallowPublicSuffix() throws Exception {
doFailingHostNameTest("example.com", HostNameTooShallowException.class);
}
@Test
public void testFailure_renameToTooShallowCcTld() throws Exception {
void testFailure_renameToTooShallowCcTld() throws Exception {
doFailingHostNameTest("foo.co.uk", HostNameTooShallowException.class);
}
@Test
public void testFailure_renameToBarePublicSuffix() throws Exception {
void testFailure_renameToBarePublicSuffix() throws Exception {
doFailingHostNameTest("com", HostNameTooShallowException.class);
}
@Test
public void testFailure_renameToBareCcTld() throws Exception {
void testFailure_renameToBareCcTld() throws Exception {
doFailingHostNameTest("co.uk", HostNameTooShallowException.class);
}
@Test
public void testFailure_renameToTooShallowNewTld() throws Exception {
void testFailure_renameToTooShallowNewTld() throws Exception {
doFailingHostNameTest("example.lol", HostNameTooShallowException.class);
}
@Test
public void testFailure_ccTldInBailiwick() throws Exception {
void testFailure_ccTldInBailiwick() throws Exception {
createTld("co.uk");
doFailingHostNameTest("foo.co.uk", HostNameTooShallowException.class);
}
@Test
public void testSuccess_metadata() throws Exception {
void testSuccess_metadata() throws Exception {
createTld("tld");
persistActiveSubordinateHost(oldHostName(), persistActiveDomain("example.tld"));
clock.advanceOneMilli();
@@ -1314,7 +1312,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
}
@Test
public void testIcannActivityReportField_getsLogged() throws Exception {
void testIcannActivityReportField_getsLogged() throws Exception {
createTld("tld");
persistActiveSubordinateHost(oldHostName(), persistActiveDomain("example.tld"));
clock.advanceOneMilli();
@@ -33,11 +33,11 @@ import google.registry.model.contact.ContactResource;
import google.registry.model.domain.DomainBase;
import google.registry.model.poll.PollMessage;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link PollAckFlow}. */
public class PollAckFlowTest extends FlowTestCase<PollAckFlow> {
class PollAckFlowTest extends FlowTestCase<PollAckFlow> {
/** This is the message id being sent in the ACK request. */
private static final long MESSAGE_ID = 3;
@@ -45,8 +45,8 @@ public class PollAckFlowTest extends FlowTestCase<PollAckFlow> {
private DomainBase domain;
private ContactResource contact;
@Before
public void setUp() {
@BeforeEach
void setUp() {
setEppInput("poll_ack.xml", ImmutableMap.of("MSGID", "1-3-EXAMPLE-4-3-2011"));
setClientIdForFlow("NewRegistrar");
clock.setTo(DateTime.parse("2011-01-02T01:01:01Z"));
@@ -83,13 +83,13 @@ public class PollAckFlowTest extends FlowTestCase<PollAckFlow> {
}
@Test
public void testDryRun() throws Exception {
void testDryRun() throws Exception {
persistOneTimePollMessage(MESSAGE_ID);
dryRunFlowAssertResponse(loadFile("poll_ack_response_empty.xml"));
}
@Test
public void testSuccess_contactPollMessage() throws Exception {
void testSuccess_contactPollMessage() throws Exception {
setEppInput("poll_ack.xml", ImmutableMap.of("MSGID", "2-2-ROID-4-3-2011"));
persistResource(
new PollMessage.OneTime.Builder()
@@ -104,7 +104,7 @@ public class PollAckFlowTest extends FlowTestCase<PollAckFlow> {
}
@Test
public void testFailure_contactPollMessage_withIncorrectYearField() throws Exception {
void testFailure_contactPollMessage_withIncorrectYearField() throws Exception {
setEppInput("poll_ack.xml", ImmutableMap.of("MSGID", "2-2-ROID-4-3-1999"));
persistResource(
new PollMessage.OneTime.Builder()
@@ -119,14 +119,14 @@ public class PollAckFlowTest extends FlowTestCase<PollAckFlow> {
}
@Test
public void testSuccess_messageOnContactResource() throws Exception {
void testSuccess_messageOnContactResource() throws Exception {
persistOneTimePollMessage(MESSAGE_ID);
assertTransactionalFlow(true);
runFlowAssertResponse(loadFile("poll_ack_response_empty.xml"));
}
@Test
public void testSuccess_recentActiveAutorenew() throws Exception {
void testSuccess_recentActiveAutorenew() throws Exception {
setEppInput("poll_ack.xml", ImmutableMap.of("MSGID", "1-3-EXAMPLE-4-3-2010"));
persistAutorenewPollMessage(clock.nowUtc().minusMonths(6), END_OF_TIME);
assertTransactionalFlow(true);
@@ -134,7 +134,7 @@ public class PollAckFlowTest extends FlowTestCase<PollAckFlow> {
}
@Test
public void testSuccess_oldActiveAutorenew() throws Exception {
void testSuccess_oldActiveAutorenew() throws Exception {
setEppInput("poll_ack.xml", ImmutableMap.of("MSGID", "1-3-EXAMPLE-4-3-2009"));
persistAutorenewPollMessage(clock.nowUtc().minusYears(2), END_OF_TIME);
// Create three other messages to be queued for retrieval to get our count right, since the poll
@@ -150,7 +150,7 @@ public class PollAckFlowTest extends FlowTestCase<PollAckFlow> {
}
@Test
public void testSuccess_oldInactiveAutorenew() throws Exception {
void testSuccess_oldInactiveAutorenew() throws Exception {
setEppInput("poll_ack.xml", ImmutableMap.of("MSGID", "1-3-EXAMPLE-4-3-2010"));
persistAutorenewPollMessage(clock.nowUtc().minusMonths(6), clock.nowUtc());
assertTransactionalFlow(true);
@@ -158,7 +158,7 @@ public class PollAckFlowTest extends FlowTestCase<PollAckFlow> {
}
@Test
public void testSuccess_moreMessages() throws Exception {
void testSuccess_moreMessages() throws Exception {
// Create five messages to be queued for retrieval, one of which will be acked.
for (int i = 0; i < 5; i++) {
persistOneTimePollMessage(MESSAGE_ID + i);
@@ -171,7 +171,7 @@ public class PollAckFlowTest extends FlowTestCase<PollAckFlow> {
}
@Test
public void testFailure_noSuchMessage() throws Exception {
void testFailure_noSuchMessage() throws Exception {
assertTransactionalFlow(true);
Exception e = assertThrows(MessageDoesNotExistException.class, this::runFlow);
assertThat(e)
@@ -180,21 +180,21 @@ public class PollAckFlowTest extends FlowTestCase<PollAckFlow> {
}
@Test
public void testFailure_invalidId_tooFewComponents() throws Exception {
void testFailure_invalidId_tooFewComponents() throws Exception {
setEppInput("poll_ack.xml", ImmutableMap.of("MSGID", "1-2-3"));
assertTransactionalFlow(true);
assertThrows(InvalidMessageIdException.class, this::runFlow);
}
@Test
public void testFailure_invalidId_tooManyComponents() throws Exception {
void testFailure_invalidId_tooManyComponents() throws Exception {
setEppInput("poll_ack.xml", ImmutableMap.of("MSGID", "2-2-ROID-4-3-1999-2007"));
assertTransactionalFlow(true);
assertThrows(InvalidMessageIdException.class, this::runFlow);
}
@Test
public void testFailure_contactPollMessage_withMissingYearField() throws Exception {
void testFailure_contactPollMessage_withMissingYearField() throws Exception {
setEppInput("poll_ack.xml", ImmutableMap.of("MSGID", "2-2-ROID-4-3"));
persistResource(
new PollMessage.OneTime.Builder()
@@ -209,28 +209,28 @@ public class PollAckFlowTest extends FlowTestCase<PollAckFlow> {
}
@Test
public void testFailure_invalidId_stringInsteadOfNumeric() throws Exception {
void testFailure_invalidId_stringInsteadOfNumeric() throws Exception {
setEppInput("poll_ack.xml", ImmutableMap.of("MSGID", "ABC-12345"));
assertTransactionalFlow(true);
assertThrows(InvalidMessageIdException.class, this::runFlow);
}
@Test
public void testFailure_invalidEppResourceClassId() throws Exception {
void testFailure_invalidEppResourceClassId() throws Exception {
setEppInput("poll_ack.xml", ImmutableMap.of("MSGID", "999-1-1-1"));
assertTransactionalFlow(true);
assertThrows(InvalidMessageIdException.class, this::runFlow);
}
@Test
public void testFailure_missingId() throws Exception {
void testFailure_missingId() throws Exception {
setEppInput("poll_ack_missing_id.xml");
assertTransactionalFlow(true);
assertThrows(MissingMessageIdException.class, this::runFlow);
}
@Test
public void testFailure_differentRegistrar() throws Exception {
void testFailure_differentRegistrar() throws Exception {
persistResource(
new PollMessage.OneTime.Builder()
.setId(MESSAGE_ID)
@@ -244,7 +244,7 @@ public class PollAckFlowTest extends FlowTestCase<PollAckFlow> {
}
@Test
public void testFailure_messageInFuture() throws Exception {
void testFailure_messageInFuture() throws Exception {
persistResource(
new PollMessage.OneTime.Builder()
.setId(MESSAGE_ID)
@@ -38,18 +38,18 @@ import google.registry.model.transfer.TransferResponse.ContactTransferResponse;
import google.registry.model.transfer.TransferResponse.DomainTransferResponse;
import google.registry.model.transfer.TransferStatus;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link PollRequestFlow}. */
public class PollRequestFlowTest extends FlowTestCase<PollRequestFlow> {
class PollRequestFlowTest extends FlowTestCase<PollRequestFlow> {
private DomainBase domain;
private ContactResource contact;
private HostResource host;
@Before
public void setUp() {
@BeforeEach
void setUp() {
setEppInput("poll.xml");
setClientIdForFlow("NewRegistrar");
clock.setTo(DateTime.parse("2011-01-02T01:01:01Z"));
@@ -81,14 +81,14 @@ public class PollRequestFlowTest extends FlowTestCase<PollRequestFlow> {
}
@Test
public void testSuccess_domainTransferApproved() throws Exception {
void testSuccess_domainTransferApproved() throws Exception {
persistPendingTransferPollMessage();
assertTransactionalFlow(false);
runFlowAssertResponse(loadFile("poll_response_domain_transfer.xml"));
}
@Test
public void testSuccess_clTridNotSpecified() throws Exception {
void testSuccess_clTridNotSpecified() throws Exception {
setEppInput("poll_no_cltrid.xml");
persistPendingTransferPollMessage();
assertTransactionalFlow(false);
@@ -96,7 +96,7 @@ public class PollRequestFlowTest extends FlowTestCase<PollRequestFlow> {
}
@Test
public void testSuccess_contactTransferPending() throws Exception {
void testSuccess_contactTransferPending() throws Exception {
clock.setTo(DateTime.parse("2000-06-13T22:00:00.0Z"));
setClientIdForFlow("TheRegistrar");
persistResource(
@@ -120,7 +120,7 @@ public class PollRequestFlowTest extends FlowTestCase<PollRequestFlow> {
}
@Test
public void testSuccess_domainPendingActionComplete() throws Exception {
void testSuccess_domainPendingActionComplete() throws Exception {
persistResource(
new PollMessage.OneTime.Builder()
.setClientId(getClientIdForFlow())
@@ -135,7 +135,7 @@ public class PollRequestFlowTest extends FlowTestCase<PollRequestFlow> {
}
@Test
public void testSuccess_domainAutorenewMessage() throws Exception {
void testSuccess_domainAutorenewMessage() throws Exception {
persistResource(
new PollMessage.Autorenew.Builder()
.setClientId(getClientIdForFlow())
@@ -149,12 +149,12 @@ public class PollRequestFlowTest extends FlowTestCase<PollRequestFlow> {
}
@Test
public void testSuccess_empty() throws Exception {
void testSuccess_empty() throws Exception {
runFlowAssertResponse(loadFile("poll_response_empty.xml"));
}
@Test
public void testSuccess_wrongRegistrar() throws Exception {
void testSuccess_wrongRegistrar() throws Exception {
persistResource(
new PollMessage.OneTime.Builder()
.setClientId("different client id")
@@ -166,7 +166,7 @@ public class PollRequestFlowTest extends FlowTestCase<PollRequestFlow> {
}
@Test
public void testSuccess_futurePollMessage() throws Exception {
void testSuccess_futurePollMessage() throws Exception {
persistResource(
new PollMessage.OneTime.Builder()
.setClientId(getClientIdForFlow())
@@ -178,7 +178,7 @@ public class PollRequestFlowTest extends FlowTestCase<PollRequestFlow> {
}
@Test
public void testSuccess_futureAutorenew() throws Exception {
void testSuccess_futureAutorenew() throws Exception {
persistResource(
new PollMessage.Autorenew.Builder()
.setClientId(getClientIdForFlow())
@@ -192,7 +192,7 @@ public class PollRequestFlowTest extends FlowTestCase<PollRequestFlow> {
}
@Test
public void testSuccess_contactDelete() throws Exception {
void testSuccess_contactDelete() throws Exception {
// Contact delete poll messages do not have any response data, so ensure that no
// response data block is produced in the poll message.
HistoryEntry historyEntry = persistResource(new HistoryEntry.Builder()
@@ -213,7 +213,7 @@ public class PollRequestFlowTest extends FlowTestCase<PollRequestFlow> {
}
@Test
public void testSuccess_hostDelete() throws Exception {
void testSuccess_hostDelete() throws Exception {
// Host delete poll messages do not have any response data, so ensure that no
// response data block is produced in the poll message.
HistoryEntry historyEntry = persistResource(new HistoryEntry.Builder()
@@ -234,7 +234,7 @@ public class PollRequestFlowTest extends FlowTestCase<PollRequestFlow> {
}
@Test
public void testFailure_messageIdProvided() throws Exception {
void testFailure_messageIdProvided() throws Exception {
setEppInput("poll_with_id.xml");
assertTransactionalFlow(false);
EppException thrown = assertThrows(UnexpectedMessageIdException.class, this::runFlow);
@@ -22,13 +22,13 @@ import com.google.common.collect.ImmutableMap;
import google.registry.flows.EppException;
import google.registry.flows.FlowTestCase;
import google.registry.flows.FlowUtils.GenericXmlSyntaxErrorException;
import org.junit.Test;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link HelloFlow}. */
public class HelloFlowTest extends FlowTestCase<HelloFlow> {
class HelloFlowTest extends FlowTestCase<HelloFlow> {
@Test
public void testHello() throws Exception {
void testHello() throws Exception {
setEppInput("hello.xml");
assertTransactionalFlow(false);
runFlowAssertResponse(
@@ -37,7 +37,7 @@ public class HelloFlowTest extends FlowTestCase<HelloFlow> {
}
@Test
public void testGenericSyntaxException() {
void testGenericSyntaxException() {
// This is a generic syntax test--we don't have a generic flow test case so this simple
// test class will do. Note: the logic this tests is common to all flows.
setEppInput("generic_syntax_exception.xml");
@@ -34,17 +34,17 @@ import google.registry.flows.session.LoginFlow.TooManyFailedLoginsException;
import google.registry.flows.session.LoginFlow.UnsupportedLanguageException;
import google.registry.model.registrar.Registrar;
import google.registry.model.registrar.Registrar.State;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link LoginFlow}. */
public abstract class LoginFlowTestCase extends FlowTestCase<LoginFlow> {
Registrar registrar;
Registrar.Builder registrarBuilder;
private Registrar registrar;
private Registrar.Builder registrarBuilder;
@Before
public void initRegistrar() {
@BeforeEach
void initRegistrar() {
sessionMetadata.setClientId(null); // Don't implicitly log in (all other flows need to).
registrar = loadRegistrar("NewRegistrar");
registrarBuilder = registrar.asBuilder();
@@ -70,73 +70,73 @@ public abstract class LoginFlowTestCase extends FlowTestCase<LoginFlow> {
}
@Test
public void testSuccess() throws Exception {
void testSuccess() throws Exception {
doSuccessfulTest("login_valid.xml");
}
@Test
public void testSuccess_suspendedRegistrar() throws Exception {
void testSuccess_suspendedRegistrar() throws Exception {
persistResource(getRegistrarBuilder().setState(State.SUSPENDED).build());
doSuccessfulTest("login_valid.xml");
}
@Test
public void testSuccess_missingTypes() throws Exception {
void testSuccess_missingTypes() throws Exception {
// We don't actually care if you list all the right types, as long as you don't add wrong ones.
doSuccessfulTest("login_valid_missing_types.xml");
}
@Test
public void testFailure_invalidVersion() {
void testFailure_invalidVersion() {
doFailingTest("login_invalid_version.xml", UnimplementedProtocolVersionException.class);
}
@Test
public void testFailure_invalidLanguage() {
void testFailure_invalidLanguage() {
doFailingTest("login_invalid_language.xml", UnsupportedLanguageException.class);
}
@Test
public void testFailure_invalidExtension() {
void testFailure_invalidExtension() {
doFailingTest("login_invalid_extension.xml", UnimplementedExtensionException.class);
}
@Test
public void testFailure_invalidTypes() {
void testFailure_invalidTypes() {
doFailingTest("login_invalid_types.xml", UnimplementedObjectServiceException.class);
}
@Test
public void testFailure_newPassword() {
void testFailure_newPassword() {
doFailingTest("login_invalid_newpw.xml", PasswordChangesNotSupportedException.class);
}
@Test
public void testFailure_unknownRegistrar() {
void testFailure_unknownRegistrar() {
deleteResource(getRegistrarBuilder().build());
doFailingTest("login_valid.xml", BadRegistrarClientIdException.class);
}
@Test
public void testFailure_pendingRegistrar() {
void testFailure_pendingRegistrar() {
persistResource(getRegistrarBuilder().setState(State.PENDING).build());
doFailingTest("login_valid.xml", RegistrarAccountNotActiveException.class);
}
@Test
public void testFailure_disabledRegistrar() {
void testFailure_disabledRegistrar() {
persistResource(getRegistrarBuilder().setState(State.DISABLED).build());
doFailingTest("login_valid.xml", RegistrarAccountNotActiveException.class);
}
@Test
public void testFailure_incorrectPassword() {
void testFailure_incorrectPassword() {
persistResource(getRegistrarBuilder().setPassword("diff password").build());
doFailingTest("login_valid.xml", BadRegistrarPasswordException.class);
}
@Test
public void testFailure_tooManyFailedLogins() {
void testFailure_tooManyFailedLogins() {
persistResource(getRegistrarBuilder().setPassword("diff password").build());
doFailingTest("login_valid.xml", BadRegistrarPasswordException.class);
doFailingTest("login_valid.xml", BadRegistrarPasswordException.class);
@@ -145,7 +145,7 @@ public abstract class LoginFlowTestCase extends FlowTestCase<LoginFlow> {
}
@Test
public void testFailure_alreadyLoggedIn() {
void testFailure_alreadyLoggedIn() {
sessionMetadata.setClientId("something");
doFailingTest("login_valid.xml", AlreadyLoggedInException.class);
}
@@ -26,7 +26,7 @@ import google.registry.model.registrar.Registrar;
import google.registry.testing.CertificateSamples;
import google.registry.util.CidrAddressBlock;
import java.util.Optional;
import org.junit.Test;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link LoginFlow} when accessed via a TLS transport. */
public class LoginFlowViaTlsTest extends LoginFlowTestCase {
@@ -47,14 +47,14 @@ public class LoginFlowViaTlsTest extends LoginFlowTestCase {
}
@Test
public void testSuccess_withGoodCredentials() throws Exception {
void testSuccess_withGoodCredentials() throws Exception {
persistResource(getRegistrarBuilder().build());
credentials = new TlsCredentials(true, GOOD_CERT, GOOD_IP);
doSuccessfulTest("login_valid.xml");
}
@Test
public void testSuccess_withGoodCredentialsIpv6() throws Exception {
void testSuccess_withGoodCredentialsIpv6() throws Exception {
persistResource(
getRegistrarBuilder()
.setIpAddressAllowList(
@@ -65,7 +65,7 @@ public class LoginFlowViaTlsTest extends LoginFlowTestCase {
}
@Test
public void testSuccess_withIpv6AddressInSubnet() throws Exception {
void testSuccess_withIpv6AddressInSubnet() throws Exception {
persistResource(
getRegistrarBuilder()
.setIpAddressAllowList(
@@ -76,7 +76,7 @@ public class LoginFlowViaTlsTest extends LoginFlowTestCase {
}
@Test
public void testSuccess_withIpv4AddressInSubnet() throws Exception {
void testSuccess_withIpv4AddressInSubnet() throws Exception {
persistResource(
getRegistrarBuilder()
.setIpAddressAllowList(ImmutableList.of(CidrAddressBlock.create("192.168.1.255/24")))
@@ -86,21 +86,21 @@ public class LoginFlowViaTlsTest extends LoginFlowTestCase {
}
@Test
public void testFailure_incorrectClientCertificateHash() {
void testFailure_incorrectClientCertificateHash() {
persistResource(getRegistrarBuilder().build());
credentials = new TlsCredentials(true, BAD_CERT, GOOD_IP);
doFailingTest("login_valid.xml", BadRegistrarCertificateException.class);
}
@Test
public void testFailure_missingClientCertificateHash() {
void testFailure_missingClientCertificateHash() {
persistResource(getRegistrarBuilder().build());
credentials = new TlsCredentials(true, null, GOOD_IP);
doFailingTest("login_valid.xml", MissingRegistrarCertificateException.class);
}
@Test
public void testFailure_missingClientIpAddress() {
void testFailure_missingClientIpAddress() {
persistResource(
getRegistrarBuilder()
.setIpAddressAllowList(
@@ -113,7 +113,7 @@ public class LoginFlowViaTlsTest extends LoginFlowTestCase {
}
@Test
public void testFailure_incorrectClientIpv4Address() {
void testFailure_incorrectClientIpv4Address() {
persistResource(
getRegistrarBuilder()
.setIpAddressAllowList(
@@ -126,7 +126,7 @@ public class LoginFlowViaTlsTest extends LoginFlowTestCase {
}
@Test
public void testFailure_incorrectClientIpv6Address() {
void testFailure_incorrectClientIpv6Address() {
persistResource(
getRegistrarBuilder()
.setIpAddressAllowList(
@@ -21,30 +21,30 @@ import static org.junit.Assert.assertThrows;
import google.registry.flows.EppException;
import google.registry.flows.FlowTestCase;
import google.registry.flows.FlowUtils.NotLoggedInException;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link LogoutFlow}. */
public class LogoutFlowTest extends FlowTestCase<LogoutFlow> {
class LogoutFlowTest extends FlowTestCase<LogoutFlow> {
public LogoutFlowTest() {
LogoutFlowTest() {
setEppInput("logout.xml");
}
@Before
public void setupTld() {
@BeforeEach
void setupTld() {
createTld("example");
}
@Test
public void testSuccess() throws Exception {
void testSuccess() throws Exception {
assertTransactionalFlow(false);
// All flow tests are implicitly logged in, so logout should work.
runFlowAssertResponse(loadFile("logout_response.xml"));
}
@Test
public void testFailure() {
void testFailure() {
sessionMetadata.setClientId(null); // Turn off the implicit login
EppException thrown = assertThrows(NotLoggedInException.class, this::runFlow);
assertAboutEppExceptions().that(thrown).marshalsToXml();
@@ -29,17 +29,13 @@ import org.bouncycastle.openpgp.PGPUtil;
import org.bouncycastle.openpgp.bc.BcPGPSecretKeyRing;
import org.bouncycastle.openpgp.operator.bc.BcPBESecretKeyDecryptorBuilder;
import org.bouncycastle.openpgp.operator.bc.BcPGPDigestCalculatorProvider;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
/** Unit tests for {@link KeySerializer}. */
@RunWith(JUnit4.class)
public class KeySerializerTest {
class KeySerializerTest {
@Rule
public final BouncyCastleProviderRule bouncy = new BouncyCastleProviderRule();
@RegisterExtension final BouncyCastleProviderRule bouncy = new BouncyCastleProviderRule();
/**
* An Armored representation of a pgp secret key.
@@ -50,65 +46,65 @@ public class KeySerializerTest {
*/
private static final String ARMORED_KEY_STRING =
"-----BEGIN PGP PRIVATE KEY BLOCK-----\n"
+ "Version: GnuPG v1\n"
+ "\n"
+ "lQO+BFjbx+IBCADO3hs5CE2fIorcq8+yBdnVb1+pyPrm/48vIHCIhFHeqBjmxuY9\n"
+ "cdgRjiNTXp8Rs1N4e1cXWtiA2vuoBmkLF1REckgyPyocn/ssta/pRHd4fqskrQwJ\n"
+ "CoIoQaP3bd+KSUJoxTSckWgXFQnoNWj1kg5gv8WnY7nWB0jtjwyGSQoHy/pK3h94\n"
+ "GDrHg5CQBVZ3N6NBob9bGoEhi53gh/1UIUS8GVSLS9Qwt26+3oJ1RlGl7PQoDjeK\n"
+ "oraY8i0sl9rD06qVTFtmXLHHogP4WgD6GItTam7flPqXXNzl0PUk0mTcv9cwt4VP\n"
+ "WZ5YJ7y5CqNhwqU9YeirbooHq6T9+nHxU2ddABEBAAH+AwMCjPetoiDH5m5gRgn4\n"
+ "FB3io2zclIcCEnvfby1VZ/82u2nZXtSK9N5twf6pWH4KD1/3VkgqlEBhrQkqz8v4\n"
+ "C5AWObWT1lF1hQkh/O6OFTPN7DMUSqLX/z6qXv7c5fMFU69CGq6B64s/SMKxfI1p\n"
+ "roDoFA912GlVH89ZT8BDtTahQQzJyHL/61KZVMidLt6IqeWsI3XCy1u8/WkLYkBG\n"
+ "dqvCPBf2mlVeEOwmoAPWTMvV1lHlvauu4ofLJh8VYoO+wziX86yiQ37tsPN8Jspx\n"
+ "gpaiSH6f2x+I7vXFKO2ThqC8jNjfQFLnQ9yWtDYVtLgA6POMLFNOb9c733lzvHPU\n"
+ "UgQRCumAyTeX0wLoC2rEG3Qu/o+Sbm10BNQmkNBxH+Pkdk+ubO/4lvaY8+nxWw1t\n"
+ "sIzoUoln1dHo5lbJsA/++ttNZsAMPlGB5nDC/EmhUHjKDhRpj9OwX+aFxAbBpJXg\n"
+ "BKBirm7VnWp+rUd5YlwKDOJFLlNKgFmh8XBTTpe9DE/qKvnABlFjdhXpUXYEMfHw\n"
+ "D7mS1J3gtd2Iz24pwbL52XA+M5nIWnX0A9N4pi/k+3M02T6up/qcqArjf/CFFZS1\n"
+ "CSng1xYPBrxDJyIXTsFFQ7kEJrSUyvXylsLHVeXZmnwqmmjh8RFohTWecDSHgxi6\n"
+ "R4m9ZHVagWxecDvNmxY5vPRzhNmP5w/teCMVnEHH5VXktBmbn8TW3hLaFHs2H88b\n"
+ "xovFXrn1pQ7hg6KLURbhXsBQlL/3NXFSXYc5cimP4lewnd6sqlnSfY/o9JujgoAV\n"
+ "v1Wo63Jjl9fhlu8Vr/sHrAPWQS9mWzMUJy6EcTJRop39J90fPqcsz7Iz4gdH8QNY\n"
+ "ve/iLjIuGbkK4KevptD7oR4zUIwKUpIKVJTr1Q2ukKU0pAVCyn19nRAR1RGri81L\n"
+ "jbRAR1RMRCBUZXN0ZXIgKFRoaXMga2V5IGlzIHVzZWQgZm9yIHRlc3RzIG9ubHkp\n"
+ "IDx0ZXN0ZXJAdGVzdC50ZXN0PokBOAQTAQIAIgUCWNvH4gIbAwYLCQgHAwIGFQgC\n"
+ "CQoLBBYCAwECHgECF4AACgkQxCHL9+c/Gv2LKgf+KdUPUlKq0N3oSzXk5RcXJZDT\n"
+ "v8teeLXyu3loaXzEuK89/V5BdDL5nRu8+GUhfFRkd/LFv0rwehcJZ5TtXghukk6r\n"
+ "5kvekPf8vVjgMO89RrmiW2oKqqmhP8VZd1T1vQacQ4J6eNKCjbuLym47m4Vp9VZm\n"
+ "lHNGNgkDbU1zVxhF23rLqOqzltiIcyCafMPFJNRUANlLkEIvAo8dGziqn5l2X71w\n"
+ "9KQw4LzQHrR1ulm0h4SbYwhQQ2Qz1FzfVjyuRUjye5QJxLEa9M92l1oLMjubt3Qx\n"
+ "QEiL05Bp3uYd+S97BuxbDFz+hNUHfIaSVuwrVgdz2tcwBTyBl2jUTukKC2nMfJ0D\n"
+ "vgRY28fiAQgA3qW5JTZNG26Iv9k+cysl5TWeAO71yrEAL4WAXoKQYIEVMcCi3Rt9\n"
+ "YW+FhZ+z056n3EZsgIYsPniipdyRBrehQI5f9CRFcyqkMu8tuBIqsJaZAhcMcYoN\n"
+ "zNWqk7mK5Wjp4yfQAEkyb13YXg+zFEtBiEOG5FPonA+vGIFeOUKSR0s+hoxhcBvS\n"
+ "Q5BGXlHP20UQBdLtPfnOx+scI9sjYBtO13ZaURBnsHfHSyDnNa5HZD6eTk7V8bjy\n"
+ "ScUDHOW/Ujva3yH/7KQeR42cdba38zpvSlivwIpnGtNlhABR+mZhee5BwxGNusJ9\n"
+ "D/Xi8dSSjpwZH8b6fHhwoSpb5AK6tvGgHwARAQAB/gMDAoz3raIgx+ZuYJS4j+fX\n"
+ "6PmrHg+nOoes3i2RufCvjMhRSMU+aZo1e8fNWP9NnVKPna9Ya2PHGkHHUZlx6CE9\n"
+ "EPvMwl9d8web5vBSCkzNwtUtgCrShk7cyDbHq7dLzbqxZTZK+HKX6CGL3dAC1Z1J\n"
+ "zvgpj6enpTZSKSbxkPSGcxlXkT/hm7x+wYXsPgbMGH/rRnHJ1Ycg4nlHxq7sPgHK\n"
+ "Jgfl3a4WuyN6Ja1mVPPYxSSyKusFdXZHreqR+GLwGc2PsKjQy870uJPF4zBGYya1\n"
+ "iJ/8o5xJ1OxLa+SrvPExgkFmt271SHFAYk0Xx/IUshZZVP+3i8HHo7yMKEANxM+n\n"
+ "Mcr9MW963Dm8thbxy3yC2GvufYz13yJJeWnMel/enSDvSieUAFsEH4NalE7HX7Mv\n"
+ "NoBx6wuQTFVdojauXrERD75vYGamMC1/0h+6rzejE4HP0iDHlujJmkucAD2K8ibb\n"
+ "ax4QiRJtatel48wYqjIkhZ8x6mFaUiBL34iyh4t0vY0CgZOsEIegy1pRkoO8u72T\n"
+ "rcgFHhHQgtf6OaPG4QnSWbxrftRmZe7W4K5tyrmoLHjsm6exAFcTmpl79qE8Mn+7\n"
+ "jTspdKeTkhse5K/7ct749kZDD8FwVhSP9vqfbDhwmdmCQNp5rRQKm1+YBnamlnuz\n"
+ "IEWzxmQ2NqjEeV65bk7BfnbHYe42ZNNIzE4XahzrBVwhtMaLGLz/7YF4Czwrbn0D\n"
+ "KQwjp5qbjDAO+0FCOxN4xFItazp0bKlHnGYflEPLbFoeplBfi2sZfmQ6PUmA3UPr\n"
+ "T96e6fHBsctYVa4JP0HWKGcwYIhih9uD53UFsg0BJW5iXsGfMzuEo2TUXBD5qFUN\n"
+ "xrS5Nt/Ra1psaaZxXDeiHWM5qlmk37xoFjnPV5RV0014TqNr//VHgJknWNuhcMqJ\n"
+ "AR8EGAECAAkFAljbx+ICGwwACgkQxCHL9+c/Gv1WzQf+Ihv0zeOFOZdvI6xOTVXS\n"
+ "qBg6k1aMdbwqshaHEvLhAY00XQmhPr65ymEJVaWRloviQ76dN9k4tTi6lYX/CGob\n"
+ "bi3fUNDNQGKdyvhoxtneKsXw/3LfFh7JphVWQizh/yJHsKFvzmmMpnC4WTJ3NBTe\n"
+ "G+CcHlGdFYuxc4+Z9nZG2jOorQtlFGLEqLzdM8+OJ8KyOqvaOpa0vaMyvN40QiGv\n"
+ "raEbRpkDbxJiPp4RuPiu7S8KwKpmjgmuAXaoYKcrL8KIt9WvYWQirW8oZcbP3g/1\n"
+ "laUCBMklv75toeXKeYi5Y74CvnPuciCKsNtm0fZkmhfE1vpPFn4/UqRmDtPrToVQ\n"
+ "GQ==\n"
+ "=qeFB\n"
+ "-----END PGP PRIVATE KEY BLOCK-----\n";
+ "Version: GnuPG v1\n"
+ "\n"
+ "lQO+BFjbx+IBCADO3hs5CE2fIorcq8+yBdnVb1+pyPrm/48vIHCIhFHeqBjmxuY9\n"
+ "cdgRjiNTXp8Rs1N4e1cXWtiA2vuoBmkLF1REckgyPyocn/ssta/pRHd4fqskrQwJ\n"
+ "CoIoQaP3bd+KSUJoxTSckWgXFQnoNWj1kg5gv8WnY7nWB0jtjwyGSQoHy/pK3h94\n"
+ "GDrHg5CQBVZ3N6NBob9bGoEhi53gh/1UIUS8GVSLS9Qwt26+3oJ1RlGl7PQoDjeK\n"
+ "oraY8i0sl9rD06qVTFtmXLHHogP4WgD6GItTam7flPqXXNzl0PUk0mTcv9cwt4VP\n"
+ "WZ5YJ7y5CqNhwqU9YeirbooHq6T9+nHxU2ddABEBAAH+AwMCjPetoiDH5m5gRgn4\n"
+ "FB3io2zclIcCEnvfby1VZ/82u2nZXtSK9N5twf6pWH4KD1/3VkgqlEBhrQkqz8v4\n"
+ "C5AWObWT1lF1hQkh/O6OFTPN7DMUSqLX/z6qXv7c5fMFU69CGq6B64s/SMKxfI1p\n"
+ "roDoFA912GlVH89ZT8BDtTahQQzJyHL/61KZVMidLt6IqeWsI3XCy1u8/WkLYkBG\n"
+ "dqvCPBf2mlVeEOwmoAPWTMvV1lHlvauu4ofLJh8VYoO+wziX86yiQ37tsPN8Jspx\n"
+ "gpaiSH6f2x+I7vXFKO2ThqC8jNjfQFLnQ9yWtDYVtLgA6POMLFNOb9c733lzvHPU\n"
+ "UgQRCumAyTeX0wLoC2rEG3Qu/o+Sbm10BNQmkNBxH+Pkdk+ubO/4lvaY8+nxWw1t\n"
+ "sIzoUoln1dHo5lbJsA/++ttNZsAMPlGB5nDC/EmhUHjKDhRpj9OwX+aFxAbBpJXg\n"
+ "BKBirm7VnWp+rUd5YlwKDOJFLlNKgFmh8XBTTpe9DE/qKvnABlFjdhXpUXYEMfHw\n"
+ "D7mS1J3gtd2Iz24pwbL52XA+M5nIWnX0A9N4pi/k+3M02T6up/qcqArjf/CFFZS1\n"
+ "CSng1xYPBrxDJyIXTsFFQ7kEJrSUyvXylsLHVeXZmnwqmmjh8RFohTWecDSHgxi6\n"
+ "R4m9ZHVagWxecDvNmxY5vPRzhNmP5w/teCMVnEHH5VXktBmbn8TW3hLaFHs2H88b\n"
+ "xovFXrn1pQ7hg6KLURbhXsBQlL/3NXFSXYc5cimP4lewnd6sqlnSfY/o9JujgoAV\n"
+ "v1Wo63Jjl9fhlu8Vr/sHrAPWQS9mWzMUJy6EcTJRop39J90fPqcsz7Iz4gdH8QNY\n"
+ "ve/iLjIuGbkK4KevptD7oR4zUIwKUpIKVJTr1Q2ukKU0pAVCyn19nRAR1RGri81L\n"
+ "jbRAR1RMRCBUZXN0ZXIgKFRoaXMga2V5IGlzIHVzZWQgZm9yIHRlc3RzIG9ubHkp\n"
+ "IDx0ZXN0ZXJAdGVzdC50ZXN0PokBOAQTAQIAIgUCWNvH4gIbAwYLCQgHAwIGFQgC\n"
+ "CQoLBBYCAwECHgECF4AACgkQxCHL9+c/Gv2LKgf+KdUPUlKq0N3oSzXk5RcXJZDT\n"
+ "v8teeLXyu3loaXzEuK89/V5BdDL5nRu8+GUhfFRkd/LFv0rwehcJZ5TtXghukk6r\n"
+ "5kvekPf8vVjgMO89RrmiW2oKqqmhP8VZd1T1vQacQ4J6eNKCjbuLym47m4Vp9VZm\n"
+ "lHNGNgkDbU1zVxhF23rLqOqzltiIcyCafMPFJNRUANlLkEIvAo8dGziqn5l2X71w\n"
+ "9KQw4LzQHrR1ulm0h4SbYwhQQ2Qz1FzfVjyuRUjye5QJxLEa9M92l1oLMjubt3Qx\n"
+ "QEiL05Bp3uYd+S97BuxbDFz+hNUHfIaSVuwrVgdz2tcwBTyBl2jUTukKC2nMfJ0D\n"
+ "vgRY28fiAQgA3qW5JTZNG26Iv9k+cysl5TWeAO71yrEAL4WAXoKQYIEVMcCi3Rt9\n"
+ "YW+FhZ+z056n3EZsgIYsPniipdyRBrehQI5f9CRFcyqkMu8tuBIqsJaZAhcMcYoN\n"
+ "zNWqk7mK5Wjp4yfQAEkyb13YXg+zFEtBiEOG5FPonA+vGIFeOUKSR0s+hoxhcBvS\n"
+ "Q5BGXlHP20UQBdLtPfnOx+scI9sjYBtO13ZaURBnsHfHSyDnNa5HZD6eTk7V8bjy\n"
+ "ScUDHOW/Ujva3yH/7KQeR42cdba38zpvSlivwIpnGtNlhABR+mZhee5BwxGNusJ9\n"
+ "D/Xi8dSSjpwZH8b6fHhwoSpb5AK6tvGgHwARAQAB/gMDAoz3raIgx+ZuYJS4j+fX\n"
+ "6PmrHg+nOoes3i2RufCvjMhRSMU+aZo1e8fNWP9NnVKPna9Ya2PHGkHHUZlx6CE9\n"
+ "EPvMwl9d8web5vBSCkzNwtUtgCrShk7cyDbHq7dLzbqxZTZK+HKX6CGL3dAC1Z1J\n"
+ "zvgpj6enpTZSKSbxkPSGcxlXkT/hm7x+wYXsPgbMGH/rRnHJ1Ycg4nlHxq7sPgHK\n"
+ "Jgfl3a4WuyN6Ja1mVPPYxSSyKusFdXZHreqR+GLwGc2PsKjQy870uJPF4zBGYya1\n"
+ "iJ/8o5xJ1OxLa+SrvPExgkFmt271SHFAYk0Xx/IUshZZVP+3i8HHo7yMKEANxM+n\n"
+ "Mcr9MW963Dm8thbxy3yC2GvufYz13yJJeWnMel/enSDvSieUAFsEH4NalE7HX7Mv\n"
+ "NoBx6wuQTFVdojauXrERD75vYGamMC1/0h+6rzejE4HP0iDHlujJmkucAD2K8ibb\n"
+ "ax4QiRJtatel48wYqjIkhZ8x6mFaUiBL34iyh4t0vY0CgZOsEIegy1pRkoO8u72T\n"
+ "rcgFHhHQgtf6OaPG4QnSWbxrftRmZe7W4K5tyrmoLHjsm6exAFcTmpl79qE8Mn+7\n"
+ "jTspdKeTkhse5K/7ct749kZDD8FwVhSP9vqfbDhwmdmCQNp5rRQKm1+YBnamlnuz\n"
+ "IEWzxmQ2NqjEeV65bk7BfnbHYe42ZNNIzE4XahzrBVwhtMaLGLz/7YF4Czwrbn0D\n"
+ "KQwjp5qbjDAO+0FCOxN4xFItazp0bKlHnGYflEPLbFoeplBfi2sZfmQ6PUmA3UPr\n"
+ "T96e6fHBsctYVa4JP0HWKGcwYIhih9uD53UFsg0BJW5iXsGfMzuEo2TUXBD5qFUN\n"
+ "xrS5Nt/Ra1psaaZxXDeiHWM5qlmk37xoFjnPV5RV0014TqNr//VHgJknWNuhcMqJ\n"
+ "AR8EGAECAAkFAljbx+ICGwwACgkQxCHL9+c/Gv1WzQf+Ihv0zeOFOZdvI6xOTVXS\n"
+ "qBg6k1aMdbwqshaHEvLhAY00XQmhPr65ymEJVaWRloviQ76dN9k4tTi6lYX/CGob\n"
+ "bi3fUNDNQGKdyvhoxtneKsXw/3LfFh7JphVWQizh/yJHsKFvzmmMpnC4WTJ3NBTe\n"
+ "G+CcHlGdFYuxc4+Z9nZG2jOorQtlFGLEqLzdM8+OJ8KyOqvaOpa0vaMyvN40QiGv\n"
+ "raEbRpkDbxJiPp4RuPiu7S8KwKpmjgmuAXaoYKcrL8KIt9WvYWQirW8oZcbP3g/1\n"
+ "laUCBMklv75toeXKeYi5Y74CvnPuciCKsNtm0fZkmhfE1vpPFn4/UqRmDtPrToVQ\n"
+ "GQ==\n"
+ "=qeFB\n"
+ "-----END PGP PRIVATE KEY BLOCK-----\n";
private static final BcPGPSecretKeyRing SECRET_KEYRING = getSecretKeyring();
@@ -139,20 +135,22 @@ public class KeySerializerTest {
}
}
@Test public void serializeString() {
@Test
void serializeString() {
String result = KeySerializer.deserializeString(KeySerializer.serializeString("value\n"));
assertThat(result).isEqualTo("value\n");
}
@Test public void serializePublicKey() throws Exception {
@Test
void serializePublicKey() throws Exception {
PGPPublicKey publicKeyResult =
KeySerializer.deserializePublicKey(
KeySerializer.serializePublicKey(PUBLIC_KEY));
KeySerializer.deserializePublicKey(KeySerializer.serializePublicKey(PUBLIC_KEY));
assertThat(publicKeyResult.getEncoded()).isEqualTo(PUBLIC_KEY.getEncoded());
}
@Test public void serializeKeyPair() throws Exception {
@Test
void serializeKeyPair() throws Exception {
PGPKeyPair keyPairResult =
KeySerializer.deserializeKeyPair(
KeySerializer.serializeKeyPair(new PGPKeyPair(PUBLIC_KEY, PRIVATE_KEY)));
@@ -26,67 +26,57 @@ import google.registry.testing.BouncyCastleProviderRule;
import org.bouncycastle.openpgp.PGPKeyPair;
import org.bouncycastle.openpgp.PGPPrivateKey;
import org.bouncycastle.openpgp.PGPPublicKey;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
@RunWith(JUnit4.class)
public class KmsKeyringTest {
/** Unit tests for {@link KmsKeyring}. */
class KmsKeyringTest {
@Rule public final BouncyCastleProviderRule bouncy = new BouncyCastleProviderRule();
@RegisterExtension final BouncyCastleProviderRule bouncy = new BouncyCastleProviderRule();
@Rule
public final AppEngineRule appEngine = AppEngineRule.builder().withDatastoreAndCloudSql().build();
@RegisterExtension
final AppEngineRule appEngine = AppEngineRule.builder().withDatastoreAndCloudSql().build();
private KmsKeyring keyring;
@Before
public void setUp() {
@BeforeEach
void beforeEach() {
keyring = new KmsKeyring(new FakeKmsConnection());
}
@Test
public void test_getCloudSqlPassword() throws Exception {
void test_getCloudSqlPassword() {
saveCleartextSecret("cloud-sql-password-string");
String cloudSqlPassword = keyring.getCloudSqlPassword();
assertThat(cloudSqlPassword).isEqualTo("cloud-sql-password-stringmoo");
}
@Test
public void test_getToolsCloudSqlPassword() throws Exception {
void test_getToolsCloudSqlPassword() {
saveCleartextSecret("tools-cloud-sql-password-string");
String toolsCloudSqlPassword = keyring.getToolsCloudSqlPassword();
assertThat(toolsCloudSqlPassword).isEqualTo("tools-cloud-sql-password-stringmoo");
}
@Test
public void test_getRdeSigningKey() throws Exception {
void test_getRdeSigningKey() throws Exception {
saveKeyPairSecret("rde-signing-public", "rde-signing-private");
PGPKeyPair rdeSigningKey = keyring.getRdeSigningKey();
assertThat(KeySerializer.serializeKeyPair(rdeSigningKey))
.isEqualTo(KeySerializer.serializeKeyPair(KmsTestHelper.getKeyPair()));
}
@Test
public void test_getRdeStagingEncryptionKey() throws Exception {
void test_getRdeStagingEncryptionKey() throws Exception {
savePublicKeySecret("rde-staging-public");
PGPPublicKey rdeStagingEncryptionKey = keyring.getRdeStagingEncryptionKey();
assertThat(rdeStagingEncryptionKey.getFingerprint())
.isEqualTo(KmsTestHelper.getPublicKey().getFingerprint());
}
@Test
public void test_getRdeStagingDecryptionKey() throws Exception {
void test_getRdeStagingDecryptionKey() throws Exception {
savePrivateKeySecret("rde-staging-private");
savePublicKeySecret("rde-staging-public");
@@ -99,96 +89,75 @@ public class KmsKeyringTest {
}
@Test
public void test_getRdeReceiverKey() throws Exception {
void test_getRdeReceiverKey() throws Exception {
savePublicKeySecret("rde-receiver-public");
PGPPublicKey rdeReceiverKey = keyring.getRdeReceiverKey();
assertThat(rdeReceiverKey.getFingerprint())
.isEqualTo(KmsTestHelper.getPublicKey().getFingerprint());
}
@Test
public void test_getBrdaSigningKey() throws Exception {
void test_getBrdaSigningKey() throws Exception {
saveKeyPairSecret("brda-signing-public", "brda-signing-private");
PGPKeyPair brdaSigningKey = keyring.getBrdaSigningKey();
assertThat(KeySerializer.serializeKeyPair(brdaSigningKey))
.isEqualTo(KeySerializer.serializeKeyPair(KmsTestHelper.getKeyPair()));
}
@Test
public void test_getBrdaReceiverKey() throws Exception {
void test_getBrdaReceiverKey() throws Exception {
savePublicKeySecret("brda-receiver-public");
PGPPublicKey brdaReceiverKey = keyring.getBrdaReceiverKey();
assertThat(brdaReceiverKey.getFingerprint())
.isEqualTo(KmsTestHelper.getPublicKey().getFingerprint());
}
@Test
public void test_getRdeSshClientPublicKey() {
void test_getRdeSshClientPublicKey() {
saveCleartextSecret("rde-ssh-client-public-string");
String rdeSshClientPublicKey = keyring.getRdeSshClientPublicKey();
assertThat(rdeSshClientPublicKey).isEqualTo("rde-ssh-client-public-stringmoo");
}
@Test
public void test_getRdeSshClientPrivateKey() {
void test_getRdeSshClientPrivateKey() {
saveCleartextSecret("rde-ssh-client-private-string");
String rdeSshClientPrivateKey = keyring.getRdeSshClientPrivateKey();
assertThat(rdeSshClientPrivateKey).isEqualTo("rde-ssh-client-private-stringmoo");
}
@Test
public void test_getIcannReportingPassword() {
void test_getIcannReportingPassword() {
saveCleartextSecret("icann-reporting-password-string");
String icannReportingPassword = keyring.getIcannReportingPassword();
assertThat(icannReportingPassword).isEqualTo("icann-reporting-password-stringmoo");
}
@Test
public void test_getMarksdbDnlLoginAndPassword() {
void test_getMarksdbDnlLoginAndPassword() {
saveCleartextSecret("marksdb-dnl-login-string");
String marksdbDnlLoginAndPassword = keyring.getMarksdbDnlLoginAndPassword();
assertThat(marksdbDnlLoginAndPassword).isEqualTo("marksdb-dnl-login-stringmoo");
}
@Test
public void test_getMarksdbLordnPassword() {
void test_getMarksdbLordnPassword() {
saveCleartextSecret("marksdb-lordn-password-string");
String marksdbLordnPassword = keyring.getMarksdbLordnPassword();
assertThat(marksdbLordnPassword).isEqualTo("marksdb-lordn-password-stringmoo");
}
@Test
public void test_getMarksdbSmdrlLoginAndPassword() {
void test_getMarksdbSmdrlLoginAndPassword() {
saveCleartextSecret("marksdb-smdrl-login-string");
String marksdbSmdrlLoginAndPassword = keyring.getMarksdbSmdrlLoginAndPassword();
assertThat(marksdbSmdrlLoginAndPassword).isEqualTo("marksdb-smdrl-login-stringmoo");
}
@Test
public void test_getJsonCredential() {
void test_getJsonCredential() {
saveCleartextSecret("json-credential-string");
String jsonCredential = keyring.getJsonCredential();
assertThat(jsonCredential).isEqualTo("json-credential-stringmoo");
}
@@ -27,29 +27,27 @@ import google.registry.testing.BouncyCastleProviderRule;
import java.io.IOException;
import org.bouncycastle.openpgp.PGPKeyPair;
import org.bouncycastle.openpgp.PGPPublicKey;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
@RunWith(JUnit4.class)
/** Unit tests for {@link KmsUpdater} */
public class KmsUpdaterTest {
@Rule
@RegisterExtension
public final AppEngineRule appEngine = AppEngineRule.builder().withDatastoreAndCloudSql().build();
@Rule public final BouncyCastleProviderRule bouncy = new BouncyCastleProviderRule();
@RegisterExtension public final BouncyCastleProviderRule bouncy = new BouncyCastleProviderRule();
private KmsUpdater updater;
@Before
public void setUp() {
@BeforeEach
void beforeEach() {
updater = new KmsUpdater(new FakeKmsConnection());
}
@Test
public void test_setMultipleSecrets() {
void test_setMultipleSecrets() {
updater
.setMarksdbDnlLoginAndPassword("value1")
.setIcannReportingPassword("value2")
@@ -69,7 +67,7 @@ public class KmsUpdaterTest {
}
@Test
public void test_setBrdaReceiverKey() throws Exception {
void test_setBrdaReceiverKey() throws Exception {
updater.setBrdaReceiverPublicKey(KmsTestHelper.getPublicKey()).update();
verifySecretAndSecretRevisionWritten(
@@ -79,7 +77,7 @@ public class KmsUpdaterTest {
}
@Test
public void test_setBrdaSigningKey() throws Exception {
void test_setBrdaSigningKey() throws Exception {
updater.setBrdaSigningKey(KmsTestHelper.getKeyPair()).update();
verifySecretAndSecretRevisionWritten(
@@ -93,7 +91,7 @@ public class KmsUpdaterTest {
}
@Test
public void test_setCloudSqlPassword() {
void test_setCloudSqlPassword() {
updater.setCloudSqlPassword("value1").update();
verifySecretAndSecretRevisionWritten(
@@ -101,7 +99,7 @@ public class KmsUpdaterTest {
}
@Test
public void test_setToolsCloudSqlPassword() {
void test_setToolsCloudSqlPassword() {
updater.setToolsCloudSqlPassword("value1").update();
verifySecretAndSecretRevisionWritten(
@@ -111,7 +109,7 @@ public class KmsUpdaterTest {
}
@Test
public void test_setIcannReportingPassword() {
void test_setIcannReportingPassword() {
updater.setIcannReportingPassword("value1").update();
verifySecretAndSecretRevisionWritten(
@@ -121,7 +119,7 @@ public class KmsUpdaterTest {
}
@Test
public void test_setJsonCredential() {
void test_setJsonCredential() {
updater.setJsonCredential("value1").update();
verifySecretAndSecretRevisionWritten(
@@ -129,7 +127,7 @@ public class KmsUpdaterTest {
}
@Test
public void test_setMarksdbDnlLoginAndPassword() {
void test_setMarksdbDnlLoginAndPassword() {
updater.setMarksdbDnlLoginAndPassword("value1").update();
verifySecretAndSecretRevisionWritten(
@@ -137,7 +135,7 @@ public class KmsUpdaterTest {
}
@Test
public void test_setMarksdbLordnPassword() {
void test_setMarksdbLordnPassword() {
updater.setMarksdbLordnPassword("value1").update();
verifySecretAndSecretRevisionWritten(
@@ -147,7 +145,7 @@ public class KmsUpdaterTest {
}
@Test
public void test_setMarksdbSmdrlLoginAndPassword() {
void test_setMarksdbSmdrlLoginAndPassword() {
updater.setMarksdbSmdrlLoginAndPassword("value1").update();
verifySecretAndSecretRevisionWritten(
@@ -155,7 +153,7 @@ public class KmsUpdaterTest {
}
@Test
public void test_setRdeReceiverKey() throws Exception {
void test_setRdeReceiverKey() throws Exception {
updater.setRdeReceiverPublicKey(KmsTestHelper.getPublicKey()).update();
verifySecretAndSecretRevisionWritten(
@@ -166,7 +164,7 @@ public class KmsUpdaterTest {
}
@Test
public void test_setRdeSigningKey() throws Exception {
void test_setRdeSigningKey() throws Exception {
updater.setRdeSigningKey(KmsTestHelper.getKeyPair()).update();
verifySecretAndSecretRevisionWritten(
@@ -180,7 +178,7 @@ public class KmsUpdaterTest {
}
@Test
public void test_setRdeSshClientPrivateKey() {
void test_setRdeSshClientPrivateKey() {
updater.setRdeSshClientPrivateKey("value1").update();
verifySecretAndSecretRevisionWritten(
@@ -190,7 +188,7 @@ public class KmsUpdaterTest {
}
@Test
public void test_setRdeSshClientPublicKey() {
void test_setRdeSshClientPublicKey() {
updater.setRdeSshClientPublicKey("value1").update();
verifySecretAndSecretRevisionWritten(
@@ -200,7 +198,7 @@ public class KmsUpdaterTest {
}
@Test
public void test_setRdeStagingKey() throws Exception {
void test_setRdeStagingKey() throws Exception {
updater.setRdeStagingKey(KmsTestHelper.getKeyPair()).update();
verifySecretAndSecretRevisionWritten(

Some files were not shown because too many files have changed in this diff Show More