mv com/google/domain/registry google/registry

This change renames directories in preparation for the great package
rename. The repository is now in a broken state because the code
itself hasn't been updated. However this should ensure that git
correctly preserves history for each file.
This commit is contained in:
Justine Tunney 2016-05-13 18:55:08 -04:00
parent a41677aea1
commit 5012893c1d
2396 changed files with 0 additions and 0 deletions

View file

@ -0,0 +1,224 @@
// Copyright 2016 The Domain Registry 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 com.google.domain.registry.flows.poll;
import static com.google.domain.registry.testing.DatastoreHelper.createHistoryEntryForEppResource;
import static com.google.domain.registry.testing.DatastoreHelper.createTld;
import static com.google.domain.registry.testing.DatastoreHelper.newDomainResource;
import static com.google.domain.registry.testing.DatastoreHelper.persistActiveContact;
import static com.google.domain.registry.testing.DatastoreHelper.persistResource;
import static com.google.domain.registry.util.DateTimeUtils.END_OF_TIME;
import com.google.domain.registry.flows.FlowTestCase;
import com.google.domain.registry.flows.poll.PollAckFlow.InvalidMessageIdException;
import com.google.domain.registry.flows.poll.PollAckFlow.MessageDoesNotExistException;
import com.google.domain.registry.flows.poll.PollAckFlow.MissingMessageIdException;
import com.google.domain.registry.flows.poll.PollAckFlow.NotAuthorizedToAckMessageException;
import com.google.domain.registry.model.contact.ContactResource;
import com.google.domain.registry.model.domain.DomainResource;
import com.google.domain.registry.model.poll.PollMessage;
import com.google.domain.registry.testing.ExceptionRule;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
/** Unit tests for {@link PollAckFlow}. */
public class PollAckFlowTest extends FlowTestCase<PollAckFlow> {
/** This is the message id contained in the "poll_ack.xml" test data file. */
private static final long MESSAGE_ID = 3;
private DomainResource domain;
private ContactResource contact;
@Rule
public final ExceptionRule thrown = new ExceptionRule();
@Before
public void setUp() {
setEppInput("poll_ack.xml");
setClientIdForFlow("NewRegistrar");
clock.setTo(DateTime.parse("2011-01-02T01:01:01Z"));
createTld("example");
clock.advanceOneMilli();
contact = persistActiveContact("jd1234");
clock.advanceOneMilli();
domain = persistResource(newDomainResource("test.example", contact));
clock.advanceOneMilli();
}
private void persistOneTimePollMessage(long messageId) {
persistResource(
new PollMessage.OneTime.Builder()
.setId(messageId)
.setClientId(getClientIdForFlow())
.setEventTime(clock.nowUtc().minusDays(1))
.setMsg("Some poll message.")
.setParent(createHistoryEntryForEppResource(domain))
.build());
}
private void persistAutorenewPollMessage(DateTime eventTime, DateTime endTime) {
persistResource(
new PollMessage.Autorenew.Builder()
.setId(MESSAGE_ID)
.setClientId(getClientIdForFlow())
.setEventTime(eventTime)
.setAutorenewEndTime(endTime)
.setMsg("Domain was auto-renewed.")
.setTargetId("example.com")
.setParent(createHistoryEntryForEppResource(domain))
.build());
}
@Test
public void testDryRun() throws Exception {
persistOneTimePollMessage(MESSAGE_ID);
dryRunFlowAssertResponse(readFile("poll_ack_response_empty.xml"));
}
@Test
public void testSuccess_contactPollMessage() throws Exception {
setEppInput("poll_ack_contact.xml");
persistResource(
new PollMessage.OneTime.Builder()
.setId(MESSAGE_ID)
.setClientId(getClientIdForFlow())
.setEventTime(clock.nowUtc().minusDays(1))
.setMsg("Some poll message.")
.setParent(createHistoryEntryForEppResource(contact))
.build());
assertTransactionalFlow(true);
runFlowAssertResponse(readFile("poll_ack_response_empty.xml"));
}
@Test
public void testSuccess_messageOnContactResource() throws Exception {
persistOneTimePollMessage(MESSAGE_ID);
assertTransactionalFlow(true);
runFlowAssertResponse(readFile("poll_ack_response_empty.xml"));
}
@Test
public void testSuccess_recentActiveAutorenew() throws Exception {
persistAutorenewPollMessage(clock.nowUtc().minusMonths(6), END_OF_TIME);
assertTransactionalFlow(true);
runFlowAssertResponse(readFile("poll_ack_response_empty.xml"));
}
@Test
public void testSuccess_oldActiveAutorenew() throws Exception {
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
// ack response wants there to be 4 messages in the queue when the ack comes back.
for (int i = 1; i < 4; i++) {
persistOneTimePollMessage(MESSAGE_ID + i);
}
assertTransactionalFlow(true);
runFlowAssertResponse(readFile("poll_ack_response.xml"));
}
@Test
public void testSuccess_oldInactiveAutorenew() throws Exception {
persistAutorenewPollMessage(clock.nowUtc().minusMonths(6), clock.nowUtc());
assertTransactionalFlow(true);
runFlowAssertResponse(readFile("poll_ack_response_empty.xml"));
}
@Test
public 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);
}
assertTransactionalFlow(true);
runFlowAssertResponse(readFile("poll_ack_response.xml"));
}
@Test
public void testFailure_noSuchMessage() throws Exception {
thrown.expect(
MessageDoesNotExistException.class,
String.format("(1-3-EXAMPLE-4-%d)", MESSAGE_ID));
assertTransactionalFlow(true);
runFlow();
}
@Test
public void testFailure_invalidId_wrongNumberOfComponents() throws Exception {
thrown.expect(InvalidMessageIdException.class);
setEppInput("poll_ack_invalid_id.xml");
assertTransactionalFlow(true);
runFlow();
}
@Test
public void testFailure_invalidId_stringInsteadOfNumeric() throws Exception {
thrown.expect(InvalidMessageIdException.class);
setEppInput("poll_ack_invalid_string_id.xml");
assertTransactionalFlow(true);
runFlow();
}
@Test
public void testFailure_invalidEppResourceClassId() throws Exception {
thrown.expect(InvalidMessageIdException.class);
setEppInput("poll_ack_invalid_eppresource_id.xml");
assertTransactionalFlow(true);
runFlow();
}
@Test
public void testFailure_missingId() throws Exception {
thrown.expect(MissingMessageIdException.class);
setEppInput("poll_ack_missing_id.xml");
assertTransactionalFlow(true);
runFlow();
}
@Test
public void testFailure_differentRegistrar() throws Exception {
thrown.expect(NotAuthorizedToAckMessageException.class);
persistResource(
new PollMessage.OneTime.Builder()
.setId(MESSAGE_ID)
.setClientId("TheRegistrar")
.setEventTime(clock.nowUtc().minusDays(1))
.setMsg("Some poll message.")
.setParent(createHistoryEntryForEppResource(domain))
.build());
assertTransactionalFlow(true);
runFlow();
}
@Test
public void testFailure_messageInFuture() throws Exception {
thrown.expect(
MessageDoesNotExistException.class,
String.format("(1-3-EXAMPLE-4-%d)", MESSAGE_ID));
persistResource(
new PollMessage.OneTime.Builder()
.setId(MESSAGE_ID)
.setClientId(getClientIdForFlow())
.setEventTime(clock.nowUtc().plusDays(1))
.setMsg("Some poll message.")
.setParent(createHistoryEntryForEppResource(domain))
.build());
assertTransactionalFlow(true);
runFlow();
}
}

View file

@ -0,0 +1,232 @@
// Copyright 2016 The Domain Registry 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 com.google.domain.registry.flows.poll;
import static com.google.domain.registry.testing.DatastoreHelper.createHistoryEntryForEppResource;
import static com.google.domain.registry.testing.DatastoreHelper.createTld;
import static com.google.domain.registry.testing.DatastoreHelper.newDomainResource;
import static com.google.domain.registry.testing.DatastoreHelper.persistActiveContact;
import static com.google.domain.registry.testing.DatastoreHelper.persistActiveHost;
import static com.google.domain.registry.testing.DatastoreHelper.persistResource;
import com.google.common.collect.ImmutableList;
import com.google.domain.registry.flows.FlowTestCase;
import com.google.domain.registry.flows.poll.PollRequestFlow.UnexpectedMessageIdException;
import com.google.domain.registry.model.contact.ContactResource;
import com.google.domain.registry.model.domain.DomainResource;
import com.google.domain.registry.model.eppcommon.Trid;
import com.google.domain.registry.model.host.HostResource;
import com.google.domain.registry.model.poll.PendingActionNotificationResponse.DomainPendingActionNotificationResponse;
import com.google.domain.registry.model.poll.PollMessage;
import com.google.domain.registry.model.reporting.HistoryEntry;
import com.google.domain.registry.model.transfer.TransferResponse.ContactTransferResponse;
import com.google.domain.registry.model.transfer.TransferResponse.DomainTransferResponse;
import com.google.domain.registry.model.transfer.TransferStatus;
import com.google.domain.registry.testing.ExceptionRule;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
/** Unit tests for {@link PollRequestFlow}. */
public class PollRequestFlowTest extends FlowTestCase<PollRequestFlow> {
private DomainResource domain;
private ContactResource contact;
private HostResource host;
@Rule
public final ExceptionRule thrown = new ExceptionRule();
@Before
public void setUp() {
setEppInput("poll.xml");
setClientIdForFlow("NewRegistrar");
clock.setTo(DateTime.parse("2011-01-02T01:01:01Z"));
createTld("example");
contact = persistActiveContact("jd1234");
domain = persistResource(newDomainResource("test.example", contact));
host = persistActiveHost("ns1.test.example");
}
@Test
public void testSuccess_domainTransferApproved() throws Exception {
persistResource(
new PollMessage.OneTime.Builder()
.setClientId(getClientIdForFlow())
.setEventTime(clock.nowUtc().minusDays(1))
.setMsg("Transfer approved.")
.setResponseData(ImmutableList.of(new DomainTransferResponse.Builder()
.setFullyQualifiedDomainNameName("test.example")
.setTransferStatus(TransferStatus.SERVER_APPROVED)
.setGainingClientId(getClientIdForFlow())
.setTransferRequestTime(clock.nowUtc().minusDays(5))
.setLosingClientId("TheRegistrar")
.setPendingTransferExpirationTime(clock.nowUtc().minusDays(1))
.setExtendedRegistrationExpirationTime(clock.nowUtc().plusYears(1))
.build()))
.setParent(createHistoryEntryForEppResource(domain))
.build());
assertTransactionalFlow(false);
runFlowAssertResponse(readFile("poll_response_domain_transfer.xml"));
}
@Test
public void testSuccess_contactTransferPending() throws Exception {
clock.setTo(DateTime.parse("2000-06-13T22:00:00.0Z"));
setClientIdForFlow("TheRegistrar");
persistResource(
new PollMessage.OneTime.Builder()
.setId(3L)
.setClientId(getClientIdForFlow())
.setEventTime(clock.nowUtc().minusDays(5))
.setMsg("Transfer requested.")
.setResponseData(ImmutableList.of(new ContactTransferResponse.Builder()
.setContactId("sh8013")
.setTransferStatus(TransferStatus.PENDING)
.setGainingClientId(getClientIdForFlow())
.setTransferRequestTime(clock.nowUtc().minusDays(5))
.setLosingClientId("NewRegistrar")
.setPendingTransferExpirationTime(clock.nowUtc())
.build()))
.setParent(createHistoryEntryForEppResource(contact))
.build());
assertTransactionalFlow(false);
runFlowAssertResponse(readFile("poll_response_contact_transfer.xml"));
}
@Test
public void testSuccess_domainPendingActionComplete() throws Exception {
persistResource(
new PollMessage.OneTime.Builder()
.setClientId(getClientIdForFlow())
.setEventTime(clock.nowUtc().minusDays(1))
.setMsg("Domain deleted.")
.setResponseData(ImmutableList.of(DomainPendingActionNotificationResponse.create(
"test.example", true, Trid.create("ABC-12345", "other-trid"), clock.nowUtc())))
.setParent(createHistoryEntryForEppResource(domain))
.build());
assertTransactionalFlow(false);
runFlowAssertResponse(readFile("poll_response_domain_pending_notification.xml"));
}
@Test
public void testSuccess_domainAutorenewMessage() throws Exception {
persistResource(
new PollMessage.Autorenew.Builder()
.setClientId(getClientIdForFlow())
.setEventTime(clock.nowUtc().minusDays(1))
.setMsg("Domain was auto-renewed.")
.setTargetId("test.example")
.setParent(createHistoryEntryForEppResource(domain))
.build());
assertTransactionalFlow(false);
runFlowAssertResponse(readFile("poll_response_autorenew.xml"));
}
@Test
public void testSuccess_empty() throws Exception {
runFlowAssertResponse(readFile("poll_response_empty.xml"));
}
@Test
public void testSuccess_wrongRegistrar() throws Exception {
persistResource(
new PollMessage.OneTime.Builder()
.setClientId("different client id")
.setEventTime(clock.nowUtc().minusDays(1))
.setMsg("Poll message")
.setParent(createHistoryEntryForEppResource(domain))
.build());
runFlowAssertResponse(readFile("poll_response_empty.xml"));
}
@Test
public void testSuccess_futurePollMessage() throws Exception {
persistResource(
new PollMessage.OneTime.Builder()
.setClientId(getClientIdForFlow())
.setEventTime(clock.nowUtc().plusDays(1))
.setMsg("Poll message")
.setParent(createHistoryEntryForEppResource(domain))
.build());
runFlowAssertResponse(readFile("poll_response_empty.xml"));
}
@Test
public void testSuccess_futureAutorenew() throws Exception {
persistResource(
new PollMessage.Autorenew.Builder()
.setClientId(getClientIdForFlow())
.setEventTime(clock.nowUtc().plusDays(1))
.setMsg("Domain was auto-renewed.")
.setTargetId("target.example")
.setParent(createHistoryEntryForEppResource(domain))
.build());
assertTransactionalFlow(false);
runFlowAssertResponse(readFile("poll_response_empty.xml"));
}
@Test
public 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()
.setClientId("NewRegistrar")
.setModificationTime(clock.nowUtc().minusDays(1))
.setType(HistoryEntry.Type.CONTACT_DELETE)
.setParent(contact)
.build());
persistResource(
new PollMessage.OneTime.Builder()
.setClientId("NewRegistrar")
.setMsg("Deleted contact jd1234")
.setParent(historyEntry)
.setEventTime(clock.nowUtc().minusDays(1))
.build());
assertTransactionalFlow(false);
runFlowAssertResponse(readFile("poll_response_contact_delete.xml"));
}
@Test
public 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()
.setClientId("NewRegistrar")
.setModificationTime(clock.nowUtc().minusDays(1))
.setType(HistoryEntry.Type.HOST_DELETE)
.setParent(host)
.build());
persistResource(
new PollMessage.OneTime.Builder()
.setClientId("NewRegistrar")
.setMsg("Deleted host ns1.test.example")
.setParent(historyEntry)
.setEventTime(clock.nowUtc().minusDays(1))
.build());
assertTransactionalFlow(false);
runFlowAssertResponse(readFile("poll_response_host_delete.xml"));
}
@Test
public void testFailure_messageIdProvided() throws Exception {
thrown.expect(UnexpectedMessageIdException.class);
setEppInput("poll_with_id.xml");
assertTransactionalFlow(false);
runFlow();
}
}

View file

@ -0,0 +1,6 @@
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<poll op="req"/>
<clTRID>ABC-12345</clTRID>
</command>
</epp>

View file

@ -0,0 +1,6 @@
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<poll op="ack" msgID="1-3-EXAMPLE-4-3"/>
<clTRID>ABC-12346</clTRID>
</command>
</epp>

View file

@ -0,0 +1,6 @@
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<poll op="ack" msgID="2-2-ROID-4-3"/>
<clTRID>ABC-12346</clTRID>
</command>
</epp>

View file

@ -0,0 +1,6 @@
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<poll op="ack" msgID="999-1-1-1"/>
<clTRID>ABC-12346</clTRID>
</command>
</epp>

View file

@ -0,0 +1,6 @@
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<poll op="ack" msgID="1-2-3"/>
<clTRID>ABC-12346</clTRID>
</command>
</epp>

View file

@ -0,0 +1,6 @@
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<poll op="ack" msgID="ABC-12345"/>
<clTRID>ABC-12346</clTRID>
</command>
</epp>

View file

@ -0,0 +1,6 @@
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<poll op="ack"/>
<clTRID>ABC-12346</clTRID>
</command>
</epp>

View file

@ -0,0 +1,12 @@
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<result code="1000">
<msg>Command completed successfully</msg>
</result>
<msgQ count="4" id="1-3-EXAMPLE-4-3"/>
<trID>
<clTRID>ABC-12346</clTRID>
<svTRID>server-trid</svTRID>
</trID>
</response>
</epp>

View file

@ -0,0 +1,11 @@
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<result code="1300">
<msg>Command completed successfully; no messages</msg>
</result>
<trID>
<clTRID>ABC-12346</clTRID>
<svTRID>server-trid</svTRID>
</trID>
</response>
</epp>

View file

@ -0,0 +1,22 @@
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<result code="1301">
<msg>Command completed successfully; ack to dequeue</msg>
</result>
<msgQ count="1" id="1-3-EXAMPLE-5-6">
<qDate>2011-01-01T01:01:01Z</qDate>
<msg>Domain was auto-renewed.</msg>
</msgQ>
<resData>
<domain:renData
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name>test.example</domain:name>
<domain:exDate>2012-01-01T01:01:01Z</domain:exDate>
</domain:renData>
</resData>
<trID>
<clTRID>ABC-12345</clTRID>
<svTRID>server-trid</svTRID>
</trID>
</response>
</epp>

View file

@ -0,0 +1,15 @@
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<result code="1301">
<msg>Command completed successfully; ack to dequeue</msg>
</result>
<msgQ count="1" id="2-2-ROID-5-6">
<qDate>2011-01-01T01:01:01Z</qDate>
<msg>Deleted contact jd1234</msg>
</msgQ>
<trID>
<clTRID>ABC-12345</clTRID>
<svTRID>server-trid</svTRID>
</trID>
</response>
</epp>

View file

@ -0,0 +1,25 @@
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<result code="1301">
<msg>Command completed successfully; ack to dequeue</msg>
</result>
<msgQ count="1" id="2-2-ROID-5-3">
<qDate>2000-06-08T22:00:00Z</qDate>
<msg>Transfer requested.</msg>
</msgQ>
<resData>
<contact:trnData xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<contact:id>sh8013</contact:id>
<contact:trStatus>pending</contact:trStatus>
<contact:reID>TheRegistrar</contact:reID>
<contact:reDate>2000-06-08T22:00:00.0Z</contact:reDate>
<contact:acID>NewRegistrar</contact:acID>
<contact:acDate>2000-06-13T22:00:00.0Z</contact:acDate>
</contact:trnData>
</resData>
<trID>
<clTRID>ABC-12345</clTRID>
<svTRID>server-trid</svTRID>
</trID>
</response>
</epp>

View file

@ -0,0 +1,25 @@
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<result code="1301">
<msg>Command completed successfully; ack to dequeue</msg>
</result>
<msgQ count="1" id="1-3-EXAMPLE-5-6">
<qDate>2011-01-01T01:01:01Z</qDate>
<msg>Domain deleted.</msg>
</msgQ>
<resData>
<domain:panData xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name paResult="1">test.example</domain:name>
<domain:paTRID>
<clTRID>ABC-12345</clTRID>
<svTRID>other-trid</svTRID>
</domain:paTRID>
<domain:paDate>2011-01-02T01:01:01.000Z</domain:paDate>
</domain:panData>
</resData>
<trID>
<clTRID>ABC-12345</clTRID>
<svTRID>server-trid</svTRID>
</trID>
</response>
</epp>

View file

@ -0,0 +1,26 @@
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<result code="1301">
<msg>Command completed successfully; ack to dequeue</msg>
</result>
<msgQ count="1" id="1-3-EXAMPLE-5-6">
<qDate>2011-01-01T01:01:01Z</qDate>
<msg>Transfer approved.</msg>
</msgQ>
<resData>
<domain:trnData xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name>test.example</domain:name>
<domain:trStatus>serverApproved</domain:trStatus>
<domain:reID>NewRegistrar</domain:reID>
<domain:reDate>2010-12-28T01:01:01Z</domain:reDate>
<domain:acID>TheRegistrar</domain:acID>
<domain:acDate>2011-01-01T01:01:01Z</domain:acDate>
<domain:exDate>2012-01-02T01:01:01Z</domain:exDate>
</domain:trnData>
</resData>
<trID>
<clTRID>ABC-12345</clTRID>
<svTRID>server-trid</svTRID>
</trID>
</response>
</epp>

View file

@ -0,0 +1,11 @@
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<result code="1300">
<msg>Command completed successfully; no messages</msg>
</result>
<trID>
<clTRID>ABC-12345</clTRID>
<svTRID>server-trid</svTRID>
</trID>
</response>
</epp>

View file

@ -0,0 +1,15 @@
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<result code="1301">
<msg>Command completed successfully; ack to dequeue</msg>
</result>
<msgQ count="1" id="3-4-ROID-5-6">
<qDate>2011-01-01T01:01:01Z</qDate>
<msg>Deleted host ns1.test.example</msg>
</msgQ>
<trID>
<clTRID>ABC-12345</clTRID>
<svTRID>server-trid</svTRID>
</trID>
</response>
</epp>

View file

@ -0,0 +1,6 @@
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<poll op="req" msgID="12345"/>
<clTRID>ABC-12345</clTRID>
</command>
</epp>