package denominator.profile; 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 denominator.model.profile.Weighted; import static denominator.assertj.ModelAssertions.assertThat; import static org.junit.Assume.assumeTrue; @RunWith(Live.class) public class WeightedReadOnlyLiveTest { @Parameter public DNSApiManager manager; @Test public void testListRRSs() { for (Zone zone : manager.api().zones()) { for (ResourceRecordSet<?> weightedRRS : weightedApi(zone)) { assertThat(weightedRRS).isValidWeighted(); Weighted weighted = weightedRRS.weighted(); assertThat(weightedApi(zone).supportedWeights()) .contains(weighted.weight()); assertThat(manager.provider().profileToRecordTypes().get("weighted")) .contains(weightedRRS.type()); assertThat(weightedApi(zone).iterateByNameAndType(weightedRRS.name(), weightedRRS.type())) .overridingErrorMessage("could not list by name and type: " + weightedRRS) .isNotEmpty(); ResourceRecordSet<?> byNameTypeAndQualifier = weightedApi(zone).getByNameTypeAndQualifier( weightedRRS.name(), weightedRRS.type(), weightedRRS.qualifier()); assertThat(byNameTypeAndQualifier) .overridingErrorMessage("could not lookup by name, type, and qualifier: " + weightedRRS) .isNotNull() .isEqualTo(weightedRRS); } } } @Test public void testListByName() { for (Zone zone : manager.api().zones()) { Iterator<ResourceRecordSet<?>> weightedRRSIterator = weightedApi(zone).iterator(); if (!weightedRRSIterator.hasNext()) { continue; } ResourceRecordSet<?> weightedRRSet = weightedRRSIterator.next(); String name = weightedRRSet.name(); List<ResourceRecordSet<?>> withName = new ArrayList<ResourceRecordSet<?>>(); withName.add(weightedRRSet); while (weightedRRSIterator.hasNext()) { weightedRRSet = weightedRRSIterator.next(); if (!name.equalsIgnoreCase(weightedRRSet.name())) { break; } withName.add(weightedRRSet); } assertThat(weightedApi(zone).iterateByName(name)).containsAll(withName); break; } } @Test public void testListByNameWhenNotFound() { for (Zone zone : manager.api().zones()) { assertThat(weightedApi(zone).iterateByName("ARGHH." + zone.name())).isEmpty(); break; } } @Test public void testListByNameAndTypeWhenNone() { for (Zone zone : manager.api().zones()) { assertThat(weightedApi(zone).iterateByNameAndType("ARGHH." + zone.name(), "TXT")).isEmpty(); break; } } @Test public void testGetByNameTypeAndQualifierWhenAbsent() { for (Zone zone : manager.api().zones()) { assertThat(weightedApi(zone).getByNameTypeAndQualifier("ARGHH." + zone.name(), "TXT", "Mars")) .isNull(); break; } } // TODO protected WeightedResourceRecordSetApi weightedApi(Zone zone) { WeightedResourceRecordSetApi weightedOption = manager.api().weightedRecordSetsInZone(zone.id()); assumeTrue("weighted not available or not available in zone " + zone, weightedOption != null); return weightedOption; } }