package denominator.route53;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.Map;
import denominator.model.ResourceRecordSet;
import denominator.model.profile.Weighted;
import denominator.model.rdata.AData;
import denominator.model.rdata.CNAMEData;
import static denominator.model.ResourceRecordSets.a;
import static org.assertj.core.api.Assertions.assertThat;
public class EncodeChangesTest {
@Rule
public final ExpectedException thrown = ExpectedException.none();
@Test
public void defaultsTTLTo300() {
ResourceRecordSet<AData>
rrs =
a("www.denominator.io.", Arrays.asList("192.0.2.1", "192.0.2.2"));
assertThat(EncodeChanges.apply(rrs))
.isXmlEqualTo("<ResourceRecordSet>\n"
+ " <Name>www.denominator.io.</Name>\n"
+ " <Type>A</Type>\n"
+ " <TTL>300</TTL>\n"
+ " <ResourceRecords>\n"
+ " <ResourceRecord>\n"
+ " <Value>192.0.2.1</Value>\n"
+ " </ResourceRecord>\n"
+ " <ResourceRecord>\n"
+ " <Value>192.0.2.2</Value>\n"
+ " </ResourceRecord>\n"
+ " </ResourceRecords>\n"
+ "</ResourceRecordSet>");
}
@Test
public void encodeAliasRRSet() {
ResourceRecordSet<AliasTarget>
rrs =
ResourceRecordSet.<AliasTarget>builder().name("fooo.myzone.com.")
.type("A")
.add(AliasTarget.create("Z3I0BTR7N27QRM",
"ipv4-route53recordsetlivetest.adrianc.myzone.com.")).build();
assertThat(EncodeChanges.apply(rrs))
.isXmlEqualTo("<ResourceRecordSet>\n"
+ " <Name>fooo.myzone.com.</Name>\n"
+ " <Type>A</Type>\n"
+ " <AliasTarget>\n"
+ " <HostedZoneId>Z3I0BTR7N27QRM</HostedZoneId>\n"
+ " <DNSName>ipv4-route53recordsetlivetest.adrianc.myzone.com.</DNSName>\n"
+ " <EvaluateTargetHealth>false</EvaluateTargetHealth>\n"
+ " </AliasTarget>\n"
+ "</ResourceRecordSet>");
}
@Test
public void ignoreTTLOnAliasRRSet() {
ResourceRecordSet<AliasTarget>
rrs =
ResourceRecordSet.<AliasTarget>builder().name("fooo.myzone.com.")
.type("A").ttl(600)
.add(AliasTarget.create("Z3I0BTR7N27QRM",
"ipv4-route53recordsetlivetest.adrianc.myzone.com.")).build();
assertThat(EncodeChanges.apply(rrs))
.isXmlEqualTo("<ResourceRecordSet>\n"
+ " <Name>fooo.myzone.com.</Name>\n"
+ " <Type>A</Type>\n"
+ " <AliasTarget>\n"
+ " <HostedZoneId>Z3I0BTR7N27QRM</HostedZoneId>\n"
+ " <DNSName>ipv4-route53recordsetlivetest.adrianc.myzone.com.</DNSName>\n"
+ " <EvaluateTargetHealth>false</EvaluateTargetHealth>\n"
+ " </AliasTarget>\n"
+ "</ResourceRecordSet>");
}
@Test
public void aliasRRSetMissingDNSName() {
thrown.expect(NullPointerException.class);
thrown.expectMessage("missing DNSName in alias target ResourceRecordSet");
Map<String, Object> missingDNSName = new LinkedHashMap<String, Object>();
missingDNSName.put("HostedZoneId", "Z3I0BTR7N27QRM");
ResourceRecordSet<Map<String, Object>> rrs = ResourceRecordSet.<Map<String, Object>>builder()
.name("fooo.myzone.com.").type("A")
.add(missingDNSName).build();
EncodeChanges.apply(rrs);
}
@Test
public void identifierAndWeightedElements() {
ResourceRecordSet<CNAMEData> rrs = ResourceRecordSet.<CNAMEData>builder()
.name("www.denominator.io.")
.type("CNAME")
.qualifier("foobar")
.add(CNAMEData.create("dom1.foo.com."))
.weighted(Weighted.create(1)).build();
assertThat(EncodeChanges.apply(rrs))
.isXmlEqualTo("<ResourceRecordSet>\n"
+ " <Name>www.denominator.io.</Name>\n"
+ " <Type>CNAME</Type>\n"
+ " <SetIdentifier>foobar</SetIdentifier>\n"
+ " <Weight>1</Weight>\n"
+ " <TTL>300</TTL>\n"
+ " <ResourceRecords>\n"
+ " <ResourceRecord>\n"
+ " <Value>dom1.foo.com.</Value>\n"
+ " </ResourceRecord>\n"
+ " </ResourceRecords>\n"
+ "</ResourceRecordSet>");
}
}