mirror of
https://github.com/google/nomulus.git
synced 2025-04-30 12:07:51 +02:00
Add replay-testing to DomainDeleteFlowTest (#886)
* Minor fixes: - Initialize "requestedByRegistrar" to false (it's non-nullable). - Store test entities (registrar, hosts and contacts) in JPA. * Flyway changes * Add ReplayExtension to DomainDeleteFlowTest * Check in latest ER diagrams
This commit is contained in:
parent
84b9af5acc
commit
4e799c4964
4 changed files with 54 additions and 26 deletions
|
@ -96,17 +96,24 @@ import google.registry.model.transfer.DomainTransferData;
|
||||||
import google.registry.model.transfer.TransferResponse;
|
import google.registry.model.transfer.TransferResponse;
|
||||||
import google.registry.model.transfer.TransferStatus;
|
import google.registry.model.transfer.TransferStatus;
|
||||||
import google.registry.persistence.VKey;
|
import google.registry.persistence.VKey;
|
||||||
|
import google.registry.testing.ReplayExtension;
|
||||||
import google.registry.testing.TaskQueueHelper.TaskMatcher;
|
import google.registry.testing.TaskQueueHelper.TaskMatcher;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import org.joda.money.Money;
|
import org.joda.money.Money;
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
import org.joda.time.Duration;
|
import org.joda.time.Duration;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Order;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||||
|
|
||||||
/** Unit tests for {@link DomainDeleteFlow}. */
|
/** Unit tests for {@link DomainDeleteFlow}. */
|
||||||
class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow, DomainBase> {
|
class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow, DomainBase> {
|
||||||
|
|
||||||
|
@Order(value = Order.DEFAULT - 2)
|
||||||
|
@RegisterExtension
|
||||||
|
final ReplayExtension replayExtension = new ReplayExtension(clock);
|
||||||
|
|
||||||
private DomainBase domain;
|
private DomainBase domain;
|
||||||
private HistoryEntry earlierHistoryEntry;
|
private HistoryEntry earlierHistoryEntry;
|
||||||
|
|
||||||
|
@ -137,6 +144,7 @@ class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow, Domain
|
||||||
persistResource(createAutorenewBillingEvent("TheRegistrar").build());
|
persistResource(createAutorenewBillingEvent("TheRegistrar").build());
|
||||||
PollMessage.Autorenew autorenewPollMessage =
|
PollMessage.Autorenew autorenewPollMessage =
|
||||||
persistResource(createAutorenewPollMessage("TheRegistrar").build());
|
persistResource(createAutorenewPollMessage("TheRegistrar").build());
|
||||||
|
|
||||||
domain =
|
domain =
|
||||||
persistResource(
|
persistResource(
|
||||||
domain
|
domain
|
||||||
|
@ -144,6 +152,7 @@ class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow, Domain
|
||||||
.setAutorenewBillingEvent(autorenewBillingEvent.createVKey())
|
.setAutorenewBillingEvent(autorenewBillingEvent.createVKey())
|
||||||
.setAutorenewPollMessage(autorenewPollMessage.createVKey())
|
.setAutorenewPollMessage(autorenewPollMessage.createVKey())
|
||||||
.build());
|
.build());
|
||||||
|
|
||||||
assertTransactionalFlow(true);
|
assertTransactionalFlow(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,15 +160,20 @@ class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow, Domain
|
||||||
// Persist a linked contact.
|
// Persist a linked contact.
|
||||||
ContactResource contact = persistActiveContact("sh8013");
|
ContactResource contact = persistActiveContact("sh8013");
|
||||||
domain =
|
domain =
|
||||||
newDomainBase(getUniqueIdFromCommand())
|
persistResource(
|
||||||
.asBuilder()
|
newDomainBase(getUniqueIdFromCommand())
|
||||||
.setCreationTimeForTest(TIME_BEFORE_FLOW)
|
.asBuilder()
|
||||||
.setRegistrant(contact.createVKey())
|
.setCreationTimeForTest(TIME_BEFORE_FLOW)
|
||||||
.setRegistrationExpirationTime(expirationTime)
|
.setRegistrant(contact.createVKey())
|
||||||
.build();
|
.setRegistrationExpirationTime(expirationTime)
|
||||||
|
.build());
|
||||||
earlierHistoryEntry =
|
earlierHistoryEntry =
|
||||||
persistResource(
|
persistResource(
|
||||||
new HistoryEntry.Builder().setType(DOMAIN_CREATE).setParent(domain).build());
|
new HistoryEntry.Builder()
|
||||||
|
.setType(DOMAIN_CREATE)
|
||||||
|
.setParent(domain)
|
||||||
|
.setModificationTime(clock.nowUtc())
|
||||||
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpGracePeriods(GracePeriod... gracePeriods) {
|
private void setUpGracePeriods(GracePeriod... gracePeriods) {
|
||||||
|
@ -208,7 +222,14 @@ class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow, Domain
|
||||||
|
|
||||||
private void assertAutorenewClosedAndCancellationCreatedFor(
|
private void assertAutorenewClosedAndCancellationCreatedFor(
|
||||||
BillingEvent.OneTime graceBillingEvent, HistoryEntry historyEntryDomainDelete) {
|
BillingEvent.OneTime graceBillingEvent, HistoryEntry historyEntryDomainDelete) {
|
||||||
DateTime eventTime = clock.nowUtc();
|
assertAutorenewClosedAndCancellationCreatedFor(
|
||||||
|
graceBillingEvent, historyEntryDomainDelete, clock.nowUtc());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertAutorenewClosedAndCancellationCreatedFor(
|
||||||
|
BillingEvent.OneTime graceBillingEvent,
|
||||||
|
HistoryEntry historyEntryDomainDelete,
|
||||||
|
DateTime eventTime) {
|
||||||
assertBillingEvents(
|
assertBillingEvents(
|
||||||
createAutorenewBillingEvent("TheRegistrar").setRecurrenceEndTime(eventTime).build(),
|
createAutorenewBillingEvent("TheRegistrar").setRecurrenceEndTime(eventTime).build(),
|
||||||
graceBillingEvent,
|
graceBillingEvent,
|
||||||
|
@ -293,7 +314,11 @@ class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow, Domain
|
||||||
setUpSuccessfulTest();
|
setUpSuccessfulTest();
|
||||||
setUpGracePeriods(
|
setUpGracePeriods(
|
||||||
GracePeriod.create(
|
GracePeriod.create(
|
||||||
GracePeriodStatus.ADD, domain.getRepoId(), TIME_BEFORE_FLOW.plusDays(1), "foo", null));
|
GracePeriodStatus.ADD,
|
||||||
|
domain.getRepoId(),
|
||||||
|
TIME_BEFORE_FLOW.plusDays(1),
|
||||||
|
"TheRegistrar",
|
||||||
|
null));
|
||||||
dryRunFlowAssertResponse(loadFile("generic_success_response.xml"));
|
dryRunFlowAssertResponse(loadFile("generic_success_response.xml"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -398,7 +423,7 @@ class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow, Domain
|
||||||
GracePeriodStatus.TRANSFER,
|
GracePeriodStatus.TRANSFER,
|
||||||
domain.getRepoId(),
|
domain.getRepoId(),
|
||||||
TIME_BEFORE_FLOW.plusDays(1),
|
TIME_BEFORE_FLOW.plusDays(1),
|
||||||
"foo",
|
"NewRegistrar",
|
||||||
null));
|
null));
|
||||||
// We should see exactly one poll message, which is for the autorenew 1 month in the future.
|
// We should see exactly one poll message, which is for the autorenew 1 month in the future.
|
||||||
assertPollMessages(createAutorenewPollMessage("TheRegistrar").build());
|
assertPollMessages(createAutorenewPollMessage("TheRegistrar").build());
|
||||||
|
@ -730,11 +755,11 @@ class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow, Domain
|
||||||
.setNameservers(ImmutableSet.of(host.createVKey()))
|
.setNameservers(ImmutableSet.of(host.createVKey()))
|
||||||
.setDeletionTime(START_OF_TIME)
|
.setDeletionTime(START_OF_TIME)
|
||||||
.build());
|
.build());
|
||||||
clock.advanceOneMilli();
|
DateTime eventTime = clock.nowUtc();
|
||||||
runFlowAssertResponse(loadFile("generic_success_response.xml"));
|
runFlowAssertResponse(loadFile("generic_success_response.xml"));
|
||||||
assertDnsTasksEnqueued("example.tld");
|
assertDnsTasksEnqueued("example.tld");
|
||||||
assertAutorenewClosedAndCancellationCreatedFor(
|
assertAutorenewClosedAndCancellationCreatedFor(
|
||||||
graceBillingEvent, getOnlyHistoryEntryOfType(domain, DOMAIN_DELETE));
|
graceBillingEvent, getOnlyHistoryEntryOfType(domain, DOMAIN_DELETE), eventTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -638,11 +638,13 @@ public class DatabaseHelper {
|
||||||
DateTime requestTime,
|
DateTime requestTime,
|
||||||
DateTime expirationTime,
|
DateTime expirationTime,
|
||||||
DateTime extendedRegistrationExpirationTime) {
|
DateTime extendedRegistrationExpirationTime) {
|
||||||
HistoryEntry historyEntryDomainTransfer = persistResource(
|
HistoryEntry historyEntryDomainTransfer =
|
||||||
new HistoryEntry.Builder()
|
persistResource(
|
||||||
.setType(HistoryEntry.Type.DOMAIN_TRANSFER_REQUEST)
|
new HistoryEntry.Builder()
|
||||||
.setParent(domain)
|
.setType(HistoryEntry.Type.DOMAIN_TRANSFER_REQUEST)
|
||||||
.build());
|
.setModificationTime(tm().transact(() -> tm().getTransactionTime()))
|
||||||
|
.setParent(domain)
|
||||||
|
.build());
|
||||||
BillingEvent.OneTime transferBillingEvent = persistResource(createBillingEventForTransfer(
|
BillingEvent.OneTime transferBillingEvent = persistResource(createBillingEventForTransfer(
|
||||||
domain,
|
domain,
|
||||||
historyEntryDomainTransfer,
|
historyEntryDomainTransfer,
|
||||||
|
@ -1184,6 +1186,7 @@ public class DatabaseHelper {
|
||||||
public static void deleteResource(final Object resource) {
|
public static void deleteResource(final Object resource) {
|
||||||
if (alwaysSaveWithBackup) {
|
if (alwaysSaveWithBackup) {
|
||||||
tm().transact(() -> tm().delete(resource));
|
tm().transact(() -> tm().delete(resource));
|
||||||
|
maybeAdvanceClock();
|
||||||
} else {
|
} else {
|
||||||
transactIfJpaTm(() -> tm().deleteWithoutBackup(resource));
|
transactIfJpaTm(() -> tm().deleteWithoutBackup(resource));
|
||||||
}
|
}
|
||||||
|
|
|
@ -261,7 +261,7 @@ td.section {
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="property_name">generated on</td>
|
<td class="property_name">generated on</td>
|
||||||
<td class="property_value">2020-11-18 21:42:47.876348</td>
|
<td class="property_value">2020-11-24 20:57:00.530791</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="property_name">last flyway file</td>
|
<td class="property_name">last flyway file</td>
|
||||||
|
@ -284,7 +284,7 @@ td.section {
|
||||||
generated on
|
generated on
|
||||||
</text>
|
</text>
|
||||||
<text text-anchor="start" x="4027.94" y="-10.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
<text text-anchor="start" x="4027.94" y="-10.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||||
2020-11-18 21:42:47.876348
|
2020-11-24 20:57:00.530791
|
||||||
</text>
|
</text>
|
||||||
<polygon fill="none" stroke="#888888" points="3940.44,-4 3940.44,-44 4205.44,-44 4205.44,-4 3940.44,-4" /> <!-- allocationtoken_a08ccbef -->
|
<polygon fill="none" stroke="#888888" points="3940.44,-4 3940.44,-44 4205.44,-44 4205.44,-4 3940.44,-4" /> <!-- allocationtoken_a08ccbef -->
|
||||||
<g id="node1" class="node">
|
<g id="node1" class="node">
|
||||||
|
|
|
@ -261,7 +261,7 @@ td.section {
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="property_name">generated on</td>
|
<td class="property_name">generated on</td>
|
||||||
<td class="property_value">2020-11-18 21:42:46.037281</td>
|
<td class="property_value">2020-11-24 20:56:58.3401</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="property_name">last flyway file</td>
|
<td class="property_name">last flyway file</td>
|
||||||
|
@ -274,19 +274,19 @@ td.section {
|
||||||
<svg viewbox="0.00 0.00 4825.18 4553.15" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="erDiagram" style="overflow: hidden; width: 100%; height: 800px"> <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 4549.15)">
|
<svg viewbox="0.00 0.00 4825.18 4553.15" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="erDiagram" style="overflow: hidden; width: 100%; height: 800px"> <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 4549.15)">
|
||||||
<title>SchemaCrawler_Diagram</title>
|
<title>SchemaCrawler_Diagram</title>
|
||||||
<polygon fill="white" stroke="transparent" points="-4,4 -4,-4549.15 4821.18,-4549.15 4821.18,4 -4,4" />
|
<polygon fill="white" stroke="transparent" points="-4,4 -4,-4549.15 4821.18,-4549.15 4821.18,4 -4,4" />
|
||||||
<text text-anchor="start" x="4548.68" y="-29.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
<text text-anchor="start" x="4563.18" y="-29.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||||
generated by
|
generated by
|
||||||
</text>
|
</text>
|
||||||
<text text-anchor="start" x="4631.68" y="-29.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
<text text-anchor="start" x="4646.18" y="-29.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||||
SchemaCrawler 16.10.1
|
SchemaCrawler 16.10.1
|
||||||
</text>
|
</text>
|
||||||
<text text-anchor="start" x="4547.68" y="-10.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
<text text-anchor="start" x="4562.18" y="-10.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||||
generated on
|
generated on
|
||||||
</text>
|
</text>
|
||||||
<text text-anchor="start" x="4631.68" y="-10.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
<text text-anchor="start" x="4646.18" y="-10.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||||
2020-11-18 21:42:46.037281
|
2020-11-24 20:56:58.3401
|
||||||
</text>
|
</text>
|
||||||
<polygon fill="none" stroke="#888888" points="4544.18,-4 4544.18,-44 4809.18,-44 4809.18,-4 4544.18,-4" /> <!-- allocationtoken_a08ccbef -->
|
<polygon fill="none" stroke="#888888" points="4559.18,-4 4559.18,-44 4809.18,-44 4809.18,-4 4559.18,-4" /> <!-- allocationtoken_a08ccbef -->
|
||||||
<g id="node1" class="node">
|
<g id="node1" class="node">
|
||||||
<title>allocationtoken_a08ccbef</title>
|
<title>allocationtoken_a08ccbef</title>
|
||||||
<polygon fill="#ebcef2" stroke="transparent" points="2959.5,-2661.15 2959.5,-2680.15 3158.5,-2680.15 3158.5,-2661.15 2959.5,-2661.15" />
|
<polygon fill="#ebcef2" stroke="transparent" points="2959.5,-2661.15 2959.5,-2680.15 3158.5,-2680.15 3158.5,-2661.15 2959.5,-2661.15" />
|
||||||
|
|
Loading…
Add table
Reference in a new issue