package denominator.profile; import org.assertj.core.api.Assertions; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized.Parameter; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import denominator.DNSApiManager; import denominator.Live; import denominator.model.ResourceRecordSet; import denominator.model.Zone; import static denominator.assertj.ModelAssertions.assertThat; import static org.junit.Assume.assumeTrue; @RunWith(Live.class) public class GeoReadOnlyLiveTest { @Parameter public DNSApiManager manager; @Test public void testListRRSs() { for (Zone zone : manager.api().zones()) { for (ResourceRecordSet<?> geoRRS : geoApi(zone)) { assertThat(geoRRS).isValidGeo(); assertThat(manager.provider().profileToRecordTypes().get("geo")).contains(geoRRS.type()); Assertions.assertThat( geoApi(zone).iterateByNameAndType(geoRRS.name(), geoRRS.type())) .overridingErrorMessage("could not list by name and type: " + geoRRS) .isNotEmpty(); ResourceRecordSet<?> byNameTypeAndQualifier = geoApi(zone).getByNameTypeAndQualifier( geoRRS.name(), geoRRS.type(), geoRRS.qualifier()); assertThat(byNameTypeAndQualifier) .overridingErrorMessage("could not lookup by name, type, and qualifier: " + geoRRS) .isNotNull() .isEqualTo(geoRRS); } } } @Test public void testListByName() { for (Zone zone : manager.api().zones()) { Iterator<ResourceRecordSet<?>> geoRRSIterator = geoApi(zone).iterator(); if (!geoRRSIterator.hasNext()) { continue; } ResourceRecordSet<?> geoRRSet = geoRRSIterator.next(); String name = geoRRSet.name(); List<ResourceRecordSet<?>> withName = new ArrayList<ResourceRecordSet<?>>(); withName.add(geoRRSet); while (geoRRSIterator.hasNext()) { geoRRSet = geoRRSIterator.next(); if (!name.equalsIgnoreCase(geoRRSet.name())) { break; } withName.add(geoRRSet); } assertThat(geoApi(zone).iterateByName(name)).containsAll(withName); break; } } @Test public void testListByNameWhenNotFound() { for (Zone zone : manager.api().zones()) { assertThat(geoApi(zone).iterateByName("ARGHH." + zone.name())).isEmpty(); break; } } @Test public void testListByNameAndTypeWhenNone() { for (Zone zone : manager.api().zones()) { assertThat(geoApi(zone).iterateByNameAndType("ARGHH." + zone.name(), "TXT")).isEmpty(); break; } } @Test public void testGetByNameTypeAndQualifierWhenAbsent() { for (Zone zone : manager.api().zones()) { assertThat(geoApi(zone).getByNameTypeAndQualifier("ARGHH." + zone.name(), "TXT", "Mars")) .isNull(); break; } } private GeoResourceRecordSetApi geoApi(Zone zone) { GeoResourceRecordSetApi geoOption = manager.api().geoRecordSetsInZone(zone.id()); assumeTrue("geo not available or not available in zone " + zone, geoOption != null); return geoOption; } }