mirror of
https://github.com/google/nomulus.git
synced 2025-07-09 04:33:28 +02:00
Add dual write for Registrar (#474)
* Add dual write for Registrar * Use @AlsoLoad to set street field for Cloud SQL * Change email body to use the new streetLine field * Refactored the logic to handle street fields * Simplify postLoad function * Address comments * Add a TODO to remove street * Add test for onLoad and postLoad * Rebase on master
This commit is contained in:
parent
22a879e655
commit
b9c40648d0
14 changed files with 442 additions and 48 deletions
|
@ -0,0 +1,79 @@
|
|||
// Copyright 2020 The Nomulus Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package google.registry.model.eppcommon;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.runners.JUnit4;
|
||||
|
||||
/** Tests for {@link Address}. */
|
||||
@RunWith(JUnit4.class)
|
||||
public class AddressTest {
|
||||
@Test
|
||||
public void onLoad_setsIndividualStreetLinesSuccessfully() {
|
||||
Address address = new Address();
|
||||
address.onLoad(ImmutableList.of("line1", "line2", "line3"));
|
||||
assertThat(address.streetLine1).isEqualTo("line1");
|
||||
assertThat(address.streetLine2).isEqualTo("line2");
|
||||
assertThat(address.streetLine3).isEqualTo("line3");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onLoad_setsOnlyNonNullStreetLines() {
|
||||
Address address = new Address();
|
||||
address.onLoad(ImmutableList.of("line1", "line2"));
|
||||
assertThat(address.streetLine1).isEqualTo("line1");
|
||||
assertThat(address.streetLine2).isEqualTo("line2");
|
||||
assertThat(address.streetLine3).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onLoad_doNothingIfInputIsNull() {
|
||||
Address address = new Address();
|
||||
address.onLoad(null);
|
||||
assertThat(address.streetLine1).isNull();
|
||||
assertThat(address.streetLine2).isNull();
|
||||
assertThat(address.streetLine3).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void postLoad_setsStreetListSuccessfully() {
|
||||
Address address = new Address();
|
||||
address.streetLine1 = "line1";
|
||||
address.streetLine2 = "line2";
|
||||
address.streetLine3 = "line3";
|
||||
address.postLoad();
|
||||
assertThat(address.street).containsExactly("line1", "line2", "line3");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void postLoad_setsOnlyNonNullStreetLines() {
|
||||
Address address = new Address();
|
||||
address.streetLine1 = "line1";
|
||||
address.streetLine2 = "line2";
|
||||
address.postLoad();
|
||||
assertThat(address.street).containsExactly("line1", "line2");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void postLoad_doNothingIfInputIsNull() {
|
||||
Address address = new Address();
|
||||
address.postLoad();
|
||||
assertThat(address.street).isNull();
|
||||
}
|
||||
}
|
|
@ -19,14 +19,17 @@ import google.registry.model.domain.DomainBaseSqlTest;
|
|||
import google.registry.model.registry.RegistryLockDaoTest;
|
||||
import google.registry.persistence.transaction.JpaEntityCoverage;
|
||||
import google.registry.schema.cursor.CursorDaoTest;
|
||||
import google.registry.schema.registrar.RegistrarDaoTest;
|
||||
import google.registry.schema.server.LockDaoTest;
|
||||
import google.registry.schema.tld.PremiumListDaoTest;
|
||||
import google.registry.schema.tld.ReservedListDaoTest;
|
||||
import google.registry.schema.tmch.ClaimsListDaoTest;
|
||||
import google.registry.tools.CreateRegistrarCommandTest;
|
||||
import google.registry.tools.CreateReservedListCommandTest;
|
||||
import google.registry.tools.DomainLockUtilsTest;
|
||||
import google.registry.tools.LockDomainCommandTest;
|
||||
import google.registry.tools.UnlockDomainCommandTest;
|
||||
import google.registry.tools.UpdateRegistrarCommandTest;
|
||||
import google.registry.tools.UpdateReservedListCommandTest;
|
||||
import google.registry.tools.server.CreatePremiumListActionTest;
|
||||
import google.registry.tools.server.UpdatePremiumListActionTest;
|
||||
|
@ -54,6 +57,7 @@ import org.junit.runners.Suite.SuiteClasses;
|
|||
@SuiteClasses({
|
||||
ClaimsListDaoTest.class,
|
||||
CreatePremiumListActionTest.class,
|
||||
CreateRegistrarCommandTest.class,
|
||||
CreateReservedListCommandTest.class,
|
||||
CursorDaoTest.class,
|
||||
DomainLockUtilsTest.class,
|
||||
|
@ -61,12 +65,14 @@ import org.junit.runners.Suite.SuiteClasses;
|
|||
LockDomainCommandTest.class,
|
||||
DomainBaseSqlTest.class,
|
||||
PremiumListDaoTest.class,
|
||||
RegistrarDaoTest.class,
|
||||
RegistryLockDaoTest.class,
|
||||
RegistryLockGetActionTest.class,
|
||||
RegistryLockVerifyActionTest.class,
|
||||
ReservedListDaoTest.class,
|
||||
UnlockDomainCommandTest.class,
|
||||
UpdatePremiumListActionTest.class,
|
||||
UpdateRegistrarCommandTest.class,
|
||||
UpdateReservedListCommandTest.class
|
||||
})
|
||||
public class SqlIntegrationTestSuite {
|
||||
|
|
|
@ -0,0 +1,104 @@
|
|||
// Copyright 2020 The Nomulus Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package google.registry.schema.registrar;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static org.junit.Assert.assertThrows;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import google.registry.model.EntityTestCase;
|
||||
import google.registry.model.registrar.Registrar;
|
||||
import google.registry.model.registrar.RegistrarAddress;
|
||||
import google.registry.persistence.transaction.JpaTestRules;
|
||||
import google.registry.persistence.transaction.JpaTestRules.JpaIntegrationWithCoverageRule;
|
||||
import google.registry.testing.FakeClock;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.runners.JUnit4;
|
||||
|
||||
/** Unit tests for {@link RegistrarDao}. */
|
||||
@RunWith(JUnit4.class)
|
||||
public class RegistrarDaoTest extends EntityTestCase {
|
||||
private final FakeClock fakeClock = new FakeClock();
|
||||
|
||||
@Rule
|
||||
public final JpaIntegrationWithCoverageRule jpaRule =
|
||||
new JpaTestRules.Builder().withClock(fakeClock).buildIntegrationWithCoverageRule();
|
||||
|
||||
private Registrar testRegistrar;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
testRegistrar =
|
||||
new Registrar.Builder()
|
||||
.setType(Registrar.Type.TEST)
|
||||
.setClientId("registrarId")
|
||||
.setRegistrarName("registrarName")
|
||||
.setLocalizedAddress(
|
||||
new RegistrarAddress.Builder()
|
||||
.setStreet(ImmutableList.of("123 Example Boulevard."))
|
||||
.setCity("Williamsburg")
|
||||
.setState("NY")
|
||||
.setZip("11211")
|
||||
.setCountryCode("US")
|
||||
.build())
|
||||
.build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void saveNew_worksSuccessfully() {
|
||||
assertThat(RegistrarDao.checkExists("registrarId")).isFalse();
|
||||
RegistrarDao.saveNew(testRegistrar);
|
||||
assertThat(RegistrarDao.checkExists("registrarId")).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void update_worksSuccessfully() {
|
||||
RegistrarDao.saveNew(testRegistrar);
|
||||
Registrar persisted = RegistrarDao.load("registrarId").get();
|
||||
assertThat(persisted.getRegistrarName()).isEqualTo("registrarName");
|
||||
RegistrarDao.update(persisted.asBuilder().setRegistrarName("changedRegistrarName").build());
|
||||
persisted = RegistrarDao.load("registrarId").get();
|
||||
assertThat(persisted.getRegistrarName()).isEqualTo("changedRegistrarName");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void update_throwsExceptionWhenEntityDoesNotExist() {
|
||||
assertThat(RegistrarDao.checkExists("registrarId")).isFalse();
|
||||
assertThrows(IllegalArgumentException.class, () -> RegistrarDao.update(testRegistrar));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void load_worksSuccessfully() {
|
||||
assertThat(RegistrarDao.checkExists("registrarId")).isFalse();
|
||||
RegistrarDao.saveNew(testRegistrar);
|
||||
Registrar persisted = RegistrarDao.load("registrarId").get();
|
||||
|
||||
assertThat(persisted.getClientId()).isEqualTo("registrarId");
|
||||
assertThat(persisted.getRegistrarName()).isEqualTo("registrarName");
|
||||
assertThat(persisted.getCreationTime()).isEqualTo(fakeClock.nowUtc());
|
||||
assertThat(persisted.getLocalizedAddress())
|
||||
.isEqualTo(
|
||||
new RegistrarAddress.Builder()
|
||||
.setStreet(ImmutableList.of("123 Example Boulevard."))
|
||||
.setCity("Williamsburg")
|
||||
.setState("NY")
|
||||
.setZip("11211")
|
||||
.setCountryCode("US")
|
||||
.build());
|
||||
}
|
||||
}
|
|
@ -33,12 +33,17 @@ import com.google.common.collect.ImmutableMap;
|
|||
import com.google.common.collect.Range;
|
||||
import com.google.common.net.MediaType;
|
||||
import google.registry.model.registrar.Registrar;
|
||||
import google.registry.persistence.transaction.JpaTestRules;
|
||||
import google.registry.persistence.transaction.JpaTestRules.JpaIntegrationWithCoverageRule;
|
||||
import google.registry.schema.registrar.RegistrarDao;
|
||||
import google.registry.testing.CertificateSamples;
|
||||
import google.registry.testing.FakeClock;
|
||||
import java.io.IOException;
|
||||
import java.util.Optional;
|
||||
import org.joda.money.CurrencyUnit;
|
||||
import org.joda.time.DateTime;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.mockito.ArgumentMatchers;
|
||||
import org.mockito.Mock;
|
||||
|
@ -46,6 +51,12 @@ import org.mockito.Mock;
|
|||
/** Unit tests for {@link CreateRegistrarCommand}. */
|
||||
public class CreateRegistrarCommandTest extends CommandTestCase<CreateRegistrarCommand> {
|
||||
|
||||
private final FakeClock fakeClock = new FakeClock();
|
||||
|
||||
@Rule
|
||||
public final JpaIntegrationWithCoverageRule jpaRule =
|
||||
new JpaTestRules.Builder().withClock(fakeClock).buildIntegrationWithCoverageRule();
|
||||
|
||||
@Mock private AppEngineConnection connection;
|
||||
|
||||
@Before
|
||||
|
@ -100,6 +111,28 @@ public class CreateRegistrarCommandTest extends CommandTestCase<CreateRegistrarC
|
|||
eq(new byte[0]));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSuccess_alsoSaveToCloudSql() throws Exception {
|
||||
runCommandForced(
|
||||
"--name=blobio",
|
||||
"--password=\"some_password\"",
|
||||
"--registrar_type=REAL",
|
||||
"--iana_id=8",
|
||||
"--passcode=01234",
|
||||
"--icann_referral_email=foo@bar.test",
|
||||
"--street=\"123 Fake St\"",
|
||||
"--city Fakington",
|
||||
"--state MA",
|
||||
"--zip 00351",
|
||||
"--cc US",
|
||||
"clientz");
|
||||
|
||||
Optional<Registrar> registrar = Registrar.loadByClientId("clientz");
|
||||
assertThat(registrar).isPresent();
|
||||
assertThat(registrar.get().verifyPassword("some_password")).isTrue();
|
||||
assertThat(RegistrarDao.checkExists("clientz")).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSuccess_quotedPassword() throws Exception {
|
||||
runCommandForced(
|
||||
|
|
|
@ -32,16 +32,36 @@ import com.google.common.collect.ImmutableSet;
|
|||
import google.registry.model.registrar.Registrar;
|
||||
import google.registry.model.registrar.Registrar.State;
|
||||
import google.registry.model.registrar.Registrar.Type;
|
||||
import google.registry.persistence.transaction.JpaTestRules;
|
||||
import google.registry.persistence.transaction.JpaTestRules.JpaIntegrationWithCoverageRule;
|
||||
import google.registry.schema.registrar.RegistrarDao;
|
||||
import google.registry.testing.AppEngineRule;
|
||||
import google.registry.testing.FakeClock;
|
||||
import google.registry.util.CidrAddressBlock;
|
||||
import java.util.Optional;
|
||||
import org.joda.money.CurrencyUnit;
|
||||
import org.joda.time.DateTime;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
|
||||
/** Unit tests for {@link UpdateRegistrarCommand}. */
|
||||
public class UpdateRegistrarCommandTest extends CommandTestCase<UpdateRegistrarCommand> {
|
||||
|
||||
private final FakeClock fakeClock = new FakeClock();
|
||||
|
||||
@Rule
|
||||
public final JpaIntegrationWithCoverageRule jpaRule =
|
||||
new JpaTestRules.Builder().withClock(fakeClock).buildIntegrationWithCoverageRule();
|
||||
|
||||
@Test
|
||||
public void testSuccess_alsoUpdateInCloudSql() throws Exception {
|
||||
assertThat(loadRegistrar("NewRegistrar").verifyPassword("some_password")).isFalse();
|
||||
RegistrarDao.saveNew(loadRegistrar("NewRegistrar"));
|
||||
runCommand("--password=some_password", "--force", "NewRegistrar");
|
||||
assertThat(loadRegistrar("NewRegistrar").verifyPassword("some_password")).isTrue();
|
||||
assertThat(RegistrarDao.load("NewRegistrar").get().verifyPassword("some_password")).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSuccess_password() throws Exception {
|
||||
assertThat(loadRegistrar("NewRegistrar").verifyPassword("some_password")).isFalse();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue