From c23d4f3ba542e62d6f2172c9292708e4f290adb1 Mon Sep 17 00:00:00 2001 From: Michael Muller Date: Fri, 29 May 2020 08:36:57 -0400 Subject: [PATCH] Add createVKey() at the EppResource level (#600) * Add createVKey() at the EppResource level Also convert createKey() to createVKey() to normalize with what we've settled on. --- .../registry/batch/AsyncTaskEnqueuer.java | 2 +- .../google/registry/model/EppResource.java | 4 +++ .../model/contact/ContactResource.java | 2 ++ .../registry/model/domain/DomainBase.java | 5 ++++ .../registry/model/host/HostResource.java | 4 ++- .../DeleteContactsAndHostsActionTest.java | 6 ++--- .../writer/clouddns/CloudDnsWriterTest.java | 2 +- .../writer/dnsupdate/DnsUpdateWriterTest.java | 25 ++++++++++--------- .../flows/domain/DomainDeleteFlowTest.java | 4 +-- .../flows/domain/DomainInfoFlowTest.java | 4 +-- .../flows/domain/DomainUpdateFlowTest.java | 22 ++++++++-------- .../flows/host/HostDeleteFlowTest.java | 2 +- .../registry/flows/host/HostInfoFlowTest.java | 2 +- .../flows/host/HostUpdateFlowTest.java | 2 +- .../registry/model/domain/DomainBaseTest.java | 6 ++--- .../rdap/RdapDomainSearchActionTest.java | 2 +- .../rde/DomainBaseToXjcConverterTest.java | 4 +-- .../java/google/registry/rde/RdeFixtures.java | 4 +-- .../spec11/Spec11EmailUtilsTest.java | 2 +- .../java/google/registry/server/Fixture.java | 14 +++++------ .../registry/testing/DatastoreHelper.java | 2 +- .../testing/FullFieldsTestEntityHelper.java | 4 +-- .../tools/GenerateDnsReportCommandTest.java | 4 +-- .../UniformRapidSuspensionCommandTest.java | 2 +- .../tools/UpdateDomainCommandTest.java | 10 ++++---- .../server/GenerateZoneFilesActionTest.java | 2 +- .../whois/DomainWhoisResponseTest.java | 4 +-- 27 files changed, 80 insertions(+), 66 deletions(-) diff --git a/core/src/main/java/google/registry/batch/AsyncTaskEnqueuer.java b/core/src/main/java/google/registry/batch/AsyncTaskEnqueuer.java index 65f249e76..782eb018b 100644 --- a/core/src/main/java/google/registry/batch/AsyncTaskEnqueuer.java +++ b/core/src/main/java/google/registry/batch/AsyncTaskEnqueuer.java @@ -150,7 +150,7 @@ public final class AsyncTaskEnqueuer { /** Enqueues a task to asynchronously refresh DNS for a renamed host. */ public void enqueueAsyncDnsRefresh(HostResource host, DateTime now) { - VKey hostKey = host.createKey(); + VKey hostKey = host.createVKey(); logger.atInfo().log("Enqueuing async DNS refresh for renamed host %s.", hostKey); addTaskToQueueWithRetry( asyncDnsRefreshPullQueue, diff --git a/core/src/main/java/google/registry/model/EppResource.java b/core/src/main/java/google/registry/model/EppResource.java index 08a2aee20..f9c4622a4 100644 --- a/core/src/main/java/google/registry/model/EppResource.java +++ b/core/src/main/java/google/registry/model/EppResource.java @@ -44,6 +44,7 @@ import google.registry.config.RegistryConfig; import google.registry.model.eppcommon.StatusValue; import google.registry.model.ofy.CommitLogManifest; import google.registry.model.transfer.TransferData; +import google.registry.persistence.VKey; import google.registry.util.NonFinalForTesting; import java.util.Map; import java.util.Map.Entry; @@ -183,6 +184,9 @@ public abstract class EppResource extends BackupGroupRoot implements Buildable { /** Get the foreign key string for this resource. */ public abstract String getForeignKey(); + /** Create the VKey for the specified EPP resource. */ + public abstract VKey createVKey(); + /** Override of {@link Buildable#asBuilder} so that the extra methods are visible. */ @Override public abstract Builder asBuilder(); diff --git a/core/src/main/java/google/registry/model/contact/ContactResource.java b/core/src/main/java/google/registry/model/contact/ContactResource.java index cbdccd8bf..de1308c1d 100644 --- a/core/src/main/java/google/registry/model/contact/ContactResource.java +++ b/core/src/main/java/google/registry/model/contact/ContactResource.java @@ -197,7 +197,9 @@ public class ContactResource extends EppResource }) Disclose disclose; + @Override public VKey createVKey() { + // TODO(mmuller): create symmetric keys if we can ever reload both sides. return VKey.createOfy(ContactResource.class, Key.create(this)); } diff --git a/core/src/main/java/google/registry/model/domain/DomainBase.java b/core/src/main/java/google/registry/model/domain/DomainBase.java index a6767f705..aaabc0ed0 100644 --- a/core/src/main/java/google/registry/model/domain/DomainBase.java +++ b/core/src/main/java/google/registry/model/domain/DomainBase.java @@ -613,6 +613,11 @@ public class DomainBase extends EppResource } } + @Override + public VKey createVKey() { + return VKey.create(DomainBase.class, getRepoId(), Key.create(this)); + } + /** Predicate to determine if a given {@link DesignatedContact} is the registrant. */ private static final Predicate IS_REGISTRANT = (DesignatedContact contact) -> DesignatedContact.Type.REGISTRANT.equals(contact.type); diff --git a/core/src/main/java/google/registry/model/host/HostResource.java b/core/src/main/java/google/registry/model/host/HostResource.java index d51f1ffcb..eb1923541 100644 --- a/core/src/main/java/google/registry/model/host/HostResource.java +++ b/core/src/main/java/google/registry/model/host/HostResource.java @@ -123,7 +123,9 @@ public class HostResource extends EppResource return fullyQualifiedHostName; } - public VKey createKey() { + @Override + public VKey createVKey() { + // TODO(mmuller): create symmetric keys if we can ever reload both sides. return VKey.createOfy(HostResource.class, Key.create(this)); } diff --git a/core/src/test/java/google/registry/batch/DeleteContactsAndHostsActionTest.java b/core/src/test/java/google/registry/batch/DeleteContactsAndHostsActionTest.java index d807cbeb7..19634c362 100644 --- a/core/src/test/java/google/registry/batch/DeleteContactsAndHostsActionTest.java +++ b/core/src/test/java/google/registry/batch/DeleteContactsAndHostsActionTest.java @@ -609,7 +609,7 @@ public class DeleteContactsAndHostsActionTest .hasDeletionTime(END_OF_TIME); DomainBase domain = loadByForeignKey(DomainBase.class, "example.tld", clock.nowUtc()).get(); - assertThat(domain.getNameservers()).contains(hostAfter.createKey()); + assertThat(domain.getNameservers()).contains(hostAfter.createVKey()); HistoryEntry historyEntry = getOnlyHistoryEntryOfType(hostAfter, HOST_DELETE_FAILURE); assertPollMessageFor( historyEntry, @@ -679,7 +679,7 @@ public class DeleteContactsAndHostsActionTest persistResource( newDomainBase("example.tld") .asBuilder() - .setNameservers(ImmutableSet.of(host.createKey())) + .setNameservers(ImmutableSet.of(host.createVKey())) .setDeletionTime(clock.nowUtc().minusDays(5)) .build()); enqueuer.enqueueAsyncDelete( @@ -938,7 +938,7 @@ public class DeleteContactsAndHostsActionTest return persistResource( newDomainBase(domainName, contact) .asBuilder() - .setNameservers(ImmutableSet.of(host.createKey())) + .setNameservers(ImmutableSet.of(host.createVKey())) .build()); } diff --git a/core/src/test/java/google/registry/dns/writer/clouddns/CloudDnsWriterTest.java b/core/src/test/java/google/registry/dns/writer/clouddns/CloudDnsWriterTest.java index 88ba262fb..fd9bbb4b9 100644 --- a/core/src/test/java/google/registry/dns/writer/clouddns/CloudDnsWriterTest.java +++ b/core/src/test/java/google/registry/dns/writer/clouddns/CloudDnsWriterTest.java @@ -294,7 +294,7 @@ public class CloudDnsWriterTest { ImmutableSet.Builder> hostResourceRefBuilder = new ImmutableSet.Builder<>(); for (HostResource nameserver : nameservers) { - hostResourceRefBuilder.add(nameserver.createKey()); + hostResourceRefBuilder.add(nameserver.createVKey()); } return newDomainBase(domainName) diff --git a/core/src/test/java/google/registry/dns/writer/dnsupdate/DnsUpdateWriterTest.java b/core/src/test/java/google/registry/dns/writer/dnsupdate/DnsUpdateWriterTest.java index 87e9de328..40892593b 100644 --- a/core/src/test/java/google/registry/dns/writer/dnsupdate/DnsUpdateWriterTest.java +++ b/core/src/test/java/google/registry/dns/writer/dnsupdate/DnsUpdateWriterTest.java @@ -105,7 +105,7 @@ public class DnsUpdateWriterTest { DomainBase domain = persistActiveDomain("example.tld") .asBuilder() - .setNameservers(ImmutableSet.of(host1.createKey(), host2.createKey())) + .setNameservers(ImmutableSet.of(host1.createVKey(), host2.createVKey())) .build(); persistResource(domain); @@ -126,7 +126,7 @@ public class DnsUpdateWriterTest { DomainBase domain1 = persistActiveDomain("example1.tld") .asBuilder() - .setNameservers(ImmutableSet.of(host1.createKey())) + .setNameservers(ImmutableSet.of(host1.createVKey())) .build(); persistResource(domain1); @@ -134,7 +134,7 @@ public class DnsUpdateWriterTest { DomainBase domain2 = persistActiveDomain("example2.tld") .asBuilder() - .setNameservers(ImmutableSet.of(host2.createKey())) + .setNameservers(ImmutableSet.of(host2.createVKey())) .build(); persistResource(domain2); @@ -150,7 +150,7 @@ public class DnsUpdateWriterTest { DomainBase domain1 = persistActiveDomain("example1.tld") .asBuilder() - .setNameservers(ImmutableSet.of(host1.createKey())) + .setNameservers(ImmutableSet.of(host1.createVKey())) .build(); persistResource(domain1); @@ -158,7 +158,7 @@ public class DnsUpdateWriterTest { DomainBase domain2 = persistActiveDomain("example2.tld") .asBuilder() - .setNameservers(ImmutableSet.of(host2.createKey())) + .setNameservers(ImmutableSet.of(host2.createVKey())) .build(); persistResource(domain2); @@ -181,7 +181,7 @@ public class DnsUpdateWriterTest { DomainBase domain = persistActiveDomain("example.tld") .asBuilder() - .setNameservers(ImmutableSet.of(persistActiveHost("ns1.example.tld").createKey())) + .setNameservers(ImmutableSet.of(persistActiveHost("ns1.example.tld").createVKey())) .setDsData( ImmutableSet.of( DelegationSignerData.create(1, 3, 1, base16().decode("0123456789ABCDEF")))) @@ -206,7 +206,7 @@ public class DnsUpdateWriterTest { persistActiveDomain("example.tld") .asBuilder() .addStatusValue(StatusValue.SERVER_HOLD) - .setNameservers(ImmutableSet.of(persistActiveHost("ns1.example.tld").createKey())) + .setNameservers(ImmutableSet.of(persistActiveHost("ns1.example.tld").createVKey())) .build(); persistResource(domain); @@ -250,7 +250,7 @@ public class DnsUpdateWriterTest { newDomainBase("example.tld") .asBuilder() .addSubordinateHost("ns1.example.tld") - .addNameserver(host.createKey()) + .addNameserver(host.createVKey()) .build()); writer.publishHost("ns1.example.tld"); @@ -289,7 +289,7 @@ public class DnsUpdateWriterTest { persistResource( persistActiveDomain("example.tld") .asBuilder() - .setNameservers(ImmutableSet.of(persistActiveHost("ns1.example.com").createKey())) + .setNameservers(ImmutableSet.of(persistActiveHost("ns1.example.com").createVKey())) .build()); writer.publishHost("ns1.example.tld"); @@ -323,7 +323,8 @@ public class DnsUpdateWriterTest { .asBuilder() .addSubordinateHost("ns1.example.tld") .addNameservers( - ImmutableSet.of(externalNameserver.createKey(), inBailiwickNameserver.createKey())) + ImmutableSet.of( + externalNameserver.createVKey(), inBailiwickNameserver.createVKey())) .build()); writer.publishDomain("example.tld"); @@ -358,7 +359,7 @@ public class DnsUpdateWriterTest { .asBuilder() .addSubordinateHost("ns1.example.tld") .addSubordinateHost("foo.example.tld") - .addNameserver(inBailiwickNameserver.createKey()) + .addNameserver(inBailiwickNameserver.createVKey()) .build()); writer.publishDomain("example.tld"); @@ -382,7 +383,7 @@ public class DnsUpdateWriterTest { DomainBase domain = persistActiveDomain("example.tld") .asBuilder() - .setNameservers(ImmutableSet.of(persistActiveHost("ns1.example.tld").createKey())) + .setNameservers(ImmutableSet.of(persistActiveHost("ns1.example.tld").createVKey())) .build(); persistResource(domain); when(mockResolver.send(any(Message.class))).thenReturn(messageWithResponseCode(Rcode.SERVFAIL)); diff --git a/core/src/test/java/google/registry/flows/domain/DomainDeleteFlowTest.java b/core/src/test/java/google/registry/flows/domain/DomainDeleteFlowTest.java index 174351056..836bf2082 100644 --- a/core/src/test/java/google/registry/flows/domain/DomainDeleteFlowTest.java +++ b/core/src/test/java/google/registry/flows/domain/DomainDeleteFlowTest.java @@ -693,7 +693,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase contactsBuilder = new ImmutableList.Builder<>(); @@ -378,13 +378,13 @@ public class DomainUpdateFlowTest extends ResourceFlowTestCase contact1Key = persistResource( new ContactResource.Builder() @@ -221,7 +221,7 @@ public class DomainBaseTest extends EntityTestCase { assertThat( newDomainBase("example.com") .asBuilder() - .setNameservers(ImmutableSet.of(newHostResource("foo.example.tld").createKey())) + .setNameservers(ImmutableSet.of(newHostResource("foo.example.tld").createVKey())) .build() .nsHosts) .isNotNull(); @@ -269,7 +269,7 @@ public class DomainBaseTest extends EntityTestCase { @Test public void testImplicitStatusValues() { ImmutableSet> nameservers = - ImmutableSet.of(newHostResource("foo.example.tld").createKey()); + ImmutableSet.of(newHostResource("foo.example.tld").createVKey()); StatusValue[] statuses = {StatusValue.OK}; // OK is implicit if there's no other statuses but there are nameservers. assertAboutDomains() diff --git a/core/src/test/java/google/registry/rdap/RdapDomainSearchActionTest.java b/core/src/test/java/google/registry/rdap/RdapDomainSearchActionTest.java index 5b5e35e8c..7019d88d2 100644 --- a/core/src/test/java/google/registry/rdap/RdapDomainSearchActionTest.java +++ b/core/src/test/java/google/registry/rdap/RdapDomainSearchActionTest.java @@ -418,7 +418,7 @@ public class RdapDomainSearchActionTest extends RdapSearchActionTestCase> hostKeys = hostKeysBuilder.build(); // Create all the domains at once, then persist them in parallel, for increased efficiency. diff --git a/core/src/test/java/google/registry/rde/DomainBaseToXjcConverterTest.java b/core/src/test/java/google/registry/rde/DomainBaseToXjcConverterTest.java index 941b4c4d3..d0d82f8a9 100644 --- a/core/src/test/java/google/registry/rde/DomainBaseToXjcConverterTest.java +++ b/core/src/test/java/google/registry/rde/DomainBaseToXjcConverterTest.java @@ -269,9 +269,9 @@ public class DomainBaseToXjcConverterTest { .setNameservers( ImmutableSet.of( makeHostResource(clock, "3-Q9JYB4C", "bird.or.devil.みんな", "1.2.3.4") - .createKey(), + .createVKey(), makeHostResource(clock, "4-Q9JYB4C", "ns2.cat.みんな", "bad:f00d:cafe::15:beef") - .createKey())) + .createVKey())) .setRegistrant( makeContactResource( clock, "12-Q9JYB4C", "5372808-ERL", "(◕‿◕) nevermore", "prophet@evil.みんな") diff --git a/core/src/test/java/google/registry/rde/RdeFixtures.java b/core/src/test/java/google/registry/rde/RdeFixtures.java index eb04237f3..7a46b2a81 100644 --- a/core/src/test/java/google/registry/rde/RdeFixtures.java +++ b/core/src/test/java/google/registry/rde/RdeFixtures.java @@ -116,8 +116,8 @@ final class RdeFixtures { .setIdnTableName("extended_latin") .setNameservers( ImmutableSet.of( - makeHostResource(clock, "bird.or.devil.みんな", "1.2.3.4").createKey(), - makeHostResource(clock, "ns2.cat.みんな", "bad:f00d:cafe::15:beef").createKey())) + makeHostResource(clock, "bird.or.devil.みんな", "1.2.3.4").createVKey(), + makeHostResource(clock, "ns2.cat.みんな", "bad:f00d:cafe::15:beef").createVKey())) .setRegistrationExpirationTime(DateTime.parse("1994-01-01T00:00:00Z")) .setGracePeriods( ImmutableSet.of( diff --git a/core/src/test/java/google/registry/reporting/spec11/Spec11EmailUtilsTest.java b/core/src/test/java/google/registry/reporting/spec11/Spec11EmailUtilsTest.java index e5ca7492f..7dfa3737b 100644 --- a/core/src/test/java/google/registry/reporting/spec11/Spec11EmailUtilsTest.java +++ b/core/src/test/java/google/registry/reporting/spec11/Spec11EmailUtilsTest.java @@ -376,7 +376,7 @@ public class Spec11EmailUtilsTest { return persistResource( newDomainBase(domainName) .asBuilder() - .setNameservers(ImmutableSet.of(host.createKey())) + .setNameservers(ImmutableSet.of(host.createVKey())) .build()); } } diff --git a/core/src/test/java/google/registry/server/Fixture.java b/core/src/test/java/google/registry/server/Fixture.java index b779e77a4..fcbc8d99f 100644 --- a/core/src/test/java/google/registry/server/Fixture.java +++ b/core/src/test/java/google/registry/server/Fixture.java @@ -131,8 +131,8 @@ public enum Fixture { DesignatedContact.create(TECH, justine.createVKey()))) .setNameservers( ImmutableSet.of( - persistActiveHost("ns1.love.xn--q9jyb4c").createKey(), - persistActiveHost("ns2.love.xn--q9jyb4c").createKey())) + persistActiveHost("ns1.love.xn--q9jyb4c").createVKey(), + persistActiveHost("ns2.love.xn--q9jyb4c").createVKey())) .build()); persistResource( @@ -145,11 +145,11 @@ public enum Fixture { DesignatedContact.create(TECH, justine.createVKey()))) .setNameservers( ImmutableSet.of( - persistActiveHost("ns1.linode.com").createKey(), - persistActiveHost("ns2.linode.com").createKey(), - persistActiveHost("ns3.linode.com").createKey(), - persistActiveHost("ns4.linode.com").createKey(), - persistActiveHost("ns5.linode.com").createKey())) + persistActiveHost("ns1.linode.com").createVKey(), + persistActiveHost("ns2.linode.com").createVKey(), + persistActiveHost("ns3.linode.com").createVKey(), + persistActiveHost("ns4.linode.com").createVKey(), + persistActiveHost("ns5.linode.com").createVKey())) .build()); persistResource( diff --git a/core/src/test/java/google/registry/testing/DatastoreHelper.java b/core/src/test/java/google/registry/testing/DatastoreHelper.java index 9b1bc0938..7215525d9 100644 --- a/core/src/test/java/google/registry/testing/DatastoreHelper.java +++ b/core/src/test/java/google/registry/testing/DatastoreHelper.java @@ -139,7 +139,7 @@ public class DatastoreHelper { public static DomainBase newDomainBase(String domainName, HostResource host) { return newDomainBase(domainName) .asBuilder() - .setNameservers(ImmutableSet.of(host.createKey())) + .setNameservers(ImmutableSet.of(host.createVKey())) .build(); } diff --git a/core/src/test/java/google/registry/testing/FullFieldsTestEntityHelper.java b/core/src/test/java/google/registry/testing/FullFieldsTestEntityHelper.java index d806b010e..bafed2c89 100644 --- a/core/src/test/java/google/registry/testing/FullFieldsTestEntityHelper.java +++ b/core/src/test/java/google/registry/testing/FullFieldsTestEntityHelper.java @@ -376,10 +376,10 @@ public final class FullFieldsTestEntityHelper { if ((ns1 != null) || (ns2 != null)) { ImmutableSet.Builder> nsBuilder = new ImmutableSet.Builder<>(); if (ns1 != null) { - nsBuilder.add(ns1.createKey()); + nsBuilder.add(ns1.createVKey()); } if (ns2 != null) { - nsBuilder.add(ns2.createKey()); + nsBuilder.add(ns2.createVKey()); } builder.setNameservers(nsBuilder.build()); } diff --git a/core/src/test/java/google/registry/tools/GenerateDnsReportCommandTest.java b/core/src/test/java/google/registry/tools/GenerateDnsReportCommandTest.java index b8c0edd86..f64eb765b 100644 --- a/core/src/test/java/google/registry/tools/GenerateDnsReportCommandTest.java +++ b/core/src/test/java/google/registry/tools/GenerateDnsReportCommandTest.java @@ -147,7 +147,7 @@ public class GenerateDnsReportCommandTest extends CommandTestCase> hostRefs = new ImmutableSet.Builder<>(); for (HostResource host : hosts) { - hostRefs.add(host.createKey()); + hostRefs.add(host.createVKey()); } persistResource(newDomainBase("evil.tld").asBuilder() .setNameservers(hostRefs.build()) diff --git a/core/src/test/java/google/registry/tools/UpdateDomainCommandTest.java b/core/src/test/java/google/registry/tools/UpdateDomainCommandTest.java index aa57ba938..1b2be39f7 100644 --- a/core/src/test/java/google/registry/tools/UpdateDomainCommandTest.java +++ b/core/src/test/java/google/registry/tools/UpdateDomainCommandTest.java @@ -116,12 +116,12 @@ public class UpdateDomainCommandTest extends EppToolCommandTestCase> nameservers = - ImmutableSet.of(host1.createKey(), host2.createKey()); + ImmutableSet.of(host1.createVKey(), host2.createVKey()); persistResource( newDomainBase("example.tld").asBuilder().setNameservers(nameservers).build()); runCommandForced( @@ -213,7 +213,7 @@ public class UpdateDomainCommandTest extends EppToolCommandTestCase> nameservers = ImmutableSet.of(host.createKey()); + ImmutableSet> nameservers = ImmutableSet.of(host.createVKey()); persistResource( newDomainBase("example.tld") .asBuilder() @@ -257,7 +257,7 @@ public class UpdateDomainCommandTest extends EppToolCommandTestCase> nameservers = ImmutableSet.of(host.createKey()); + ImmutableSet> nameservers = ImmutableSet.of(host.createVKey()); persistResource( newDomainBase("example.tld") .asBuilder() diff --git a/core/src/test/java/google/registry/tools/server/GenerateZoneFilesActionTest.java b/core/src/test/java/google/registry/tools/server/GenerateZoneFilesActionTest.java index 4828183e5..9a2676c59 100644 --- a/core/src/test/java/google/registry/tools/server/GenerateZoneFilesActionTest.java +++ b/core/src/test/java/google/registry/tools/server/GenerateZoneFilesActionTest.java @@ -68,7 +68,7 @@ public class GenerateZoneFilesActionTest extends MapreduceTestCase> nameservers = - ImmutableSet.of(host1.createKey(), host2.createKey()); + ImmutableSet.of(host1.createVKey(), host2.createVKey()); // This domain will have glue records, because it has a subordinate host which is its own // nameserver. None of the other domains should have glue records, because their nameservers are // subordinate to different domains. diff --git a/core/src/test/java/google/registry/whois/DomainWhoisResponseTest.java b/core/src/test/java/google/registry/whois/DomainWhoisResponseTest.java index 2c7e2d339..8b457fde5 100644 --- a/core/src/test/java/google/registry/whois/DomainWhoisResponseTest.java +++ b/core/src/test/java/google/registry/whois/DomainWhoisResponseTest.java @@ -220,8 +220,8 @@ public class DomainWhoisResponseTest { .setEmailAddress("EMAIL@EXAMPLE.tld") .build()); - VKey hostResource1Key = hostResource1.createKey(); - VKey hostResource2Key = hostResource2.createKey(); + VKey hostResource1Key = hostResource1.createVKey(); + VKey hostResource2Key = hostResource2.createVKey(); VKey registrantResourceKey = registrant.createVKey(); VKey adminResourceKey = adminContact.createVKey(); VKey techResourceKey = techContact.createVKey();