diff --git a/core/src/main/java/google/registry/flows/FlowModule.java b/core/src/main/java/google/registry/flows/FlowModule.java index 81749ad9090..99e883d3f47 100644 --- a/core/src/main/java/google/registry/flows/FlowModule.java +++ b/core/src/main/java/google/registry/flows/FlowModule.java @@ -22,7 +22,6 @@ import dagger.Module; import dagger.Provides; import google.registry.flows.picker.FlowPicker; -import google.registry.model.contact.ContactHistory; import google.registry.model.domain.DomainHistory; import google.registry.model.domain.metadata.MetadataExtension; import google.registry.model.eppcommon.AuthInfo; @@ -267,23 +266,6 @@ B makeHistoryEntryBuilder( return builder; } - /** - * Provides a partially filled in {@link ContactHistory.Builder} - * - *

This is not marked with {@link FlowScope} so that each retry gets a fresh one. Otherwise, - * the fact that the builder is one-use would cause NPEs. - */ - @Provides - static ContactHistory.Builder provideContactHistoryBuilder( - Trid trid, - @InputXml byte[] inputXmlBytes, - @Superuser boolean isSuperuser, - @RegistrarId String registrarId, - EppInput eppInput) { - return makeHistoryEntryBuilder( - new ContactHistory.Builder(), trid, inputXmlBytes, isSuperuser, registrarId, eppInput); - } - /** * Provides a partially filled in {@link HostHistory.Builder} * diff --git a/core/src/main/java/google/registry/model/poll/PollMessage.java b/core/src/main/java/google/registry/model/poll/PollMessage.java index 06a9d957cd5..dd2204e0f3f 100644 --- a/core/src/main/java/google/registry/model/poll/PollMessage.java +++ b/core/src/main/java/google/registry/model/poll/PollMessage.java @@ -27,7 +27,6 @@ import google.registry.model.annotations.ExternalMessagingName; import google.registry.model.annotations.IdAllocation; import google.registry.model.contact.Contact; -import google.registry.model.contact.ContactHistory; import google.registry.model.domain.Domain; import google.registry.model.domain.DomainHistory; import google.registry.model.domain.DomainRenewData; @@ -272,12 +271,6 @@ public B setDomainHistoryId(HistoryEntryId historyId) { return thisCastToDerived(); } - public B setContactHistoryId(HistoryEntryId historyId) { - getInstance().contactRepoId = historyId.getRepoId(); - getInstance().contactHistoryRevisionId = historyId.getRevisionId(); - return thisCastToDerived(); - } - public B setHostHistoryId(HistoryEntryId historyId) { getInstance().hostRepoId = historyId.getRepoId(); getInstance().hostHistoryRevisionId = historyId.getRevisionId(); @@ -290,9 +283,6 @@ public B setHistoryEntry(HistoryEntry history) { if (history instanceof DomainHistory) { return setDomainHistoryId(historyId); } - if (history instanceof ContactHistory) { - return setContactHistoryId(historyId); - } if (history instanceof HostHistory) { return setHostHistoryId(historyId); } diff --git a/core/src/main/java/google/registry/model/reporting/HistoryEntry.java b/core/src/main/java/google/registry/model/reporting/HistoryEntry.java index 616c1e646bf..b47a02716f1 100644 --- a/core/src/main/java/google/registry/model/reporting/HistoryEntry.java +++ b/core/src/main/java/google/registry/model/reporting/HistoryEntry.java @@ -23,8 +23,6 @@ import google.registry.model.ImmutableObject; import google.registry.model.UnsafeSerializable; import google.registry.model.annotations.IdAllocation; -import google.registry.model.contact.ContactBase; -import google.registry.model.contact.ContactHistory; import google.registry.model.domain.DomainBase; import google.registry.model.domain.DomainHistory; import google.registry.model.eppcommon.Trid; @@ -348,8 +346,6 @@ public B setRequestedByRegistrar(Boolean requestedByRegistrar) { HistoryEntry.Builder createBuilderForResource(E parent) { if (parent instanceof DomainBase) { return new DomainHistory.Builder().setDomain((DomainBase) parent); - } else if (parent instanceof ContactBase) { - return new ContactHistory.Builder().setContact((ContactBase) parent); } else if (parent instanceof HostBase) { return new HostHistory.Builder().setHost((HostBase) parent); } else { diff --git a/core/src/main/java/google/registry/model/reporting/HistoryEntryDao.java b/core/src/main/java/google/registry/model/reporting/HistoryEntryDao.java index 51d604f6208..1ff7e09b6b5 100644 --- a/core/src/main/java/google/registry/model/reporting/HistoryEntryDao.java +++ b/core/src/main/java/google/registry/model/reporting/HistoryEntryDao.java @@ -25,8 +25,6 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.Streams; import google.registry.model.EppResource; -import google.registry.model.contact.Contact; -import google.registry.model.contact.ContactHistory; import google.registry.model.domain.Domain; import google.registry.model.domain.DomainHistory; import google.registry.model.host.Host; @@ -46,8 +44,6 @@ public class HistoryEntryDao { public static ImmutableMap, Class> RESOURCE_TYPES_TO_HISTORY_TYPES = ImmutableMap.of( - Contact.class, - ContactHistory.class, Domain.class, DomainHistory.class, Host.class, @@ -59,7 +55,6 @@ public static ImmutableList loadAllHistoryObjects( return tm().transact( () -> new ImmutableList.Builder() - .addAll(loadAllHistoryObjects(ContactHistory.class, afterTime, beforeTime)) .addAll(loadAllHistoryObjects(DomainHistory.class, afterTime, beforeTime)) .addAll(loadAllHistoryObjects(HostHistory.class, afterTime, beforeTime)) .build()); @@ -121,7 +116,6 @@ public static Iterable loadHistoryObjectsByRegistrars( return tm().reTransact( () -> Streams.concat( - loadHistoryObjectByRegistrarsInternal(ContactHistory.class, registrarIds), loadHistoryObjectByRegistrarsInternal(DomainHistory.class, registrarIds), loadHistoryObjectByRegistrarsInternal(HostHistory.class, registrarIds)) .sorted(Comparator.comparing(HistoryEntry::getModificationTime)) diff --git a/core/src/test/java/google/registry/beam/resave/ResaveAllEppResourcesPipelineTest.java b/core/src/test/java/google/registry/beam/resave/ResaveAllEppResourcesPipelineTest.java index 592c355323d..cfcaa799cb6 100644 --- a/core/src/test/java/google/registry/beam/resave/ResaveAllEppResourcesPipelineTest.java +++ b/core/src/test/java/google/registry/beam/resave/ResaveAllEppResourcesPipelineTest.java @@ -22,7 +22,6 @@ import static google.registry.testing.DatabaseHelper.loadByEntity; import static google.registry.testing.DatabaseHelper.persistActiveContact; import static google.registry.testing.DatabaseHelper.persistActiveDomain; -import static google.registry.testing.DatabaseHelper.persistContactWithPendingTransfer; import static google.registry.testing.DatabaseHelper.persistDomainWithDependentResources; import static google.registry.testing.DatabaseHelper.persistDomainWithPendingTransfer; import static google.registry.testing.DatabaseHelper.persistNewRegistrars; @@ -89,18 +88,6 @@ void testPipeline_unchangedEntity() { assertThat(loadByEntity(contact)).isEqualTo(contact); } - @Test - void testPipeline_fulfilledContactTransfer() { - Contact contact = persistActiveContact("test123"); - DateTime now = fakeClock.nowUtc(); - contact = persistContactWithPendingTransfer(contact, now, now.plusDays(5), now); - fakeClock.advanceBy(Duration.standardDays(10)); - assertThat(loadByEntity(contact).getStatusValues()).contains(StatusValue.PENDING_TRANSFER); - runPipeline(); - assertThat(loadByEntity(contact).getStatusValues()) - .doesNotContain(StatusValue.PENDING_TRANSFER); - } - @Test void testPipeline_fulfilledDomainTransfer() { options.setFast(true); diff --git a/core/src/test/java/google/registry/beam/wipeout/WipeOutContactHistoryPiiPipelineTest.java b/core/src/test/java/google/registry/beam/wipeout/WipeOutContactHistoryPiiPipelineTest.java deleted file mode 100644 index 32dea845e25..00000000000 --- a/core/src/test/java/google/registry/beam/wipeout/WipeOutContactHistoryPiiPipelineTest.java +++ /dev/null @@ -1,196 +0,0 @@ -// Copyright 2023 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.wipeout; - -import static com.google.common.collect.ImmutableList.toImmutableList; -import static com.google.common.truth.Truth.assertThat; -import static google.registry.model.reporting.HistoryEntry.Type.CONTACT_CREATE; -import static google.registry.persistence.PersistenceModule.TransactionIsolationLevel.TRANSACTION_REPEATABLE_READ; -import static google.registry.testing.DatabaseHelper.loadAllOf; -import static google.registry.testing.DatabaseHelper.newContact; -import static google.registry.testing.DatabaseHelper.persistResource; -import static org.hibernate.cfg.AvailableSettings.ISOLATION; - -import com.google.common.collect.ImmutableList; -import google.registry.beam.TestPipelineExtension; -import google.registry.model.contact.Contact; -import google.registry.model.contact.ContactHistory; -import google.registry.model.contact.ContactPhoneNumber; -import google.registry.model.reporting.HistoryEntryDao; -import google.registry.persistence.transaction.JpaTestExtensions; -import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; -import google.registry.testing.FakeClock; -import org.apache.beam.sdk.options.PipelineOptionsFactory; -import org.joda.time.DateTime; -import org.joda.time.Duration; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; - -/** Unit tests for {@link WipeOutContactHistoryPiiPipeline}. */ -public class WipeOutContactHistoryPiiPipelineTest { - - private static final int MIN_AGE_IN_MONTHS = 18; - private static final DateTimeFormatter DATE_TIME_FORMATTER = - DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); - - private final FakeClock clock = new FakeClock(DateTime.parse("2020-02-02T12:34:56Z")); - private final WipeOutContactHistoryPiiPipelineOptions options = - PipelineOptionsFactory.create().as(WipeOutContactHistoryPiiPipelineOptions.class); - private Contact contact1; - private Contact contact2; - - @RegisterExtension - final JpaIntegrationTestExtension jpa = - new JpaTestExtensions.Builder() - .withClock(clock) - .withProperty(ISOLATION, TRANSACTION_REPEATABLE_READ.name()) - .buildIntegrationTestExtension(); - - @RegisterExtension - final TestPipelineExtension pipeline = - TestPipelineExtension.create().enableAbandonedNodeEnforcement(true); - - @BeforeEach - void beforeEach() { - contact1 = - persistResource( - newContact("my-contact1") - .asBuilder() - .setEmailAddress("test@example.com") - .setFaxNumber( - new ContactPhoneNumber.Builder().setPhoneNumber("+12122122122").build()) - .build()); - contact2 = - persistResource( - newContact("my-contact2") - .asBuilder() - .setEmailAddress("test@example.tld") - .setVoiceNumber( - new ContactPhoneNumber.Builder().setPhoneNumber("+19177199177").build()) - .build()); - // T = 0 month; - persistResource(createHistory(contact1)); - // T = 5 months; - advanceMonths(5); - persistResource(createHistory(contact2)); - // T = 10 months; - advanceMonths(5); - persistResource(createHistory(contact1)); - persistResource(createHistory(contact2)); - // T = 20 months; - advanceMonths(10); - persistResource(createHistory(contact2)); - // T = 30 months; - advanceMonths(10); - options.setCutoffTime(DATE_TIME_FORMATTER.print(clock.nowUtc().minusMonths(MIN_AGE_IN_MONTHS))); - } - - @Test - void testSuccess() { - // Before the pipeline runs, every history entry should have an emali address. - assertThat( - loadAllOf(ContactHistory.class).stream() - .filter(e -> e.getContactBase().get().getEmailAddress() != null) - .count()) - .isEqualTo(5); - // Before the pipeline runs, contact history for contact1 should have fax numbers. - ImmutableList histories = - HistoryEntryDao.loadHistoryObjectsForResource(contact1.createVKey(), ContactHistory.class); - assertThat( - histories.stream().filter(e -> e.getContactBase().get().getFaxNumber() != null).count()) - .isEqualTo(2); - // Before the pipeline runs, contact history for contact2 should have voice numbers. - histories = - HistoryEntryDao.loadHistoryObjectsForResource(contact2.createVKey(), ContactHistory.class); - assertThat( - histories.stream() - .filter(e -> e.getContactBase().get().getVoiceNumber() != null) - .count()) - .isEqualTo(3); - WipeOutContactHistoryPiiPipeline wipeOutContactHistoryPiiPipeline = - new WipeOutContactHistoryPiiPipeline(options); - wipeOutContactHistoryPiiPipeline.run(pipeline).waitUntilFinish(); - histories = - HistoryEntryDao.loadHistoryObjectsForResource(contact1.createVKey(), ContactHistory.class); - assertThat(histories.size()).isEqualTo(2); - ImmutableList wipedEntries = - histories.stream() - .filter(e -> e.getContactBase().get().getEmailAddress() == null) - .collect(toImmutableList()); - // Only the history entry at T = 10 is wiped. The one at T = 10 is over 18 months old, but it - // is the most recent entry, so it is kept. - assertThat(wipedEntries.size()).isEqualTo(1); - assertThat(wipedEntries.get(0).getContactBase().get().getFaxNumber()).isNull(); - // With a new history entry at T = 30, the one at T = 10 is eligible for wipe out. Note the - // current time itself (therefore the cutoff time) has not changed. - persistResource(createHistory(contact1)); - wipeOutContactHistoryPiiPipeline.run(pipeline).waitUntilFinish(); - histories = - HistoryEntryDao.loadHistoryObjectsForResource(contact1.createVKey(), ContactHistory.class); - assertThat(histories.size()).isEqualTo(3); - wipedEntries = - histories.stream() - .filter(e -> e.getContactBase().get().getEmailAddress() == null) - .collect(toImmutableList()); - assertThat(wipedEntries.size()).isEqualTo(2); - // Check that the pipeline deals with multiple contacts correctly. - histories = - HistoryEntryDao.loadHistoryObjectsForResource(contact2.createVKey(), ContactHistory.class); - assertThat(histories.size()).isEqualTo(3); - wipedEntries = - histories.stream() - .filter(e -> e.getContactBase().get().getEmailAddress() == null) - .collect(toImmutableList()); - // Only the history entry at T = 10 is wiped. The one at T = 10 is over 18 months old, but it - // is the most recent entry, so it is kept. - assertThat(wipedEntries.size()).isEqualTo(2); - assertThat(wipedEntries.get(0).getContactBase().get().getVoiceNumber()).isNull(); - assertThat(wipedEntries.get(1).getContactBase().get().getVoiceNumber()).isNull(); - } - - @Test - void testSuccess_dryRun() { - options.setIsDryRun(true); - WipeOutContactHistoryPiiPipeline wipeOutContactHistoryPiiPipeline = - new WipeOutContactHistoryPiiPipeline(options); - wipeOutContactHistoryPiiPipeline.run(pipeline).waitUntilFinish(); - ImmutableList histories = - HistoryEntryDao.loadHistoryObjectsForResource(contact1.createVKey(), ContactHistory.class); - assertThat(histories.size()).isEqualTo(2); - assertThat( - histories.stream() - .filter(e -> e.getContactBase().get().getEmailAddress() == null) - .collect(toImmutableList())) - .isEmpty(); - } - - private ContactHistory createHistory(Contact contact) { - return new ContactHistory.Builder() - .setContact(contact) - .setType(CONTACT_CREATE) - .setRegistrarId("TheRegistrar") - .setModificationTime(clock.nowUtc()) - .build(); - } - - private void advanceMonths(int months) { - DateTime now = clock.nowUtc(); - DateTime next = now.plusMonths(months); - clock.advanceBy(new Duration(now, next)); - } -} diff --git a/core/src/test/java/google/registry/flows/ResourceFlowTestCase.java b/core/src/test/java/google/registry/flows/ResourceFlowTestCase.java index 315cd9108c3..03c1fac8c7a 100644 --- a/core/src/test/java/google/registry/flows/ResourceFlowTestCase.java +++ b/core/src/test/java/google/registry/flows/ResourceFlowTestCase.java @@ -24,13 +24,10 @@ import com.google.common.testing.TestLogHandler; import google.registry.model.EppResource; import google.registry.model.ForeignKeyUtils; -import google.registry.model.contact.ContactBase; -import google.registry.model.contact.ContactHistory; import google.registry.model.domain.DomainBase; import google.registry.model.domain.DomainHistory; import google.registry.model.eppinput.EppInput.ResourceCommandWrapper; import google.registry.model.eppinput.ResourceCommand; -import google.registry.model.host.HostBase; import google.registry.model.host.HostHistory; import google.registry.model.reporting.HistoryEntry; import google.registry.model.tmch.ClaimsList; @@ -131,18 +128,12 @@ protected void assertIcannReportingActivityFieldLogged(String fieldName) { protected void assertLastHistoryContainsResource(EppResource resource) { HistoryEntry historyEntry = Iterables.getLast(DatabaseHelper.getHistoryEntries(resource)); - if (resource instanceof ContactBase) { - ContactHistory contactHistory = (ContactHistory) historyEntry; - // Don't use direct equals comparison since one might be a subclass of the other - assertAboutImmutableObjects() - .that(contactHistory.getContactBase().get()) - .hasFieldsEqualTo(resource); - } else if (resource instanceof DomainBase) { + if (resource instanceof DomainBase) { DomainHistory domainHistory = (DomainHistory) historyEntry; assertAboutImmutableObjects() .that(domainHistory.getDomainBase().get()) .isEqualExceptFields(resource, "gracePeriods", "dsData", "nsHosts"); - } else if (resource instanceof HostBase) { + } else { HostHistory hostHistory = (HostHistory) historyEntry; // Don't use direct equals comparison since one might be a subclass of the other assertAboutImmutableObjects() diff --git a/core/src/test/java/google/registry/flows/poll/PollAckFlowTest.java b/core/src/test/java/google/registry/flows/poll/PollAckFlowTest.java index b221dabb8e2..d3ece82ff75 100644 --- a/core/src/test/java/google/registry/flows/poll/PollAckFlowTest.java +++ b/core/src/test/java/google/registry/flows/poll/PollAckFlowTest.java @@ -17,7 +17,6 @@ import static com.google.common.truth.Truth.assertThat; import static google.registry.testing.DatabaseHelper.createHistoryEntryForEppResource; import static google.registry.testing.DatabaseHelper.createTld; -import static google.registry.testing.DatabaseHelper.persistActiveContact; import static google.registry.testing.DatabaseHelper.persistResource; import static google.registry.util.DateTimeUtils.END_OF_TIME; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -28,7 +27,6 @@ import google.registry.flows.poll.PollAckFlow.MessageDoesNotExistException; import google.registry.flows.poll.PollAckFlow.MissingMessageIdException; import google.registry.flows.poll.PollAckFlow.NotAuthorizedToAckMessageException; -import google.registry.model.contact.Contact; import google.registry.model.domain.Domain; import google.registry.model.poll.PollMessage; import google.registry.testing.DatabaseHelper; @@ -43,7 +41,6 @@ class PollAckFlowTest extends FlowTestCase { private static final long MESSAGE_ID = 3; private Domain domain; - private Contact contact; @BeforeEach void setUp() { @@ -51,8 +48,7 @@ void setUp() { clock.setTo(DateTime.parse("2011-01-02T01:01:01Z")); setRegistrarIdForFlow("NewRegistrar"); createTld("example"); - contact = persistActiveContact("jd1234"); - domain = persistResource(DatabaseHelper.newDomain("test.example", contact)); + domain = persistResource(DatabaseHelper.newDomain("test.example")); } private void persistOneTimePollMessage(long messageId) { @@ -85,43 +81,6 @@ void testDryRun() throws Exception { dryRunFlowAssertResponse(loadFile("poll_ack_response_empty.xml")); } - @Test - void testSuccess_contactPollMessage() throws Exception { - setEppInput("poll_ack.xml", ImmutableMap.of("MSGID", "3-2011")); - persistResource( - new PollMessage.OneTime.Builder() - .setId(MESSAGE_ID) - .setRegistrarId(getRegistrarIdForFlow()) - .setEventTime(clock.nowUtc().minusDays(1)) - .setMsg("Some poll message.") - .setHistoryEntry(createHistoryEntryForEppResource(contact)) - .build()); - assertMutatingFlow(true); - runFlowAssertResponse(loadFile("poll_ack_response_empty.xml")); - } - - @Test - void testFailure_contactPollMessage_withIncorrectYearField() throws Exception { - setEppInput("poll_ack.xml", ImmutableMap.of("MSGID", "3-1999")); - persistResource( - new PollMessage.OneTime.Builder() - .setId(MESSAGE_ID) - .setRegistrarId(getRegistrarIdForFlow()) - .setEventTime(clock.nowUtc().minusDays(1)) - .setMsg("Some poll message.") - .setHistoryEntry(createHistoryEntryForEppResource(contact)) - .build()); - assertMutatingFlow(true); - assertThrows(MessageDoesNotExistException.class, this::runFlow); - } - - @Test - void testSuccess_messageOnContact() throws Exception { - persistOneTimePollMessage(MESSAGE_ID); - assertMutatingFlow(true); - runFlowAssertResponse(loadFile("poll_ack_response_empty.xml")); - } - @Test void testSuccess_recentActiveAutorenew() throws Exception { setEppInput("poll_ack.xml", ImmutableMap.of("MSGID", "3-2010")); @@ -184,21 +143,6 @@ void testFailure_invalidId_tooManyComponents() throws Exception { assertThrows(InvalidMessageIdException.class, this::runFlow); } - @Test - void testFailure_contactPollMessage_withMissingYearField() throws Exception { - setEppInput("poll_ack.xml", ImmutableMap.of("MSGID", "3")); - persistResource( - new PollMessage.OneTime.Builder() - .setId(MESSAGE_ID) - .setRegistrarId(getRegistrarIdForFlow()) - .setEventTime(clock.nowUtc().minusDays(1)) - .setMsg("Some poll message.") - .setHistoryEntry(createHistoryEntryForEppResource(contact)) - .build()); - assertMutatingFlow(true); - assertThrows(InvalidMessageIdException.class, this::runFlow); - } - @Test void testFailure_invalidId_stringInsteadOfNumeric() throws Exception { setEppInput("poll_ack.xml", ImmutableMap.of("MSGID", "ABC-12345")); diff --git a/core/src/test/java/google/registry/flows/poll/PollRequestFlowTest.java b/core/src/test/java/google/registry/flows/poll/PollRequestFlowTest.java index 94ce93735ab..ad4ae6722dd 100644 --- a/core/src/test/java/google/registry/flows/poll/PollRequestFlowTest.java +++ b/core/src/test/java/google/registry/flows/poll/PollRequestFlowTest.java @@ -16,7 +16,6 @@ import static google.registry.testing.DatabaseHelper.createHistoryEntryForEppResource; import static google.registry.testing.DatabaseHelper.createTld; -import static google.registry.testing.DatabaseHelper.persistActiveContact; import static google.registry.testing.DatabaseHelper.persistActiveHost; import static google.registry.testing.DatabaseHelper.persistNewRegistrar; import static google.registry.testing.DatabaseHelper.persistResource; @@ -27,8 +26,6 @@ import google.registry.flows.EppException; import google.registry.flows.FlowTestCase; import google.registry.flows.poll.PollRequestFlow.UnexpectedMessageIdException; -import google.registry.model.contact.Contact; -import google.registry.model.contact.ContactHistory; import google.registry.model.domain.Domain; import google.registry.model.eppcommon.Trid; import google.registry.model.host.Host; @@ -36,7 +33,6 @@ import google.registry.model.poll.PendingActionNotificationResponse.DomainPendingActionNotificationResponse; import google.registry.model.poll.PollMessage; import google.registry.model.reporting.HistoryEntry; -import google.registry.model.transfer.TransferResponse.ContactTransferResponse; import google.registry.model.transfer.TransferResponse.DomainTransferResponse; import google.registry.model.transfer.TransferStatus; import google.registry.testing.DatabaseHelper; @@ -48,7 +44,6 @@ class PollRequestFlowTest extends FlowTestCase { private Domain domain; - private Contact contact; private Host host; @BeforeEach @@ -58,8 +53,7 @@ void setUp() { setRegistrarIdForFlow("NewRegistrar"); createTld("example"); persistNewRegistrar("BadRegistrar"); - contact = persistActiveContact("jd1234"); - domain = persistResource(DatabaseHelper.newDomain("test.example", contact)); + domain = persistResource(DatabaseHelper.newDomain("test.example")); host = persistActiveHost("ns1.test.example"); } @@ -99,31 +93,6 @@ void testSuccess_clTridNotSpecified() throws Exception { runFlowAssertResponse(loadFile("poll_response_domain_transfer_no_cltrid.xml")); } - @Test - void testSuccess_contactTransferPending() throws Exception { - setRegistrarIdForFlow("TheRegistrar"); - persistResource( - new PollMessage.OneTime.Builder() - .setId(3L) - .setRegistrarId(getRegistrarIdForFlow()) - .setEventTime(clock.nowUtc().minusDays(5)) - .setMsg("Transfer requested.") - .setResponseData( - ImmutableList.of( - new ContactTransferResponse.Builder() - .setContactId("sh8013") - .setTransferStatus(TransferStatus.PENDING) - .setGainingRegistrarId(getRegistrarIdForFlow()) - .setTransferRequestTime(clock.nowUtc().minusDays(5)) - .setLosingRegistrarId("NewRegistrar") - .setPendingTransferExpirationTime(clock.nowUtc()) - .build())) - .setHistoryEntry(createHistoryEntryForEppResource(contact)) - .build()); - assertMutatingFlow(false); - runFlowAssertResponse(loadFile("poll_response_contact_transfer.xml")); - } - @Test void testSuccess_domainPendingActionComplete() throws Exception { persistResource( @@ -225,29 +194,6 @@ void testSuccess_futureAutorenew() throws Exception { runFlowAssertResponse(loadFile("poll_response_empty.xml")); } - @Test - 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 ContactHistory.Builder() - .setRegistrarId("NewRegistrar") - .setModificationTime(clock.nowUtc().minusDays(1)) - .setType(HistoryEntry.Type.CONTACT_DELETE) - .setContact(contact) - .build()); - persistResource( - new PollMessage.OneTime.Builder() - .setRegistrarId("NewRegistrar") - .setMsg("Deleted contact jd1234") - .setHistoryEntry(historyEntry) - .setEventTime(clock.nowUtc().minusDays(1)) - .build()); - assertMutatingFlow(false); - runFlowAssertResponse(loadFile("poll_response_contact_delete.xml")); - } - @Test void testSuccess_hostDelete() throws Exception { // Host delete poll messages do not have any response data, so ensure that no diff --git a/core/src/test/java/google/registry/model/poll/PollMessageExternalKeyConverterTest.java b/core/src/test/java/google/registry/model/poll/PollMessageExternalKeyConverterTest.java index 662bab0347e..1b10e21bfb9 100644 --- a/core/src/test/java/google/registry/model/poll/PollMessageExternalKeyConverterTest.java +++ b/core/src/test/java/google/registry/model/poll/PollMessageExternalKeyConverterTest.java @@ -18,7 +18,6 @@ import static google.registry.model.poll.PollMessageExternalKeyConverter.makePollMessageExternalId; import static google.registry.model.poll.PollMessageExternalKeyConverter.parsePollMessageExternalId; import static google.registry.testing.DatabaseHelper.createTld; -import static google.registry.testing.DatabaseHelper.persistActiveContact; import static google.registry.testing.DatabaseHelper.persistActiveDomain; import static google.registry.testing.DatabaseHelper.persistActiveHost; import static google.registry.testing.DatabaseHelper.persistResource; @@ -83,23 +82,6 @@ void testSuccess_domain() { assertVKeysEqual(parsePollMessageExternalId("5-2007"), pollMessage.createVKey()); } - @Test - void testSuccess_contact() { - historyEntry = - persistResource( - DatabaseHelper.createHistoryEntryForEppResource(persistActiveContact("tim"))); - PollMessage.OneTime pollMessage = - persistResource( - new PollMessage.OneTime.Builder() - .setRegistrarId("TheRegistrar") - .setEventTime(clock.nowUtc()) - .setMsg("Test poll message") - .setHistoryEntry(historyEntry) - .build()); - assertThat(makePollMessageExternalId(pollMessage)).isEqualTo("7-2007"); - assertVKeysEqual(parsePollMessageExternalId("7-2007"), pollMessage.createVKey()); - } - @Test void testSuccess_host() { historyEntry = diff --git a/core/src/test/java/google/registry/model/reporting/HistoryEntryTest.java b/core/src/test/java/google/registry/model/reporting/HistoryEntryTest.java index 30f68b3452c..823b00dc662 100644 --- a/core/src/test/java/google/registry/model/reporting/HistoryEntryTest.java +++ b/core/src/test/java/google/registry/model/reporting/HistoryEntryTest.java @@ -18,7 +18,6 @@ import static google.registry.model.ImmutableObjectSubject.assertAboutImmutableObjects; import static google.registry.persistence.transaction.TransactionManagerFactory.tm; import static google.registry.testing.DatabaseHelper.createTld; -import static google.registry.testing.DatabaseHelper.persistActiveContact; import static google.registry.testing.DatabaseHelper.persistActiveDomain; import static google.registry.testing.DatabaseHelper.persistResource; import static java.nio.charset.StandardCharsets.UTF_8; @@ -26,13 +25,12 @@ import com.google.common.collect.ImmutableSet; import google.registry.model.EntityTestCase; -import google.registry.model.contact.Contact; -import google.registry.model.contact.ContactHistory; import google.registry.model.domain.Domain; import google.registry.model.domain.DomainHistory; import google.registry.model.domain.Period; import google.registry.model.eppcommon.Trid; import google.registry.model.reporting.DomainTransactionRecord.TransactionReportField; +import google.registry.model.reporting.HistoryEntry.Type; import org.joda.time.DateTime; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -40,14 +38,13 @@ /** Unit tests for {@link HistoryEntry}. */ class HistoryEntryTest extends EntityTestCase { + private Domain domain; private DomainHistory domainHistory; - private Contact contact; @BeforeEach void setUp() { createTld("foobar"); - Domain domain = persistActiveDomain("foo.foobar"); - contact = persistActiveContact("someone"); + domain = persistActiveDomain("foo.foobar"); DomainTransactionRecord transactionRecord = new DomainTransactionRecord.Builder() .setTld("foobar") @@ -91,12 +88,12 @@ void testBuilder_resourceMustBeSpecified() { assertThrows( IllegalArgumentException.class, () -> - new ContactHistory.Builder() + new DomainHistory.Builder() .setRevisionId(5L) .setModificationTime(DateTime.parse("1985-07-12T22:30:00Z")) .setRegistrarId("TheRegistrar") .setReason("Reason") - .setType(HistoryEntry.Type.CONTACT_CREATE) + .setType(Type.DOMAIN_CREATE) .build()); assertThat(thrown).hasMessageThat().isEqualTo("EPP resource must be specified"); } @@ -107,10 +104,10 @@ void testBuilder_typeMustBeSpecified() { assertThrows( IllegalArgumentException.class, () -> - new ContactHistory.Builder() - .setContact(contact) + new DomainHistory.Builder() .setRevisionId(5L) - .setModificationTime(DateTime.parse("1985-07-12T22:30:00Z")) + .setDomain(domain) + .setModificationTime(DateTime.parse("1985-07-12T22:30.00Z")) .setRegistrarId("TheRegistrar") .setReason("Reason") .build()); @@ -123,12 +120,12 @@ void testBuilder_modificationTimeMustBeSpecified() { assertThrows( IllegalArgumentException.class, () -> - new ContactHistory.Builder() - .setContact(contact) + new DomainHistory.Builder() .setRevisionId(5L) - .setType(HistoryEntry.Type.CONTACT_CREATE) + .setDomain(domain) + .setType(Type.DOMAIN_CREATE) .setRegistrarId("TheRegistrar") - .setReason("Reason") + .setReason("reason") .build()); assertThat(thrown).hasMessageThat().isEqualTo("Modification time must be specified"); } @@ -139,11 +136,11 @@ void testBuilder_registrarIdMustBeSpecified() { assertThrows( IllegalArgumentException.class, () -> - new ContactHistory.Builder() + new DomainHistory.Builder() .setRevisionId(5L) - .setContact(contact) - .setType(HistoryEntry.Type.CONTACT_CREATE) - .setModificationTime(DateTime.parse("1985-07-12T22:30:00Z")) + .setDomain(domain) + .setType(Type.DOMAIN_CREATE) + .setModificationTime(DateTime.parse("1985-07-12T22:30.00Z")) .setReason("Reason") .build()); assertThat(thrown).hasMessageThat().isEqualTo("Registrar ID must be specified"); @@ -155,11 +152,11 @@ void testBuilder_syntheticHistoryEntries_mustNotBeRequestedByRegistrar() { assertThrows( IllegalArgumentException.class, () -> - new ContactHistory.Builder() - .setContact(contact) + new DomainHistory.Builder() .setRevisionId(5L) - .setType(HistoryEntry.Type.SYNTHETIC) - .setModificationTime(DateTime.parse("1985-07-12T22:30:00Z")) + .setDomain(domain) + .setType(Type.SYNTHETIC) + .setModificationTime(DateTime.parse("1985-07-12T22:30.00Z")) .setRegistrarId("TheRegistrar") .setReason("Reason") .setRequestedByRegistrar(true) diff --git a/core/src/test/java/google/registry/rde/DomainToXjcConverterTest.java b/core/src/test/java/google/registry/rde/DomainToXjcConverterTest.java index 1871f4e6903..fee076ea0a4 100644 --- a/core/src/test/java/google/registry/rde/DomainToXjcConverterTest.java +++ b/core/src/test/java/google/registry/rde/DomainToXjcConverterTest.java @@ -28,17 +28,12 @@ import static java.nio.charset.StandardCharsets.UTF_8; import static org.joda.money.CurrencyUnit.USD; -import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.net.InetAddresses; import google.registry.model.billing.BillingBase.Flag; import google.registry.model.billing.BillingBase.Reason; import google.registry.model.billing.BillingEvent; import google.registry.model.billing.BillingRecurrence; -import google.registry.model.contact.Contact; -import google.registry.model.contact.ContactAddress; -import google.registry.model.contact.ContactPhoneNumber; -import google.registry.model.contact.PostalInfo; import google.registry.model.domain.DesignatedContact; import google.registry.model.domain.Domain; import google.registry.model.domain.DomainAuthInfo; @@ -73,7 +68,6 @@ import google.registry.xjc.secdns.XjcSecdnsDsDataType; import google.registry.xml.XmlException; import java.io.ByteArrayOutputStream; -import java.util.Optional; import org.joda.money.Money; import org.joda.time.DateTime; import org.junit.jupiter.api.BeforeEach; @@ -109,7 +103,7 @@ void testConvertThick() { assertThat( bean.getContacts().stream() .map(input -> String.format("%s %s", input.getType().toString(), input.getValue()))) - .containsExactly("ADMIN 5372808-IRL", "TECH 5372808-TRL"); + .containsExactly("ADMIN contact1234", "TECH contact1234"); assertThat(bean.getCrDate()).isEqualTo(DateTime.parse("1900-01-01T00:00:00Z")); @@ -138,7 +132,7 @@ void testConvertThick() { // name used to generate the IDN variant. // TODO(b/26125498): bean.getOriginalName() - assertThat(bean.getRegistrant()).isEqualTo("5372808-ERL"); + assertThat(bean.getRegistrant()).isEqualTo("contact1234"); // o Zero or more OPTIONAL element to represent // "pendingDelete" sub-statuses, including "redemptionPeriod", @@ -264,26 +258,6 @@ static Domain makeDomain(FakeClock clock) { domain .asBuilder() .setAuthInfo(DomainAuthInfo.create(PasswordAuth.create("secret"))) - .setContacts( - ImmutableSet.of( - DesignatedContact.create( - DesignatedContact.Type.ADMIN, - makeContact( - clock, - "10-Q9JYB4C", - "5372808-IRL", - "be that word our sign in parting", - "BOFH@cat.みんな") - .createVKey()), - DesignatedContact.create( - DesignatedContact.Type.TECH, - makeContact( - clock, - "11-Q9JYB4C", - "5372808-TRL", - "bird or fiend!? i shrieked upstarting", - "bog@cat.みんな") - .createVKey()))) .setCreationRegistrarId("TheRegistrar") .setCreationTimeForTest(DateTime.parse("1900-01-01T00:00:00Z")) .setPersistedCurrentSponsorRegistrarId("TheRegistrar") @@ -298,15 +272,6 @@ static Domain makeDomain(FakeClock clock) { makeHost(clock, "3-Q9JYB4C", "bird.or.devil.みんな", "1.2.3.4").createVKey(), makeHost(clock, "4-Q9JYB4C", "ns2.cat.みんな", "bad:f00d:cafe::15:beef") .createVKey())) - .setRegistrant( - Optional.of( - makeContact( - clock, - "12-Q9JYB4C", - "5372808-ERL", - "(◕‿◕) nevermore", - "prophet@evil.みんな") - .createVKey())) .setRegistrationExpirationTime(DateTime.parse("1930-01-01T00:00:00Z")) .setGracePeriods( ImmutableSet.of( @@ -404,37 +369,6 @@ static Domain makeDomain(FakeClock clock) { return persistResource(domain); } - private static Contact makeContact( - FakeClock clock, String repoId, String id, String name, String email) { - clock.advanceOneMilli(); - return persistEppResource( - new Contact.Builder() - .setContactId(id) - .setEmailAddress(email) - .setPersistedCurrentSponsorRegistrarId("TheRegistrar") - .setCreationRegistrarId("TheRegistrar") - .setCreationTimeForTest(END_OF_TIME) - .setInternationalizedPostalInfo( - new PostalInfo.Builder() - .setType(PostalInfo.Type.INTERNATIONALIZED) - .setName(name) - .setOrg("SINNERS INCORPORATED") - .setAddress( - new ContactAddress.Builder() - .setStreet(ImmutableList.of("123 Example Boulevard")) - .setCity("KOKOMO") - .setState("BM") - .setZip("31337") - .setCountryCode("US") - .build()) - .build()) - .setRepoId(repoId) - .setVoiceNumber( - new ContactPhoneNumber.Builder().setPhoneNumber("+1.2126660420").build()) - .setFaxNumber(new ContactPhoneNumber.Builder().setPhoneNumber("+1.2126660421").build()) - .build()); - } - private static Host makeHost(FakeClock clock, String repoId, String fqhn, String ip) { clock.advanceOneMilli(); return persistEppResource( diff --git a/core/src/test/java/google/registry/testing/DatabaseHelper.java b/core/src/test/java/google/registry/testing/DatabaseHelper.java index 3f8d0b27813..86e18a72241 100644 --- a/core/src/test/java/google/registry/testing/DatabaseHelper.java +++ b/core/src/test/java/google/registry/testing/DatabaseHelper.java @@ -25,7 +25,6 @@ import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertWithMessage; import static google.registry.config.RegistryConfig.getContactAndHostRoidSuffix; -import static google.registry.config.RegistryConfig.getContactAutomaticTransferLength; import static google.registry.model.EppResourceUtils.createDomainRepoId; import static google.registry.model.EppResourceUtils.createRepoId; import static google.registry.model.ImmutableObjectSubject.assertAboutImmutableObjects; @@ -76,7 +75,6 @@ import google.registry.model.console.UserRoles; import google.registry.model.contact.Contact; import google.registry.model.contact.ContactAuthInfo; -import google.registry.model.contact.ContactHistory; import google.registry.model.domain.DesignatedContact; import google.registry.model.domain.DesignatedContact.Type; import google.registry.model.domain.Domain; @@ -536,53 +534,6 @@ public static BillingEvent createBillingEventForTransfer( .build(); } - public static Contact persistContactWithPendingTransfer( - Contact contact, DateTime requestTime, DateTime expirationTime, DateTime now) { - ContactHistory historyEntryContactTransfer = - persistResource( - new ContactHistory.Builder() - .setType(HistoryEntry.Type.CONTACT_TRANSFER_REQUEST) - .setContact(persistResource(contact)) - .setModificationTime(now) - .setRegistrarId(contact.getCurrentSponsorRegistrarId()) - .build()); - return persistResource( - contact - .asBuilder() - .setPersistedCurrentSponsorRegistrarId("TheRegistrar") - .addStatusValue(StatusValue.PENDING_TRANSFER) - .setTransferData( - createContactTransferDataBuilder(requestTime, expirationTime) - .setPendingTransferExpirationTime(now.plus(getContactAutomaticTransferLength())) - .setServerApproveEntities( - historyEntryContactTransfer.getRepoId(), - historyEntryContactTransfer.getRevisionId(), - ImmutableSet.of( - // Pretend it's 3 days since the request - persistResource( - createPollMessageForImplicitTransfer( - contact, - historyEntryContactTransfer, - "NewRegistrar", - requestTime, - expirationTime, - null)) - .createVKey(), - persistResource( - createPollMessageForImplicitTransfer( - contact, - historyEntryContactTransfer, - "TheRegistrar", - requestTime, - expirationTime, - null)) - .createVKey())) - .setTransferRequestTrid( - Trid.create("transferClient-trid", "transferServer-trid")) - .build()) - .build()); - } - public static Domain persistDomainWithDependentResources( String label, String tld,