package denominator; import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized.Parameter; import denominator.model.ResourceRecordSet; import denominator.model.Zone; import static denominator.assertj.ModelAssertions.assertThat; import static java.lang.String.format; import static org.junit.Assume.assumeFalse; import static org.junit.runners.MethodSorters.NAME_ASCENDING; @FixMethodOrder(NAME_ASCENDING) @RunWith(Live.Write.class) @Live.Write.Profile("roundRobin") public class RoundRobinWriteCommandsLiveTest { @Parameter(0) public DNSApiManager manager; @Parameter(1) public Zone zone; @Parameter(2) public ResourceRecordSet<?> expected; @Test public void test1_putNewRRS() { assumeRRSetAbsent(zone, expected.name(), expected.type()); rrsApi(zone).put(ResourceRecordSet.builder() .name(expected.name()) .type(expected.type()) .ttl(1800) .add(expected.records().get(0)).build()); ResourceRecordSet<?> rrs = rrsApi(zone).getByNameAndType(expected.name(), expected.type()); assertThat(rrs) .hasName(expected.name()) .hasType(expected.type()) .hasTtl(1800) .containsOnlyRecords(expected.records().get(0)); } @Test public void test2_putAddingRData() { rrsApi(zone).put(ResourceRecordSet.builder() .name(expected.name()) .type(expected.type()) .ttl(1800) .add(expected.records().get(0)) .add(expected.records().get(1)).build()); ResourceRecordSet<?> rrs = rrsApi(zone).getByNameAndType(expected.name(), expected.type()); assertThat(rrs) .hasName(expected.name()) .hasType(expected.type()) .hasTtl(1800) .containsOnlyRecords(expected.records().get(0), expected.records().get(1)); } @Test public void test3_putChangingTTL() { rrsApi(zone).put(ResourceRecordSet.builder() .name(expected.name()) .type(expected.type()) .ttl(200000) .add(expected.records().get(0)) .add(expected.records().get(1)).build()); ResourceRecordSet<?> rrs = rrsApi(zone).getByNameAndType(expected.name(), expected.type()); assertThat(rrs) .hasName(expected.name()) .hasType(expected.type()) .hasTtl(200000) .containsOnlyRecords(expected.records().get(0), expected.records().get(1)); } @Test public void test4_putRemovingRData() { rrsApi(zone).put(ResourceRecordSet.builder() .name(expected.name()) .type(expected.type()) .ttl(200000) .add(expected.records().get(0)).build()); ResourceRecordSet<?> rrs = rrsApi(zone).getByNameAndType(expected.name(), expected.type()); assertThat(rrs) .hasName(expected.name()) .hasType(expected.type()) .hasTtl(200000) .containsOnlyRecords(expected.records().get(0)); } @Test public void test5_deleteRRS() { rrsApi(zone).deleteByNameAndType(expected.name(), expected.type()); String failureMessage = format("recordset(%s, %s) still exists in %s", expected.name(), expected.type(), zone); assertThat(rrsApi(zone).getByNameAndType(expected.name(), expected.type())) .overridingErrorMessage(failureMessage) .isNull(); assertThat(allApi(zone).iterateByNameAndType(expected.name(), expected.type())) .overridingErrorMessage(failureMessage) .isEmpty(); // test no exception if re-applied rrsApi(zone).deleteByNameAndType(expected.name(), expected.type()); } // TODO private AllProfileResourceRecordSetApi allApi(Zone zone) { return manager.api().recordSetsInZone(zone.id()); } private ResourceRecordSetApi rrsApi(Zone zone) { return manager.api().basicRecordSetsInZone(zone.id()); } private void assumeRRSetAbsent(Zone zone, String name, String type) { assumeFalse(format("recordset(%s, %s) already exists in %s", name, type, zone), allApi(zone).iterateByNameAndType(name, type).hasNext()); } }