| Index: tools/telemetry/third_party/gsutilz/third_party/boto/tests/unit/route53/test_connection.py
|
| diff --git a/tools/telemetry/third_party/gsutilz/third_party/boto/tests/unit/route53/test_connection.py b/tools/telemetry/third_party/gsutilz/third_party/boto/tests/unit/route53/test_connection.py
|
| deleted file mode 100755
|
| index d1a8015256f5e5133e2f92a2a73627a2b6b84565..0000000000000000000000000000000000000000
|
| --- a/tools/telemetry/third_party/gsutilz/third_party/boto/tests/unit/route53/test_connection.py
|
| +++ /dev/null
|
| @@ -1,802 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# Copyright (c) 2013 Amazon.com, Inc. or its affiliates. All Rights Reserved
|
| -#
|
| -# Permission is hereby granted, free of charge, to any person obtaining a
|
| -# copy of this software and associated documentation files (the
|
| -# "Software"), to deal in the Software without restriction, including
|
| -# without limitation the rights to use, copy, modify, merge, publish, dis-
|
| -# tribute, sublicense, and/or sell copies of the Software, and to permit
|
| -# persons to whom the Software is furnished to do so, subject to the fol-
|
| -# lowing conditions:
|
| -#
|
| -# The above copyright notice and this permission notice shall be included
|
| -# in all copies or substantial portions of the Software.
|
| -#
|
| -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
| -# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
|
| -# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
|
| -# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
| -# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
| -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
| -# IN THE SOFTWARE.
|
| -#
|
| -from tests.compat import mock
|
| -import re
|
| -import xml.dom.minidom
|
| -from boto.exception import BotoServerError
|
| -from boto.route53.connection import Route53Connection
|
| -from boto.route53.exception import DNSServerError
|
| -from boto.route53.healthcheck import HealthCheck
|
| -from boto.route53.record import ResourceRecordSets, Record
|
| -from boto.route53.zone import Zone
|
| -
|
| -from nose.plugins.attrib import attr
|
| -from tests.unit import AWSMockServiceTestCase
|
| -from boto.compat import six
|
| -urllib = six.moves.urllib
|
| -
|
| -
|
| -@attr(route53=True)
|
| -class TestRoute53Connection(AWSMockServiceTestCase):
|
| - connection_class = Route53Connection
|
| -
|
| - def setUp(self):
|
| - super(TestRoute53Connection, self).setUp()
|
| - self.calls = {
|
| - 'count': 0,
|
| - }
|
| -
|
| - def default_body(self):
|
| - return b"""<Route53Result>
|
| - <Message>It failed.</Message>
|
| -</Route53Result>
|
| -"""
|
| -
|
| - def test_typical_400(self):
|
| - self.set_http_response(status_code=400, header=[
|
| - ['Code', 'AccessDenied'],
|
| - ])
|
| -
|
| - with self.assertRaises(DNSServerError) as err:
|
| - self.service_connection.get_all_hosted_zones()
|
| -
|
| - self.assertTrue('It failed.' in str(err.exception))
|
| -
|
| - def test_retryable_400_prior_request_not_complete(self):
|
| - # Test ability to retry on ``PriorRequestNotComplete``.
|
| - self.set_http_response(status_code=400, header=[
|
| - ['Code', 'PriorRequestNotComplete'],
|
| - ])
|
| - self.do_retry_handler()
|
| -
|
| - def test_retryable_400_throttling(self):
|
| - # Test ability to rety on ``Throttling``.
|
| - self.set_http_response(status_code=400, header=[
|
| - ['Code', 'Throttling'],
|
| - ])
|
| - self.do_retry_handler()
|
| -
|
| - @mock.patch('time.sleep')
|
| - def do_retry_handler(self, sleep_mock):
|
| -
|
| - def incr_retry_handler(func):
|
| - def _wrapper(*args, **kwargs):
|
| - self.calls['count'] += 1
|
| - return func(*args, **kwargs)
|
| - return _wrapper
|
| -
|
| - # Patch.
|
| - orig_retry = self.service_connection._retry_handler
|
| - self.service_connection._retry_handler = incr_retry_handler(
|
| - orig_retry
|
| - )
|
| - self.assertEqual(self.calls['count'], 0)
|
| -
|
| - # Retries get exhausted.
|
| - with self.assertRaises(BotoServerError):
|
| - self.service_connection.get_all_hosted_zones()
|
| -
|
| - self.assertEqual(self.calls['count'], 7)
|
| -
|
| - # Unpatch.
|
| - self.service_connection._retry_handler = orig_retry
|
| -
|
| - def test_private_zone_invalid_vpc_400(self):
|
| - self.set_http_response(status_code=400, header=[
|
| - ['Code', 'InvalidVPCId'],
|
| - ])
|
| -
|
| - with self.assertRaises(DNSServerError) as err:
|
| - self.service_connection.create_hosted_zone("example.com.",
|
| - private_zone=True)
|
| - self.assertTrue('It failed.' in str(err.exception))
|
| -
|
| -
|
| -@attr(route53=True)
|
| -class TestCreateZoneRoute53(AWSMockServiceTestCase):
|
| - connection_class = Route53Connection
|
| -
|
| - def setUp(self):
|
| - super(TestCreateZoneRoute53, self).setUp()
|
| -
|
| - def default_body(self):
|
| - return b"""
|
| -<CreateHostedZoneResponse xmlns="https://route53.amazonaws.com/doc/2012-02-29/">
|
| - <HostedZone>
|
| - <Id>/hostedzone/Z11111</Id>
|
| - <Name>example.com.</Name>
|
| - <CallerReference>aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee</CallerReference>
|
| - <Config>
|
| - <Comment></Comment>
|
| - <PrivateZone>false</PrivateZone>
|
| - </Config>
|
| - <ResourceRecordSetCount>2</ResourceRecordSetCount>
|
| - </HostedZone>
|
| - <ChangeInfo>
|
| - <Id>/change/C1111111111111</Id>
|
| - <Status>PENDING</Status>
|
| - <SubmittedAt>2014-02-02T10:19:29.928Z</SubmittedAt>
|
| - </ChangeInfo>
|
| - <DelegationSet>
|
| - <NameServers>
|
| - <NameServer>ns-100.awsdns-01.com</NameServer>
|
| - <NameServer>ns-1000.awsdns-01.co.uk</NameServer>
|
| - <NameServer>ns-1000.awsdns-01.org</NameServer>
|
| - <NameServer>ns-900.awsdns-01.net</NameServer>
|
| - </NameServers>
|
| - </DelegationSet>
|
| -</CreateHostedZoneResponse>
|
| - """
|
| -
|
| - def test_create_zone(self):
|
| - self.set_http_response(status_code=201)
|
| - response = self.service_connection.create_zone("example.com.")
|
| -
|
| - self.assertTrue(isinstance(response, Zone))
|
| - self.assertEqual(response.id, "Z11111")
|
| - self.assertEqual(response.name, "example.com.")
|
| -
|
| - def test_create_hosted_zone(self):
|
| - self.set_http_response(status_code=201)
|
| - response = self.service_connection.create_hosted_zone("example.com.",
|
| - "my_ref",
|
| - "a comment")
|
| -
|
| - self.assertEqual(response['CreateHostedZoneResponse']
|
| - ['DelegationSet']['NameServers'],
|
| - ['ns-100.awsdns-01.com',
|
| - 'ns-1000.awsdns-01.co.uk',
|
| - 'ns-1000.awsdns-01.org',
|
| - 'ns-900.awsdns-01.net'])
|
| -
|
| - self.assertEqual(response['CreateHostedZoneResponse']
|
| - ['HostedZone']['Config']['PrivateZone'],
|
| - u'false')
|
| -
|
| -
|
| -@attr(route53=True)
|
| -class TestCreatePrivateZoneRoute53(AWSMockServiceTestCase):
|
| - connection_class = Route53Connection
|
| -
|
| - def setUp(self):
|
| - super(TestCreatePrivateZoneRoute53, self).setUp()
|
| -
|
| - def default_body(self):
|
| - return b"""
|
| -<CreateHostedZoneResponse xmlns="https://route53.amazonaws.com/doc/2012-02-29/">
|
| - <HostedZone>
|
| - <Id>/hostedzone/Z11111</Id>
|
| - <Name>example.com.</Name>
|
| - <VPC>
|
| - <VPCId>vpc-1a2b3c4d</VPCId>
|
| - <VPCRegion>us-east-1</VPCRegion>
|
| - </VPC>
|
| - <CallerReference>aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee</CallerReference>
|
| - <Config>
|
| - <Comment></Comment>
|
| - <PrivateZone>true</PrivateZone>
|
| - </Config>
|
| - <ResourceRecordSetCount>2</ResourceRecordSetCount>
|
| - </HostedZone>
|
| - <ChangeInfo>
|
| - <Id>/change/C1111111111111</Id>
|
| - <Status>PENDING</Status>
|
| - <SubmittedAt>2014-02-02T10:19:29.928Z</SubmittedAt>
|
| - </ChangeInfo>
|
| - <DelegationSet>
|
| - <NameServers>
|
| - <NameServer>ns-100.awsdns-01.com</NameServer>
|
| - <NameServer>ns-1000.awsdns-01.co.uk</NameServer>
|
| - <NameServer>ns-1000.awsdns-01.org</NameServer>
|
| - <NameServer>ns-900.awsdns-01.net</NameServer>
|
| - </NameServers>
|
| - </DelegationSet>
|
| -</CreateHostedZoneResponse>
|
| - """
|
| -
|
| - def test_create_private_zone(self):
|
| - self.set_http_response(status_code=201)
|
| - r = self.service_connection.create_hosted_zone("example.com.",
|
| - private_zone=True,
|
| - vpc_id='vpc-1a2b3c4d',
|
| - vpc_region='us-east-1'
|
| - )
|
| -
|
| - self.assertEqual(r['CreateHostedZoneResponse']['HostedZone']
|
| - ['Config']['PrivateZone'], u'true')
|
| - self.assertEqual(r['CreateHostedZoneResponse']['HostedZone']
|
| - ['VPC']['VPCId'], u'vpc-1a2b3c4d')
|
| - self.assertEqual(r['CreateHostedZoneResponse']['HostedZone']
|
| - ['VPC']['VPCRegion'], u'us-east-1')
|
| -
|
| -
|
| -@attr(route53=True)
|
| -class TestGetZoneRoute53(AWSMockServiceTestCase):
|
| - connection_class = Route53Connection
|
| -
|
| - def setUp(self):
|
| - super(TestGetZoneRoute53, self).setUp()
|
| -
|
| - def default_body(self):
|
| - return b"""
|
| -<ListHostedZonesResponse xmlns="https://route53.amazonaws.com/doc/2012-02-29/">
|
| - <HostedZones>
|
| - <HostedZone>
|
| - <Id>/hostedzone/Z1111</Id>
|
| - <Name>example2.com.</Name>
|
| - <CallerReference>aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee</CallerReference>
|
| - <Config/>
|
| - <ResourceRecordSetCount>3</ResourceRecordSetCount>
|
| - </HostedZone>
|
| - <HostedZone>
|
| - <Id>/hostedzone/Z2222</Id>
|
| - <Name>example1.com.</Name>
|
| - <CallerReference>aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeef</CallerReference>
|
| - <Config/>
|
| - <ResourceRecordSetCount>6</ResourceRecordSetCount>
|
| - </HostedZone>
|
| - <HostedZone>
|
| - <Id>/hostedzone/Z3333</Id>
|
| - <Name>example.com.</Name>
|
| - <CallerReference>aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeeg</CallerReference>
|
| - <Config/>
|
| - <ResourceRecordSetCount>6</ResourceRecordSetCount>
|
| - </HostedZone>
|
| - </HostedZones>
|
| - <IsTruncated>false</IsTruncated>
|
| - <MaxItems>100</MaxItems>
|
| -</ListHostedZonesResponse>
|
| - """
|
| -
|
| - def test_list_zones(self):
|
| - self.set_http_response(status_code=201)
|
| - response = self.service_connection.get_all_hosted_zones()
|
| -
|
| - domains = ['example2.com.', 'example1.com.', 'example.com.']
|
| - print(response['ListHostedZonesResponse']['HostedZones'][0])
|
| - for d in response['ListHostedZonesResponse']['HostedZones']:
|
| - print("Removing: %s" % d['Name'])
|
| - domains.remove(d['Name'])
|
| -
|
| - self.assertEqual(domains, [])
|
| -
|
| - def test_get_zone(self):
|
| - self.set_http_response(status_code=201)
|
| - response = self.service_connection.get_zone('example.com.')
|
| -
|
| - self.assertTrue(isinstance(response, Zone))
|
| - self.assertEqual(response.name, "example.com.")
|
| -
|
| -
|
| -@attr(route53=True)
|
| -class TestGetHostedZoneRoute53(AWSMockServiceTestCase):
|
| - connection_class = Route53Connection
|
| -
|
| - def setUp(self):
|
| - super(TestGetHostedZoneRoute53, self).setUp()
|
| -
|
| - def default_body(self):
|
| - return b"""
|
| -<GetHostedZoneResponse xmlns="https://route53.amazonaws.com/doc/2012-02-29/">
|
| - <HostedZone>
|
| - <Id>/hostedzone/Z1111</Id>
|
| - <Name>example.com.</Name>
|
| - <CallerReference>aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee</CallerReference>
|
| - <Config/>
|
| - <ResourceRecordSetCount>3</ResourceRecordSetCount>
|
| - </HostedZone>
|
| - <DelegationSet>
|
| - <NameServers>
|
| - <NameServer>ns-1000.awsdns-40.org</NameServer>
|
| - <NameServer>ns-200.awsdns-30.com</NameServer>
|
| - <NameServer>ns-900.awsdns-50.net</NameServer>
|
| - <NameServer>ns-1000.awsdns-00.co.uk</NameServer>
|
| - </NameServers>
|
| - </DelegationSet>
|
| -</GetHostedZoneResponse>
|
| -"""
|
| -
|
| - def test_list_zones(self):
|
| - self.set_http_response(status_code=201)
|
| - response = self.service_connection.get_hosted_zone("Z1111")
|
| -
|
| - self.assertEqual(response['GetHostedZoneResponse']
|
| - ['HostedZone']['Id'],
|
| - '/hostedzone/Z1111')
|
| - self.assertEqual(response['GetHostedZoneResponse']
|
| - ['HostedZone']['Name'],
|
| - 'example.com.')
|
| - self.assertEqual(response['GetHostedZoneResponse']
|
| - ['DelegationSet']['NameServers'],
|
| - ['ns-1000.awsdns-40.org', 'ns-200.awsdns-30.com',
|
| - 'ns-900.awsdns-50.net', 'ns-1000.awsdns-00.co.uk'])
|
| -
|
| -
|
| -@attr(route53=True)
|
| -class TestGetAllRRSetsRoute53(AWSMockServiceTestCase):
|
| - connection_class = Route53Connection
|
| -
|
| - def setUp(self):
|
| - super(TestGetAllRRSetsRoute53, self).setUp()
|
| -
|
| - def default_body(self):
|
| - return b"""
|
| -<ListResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/">
|
| - <ResourceRecordSets>
|
| - <ResourceRecordSet>
|
| - <Name>test.example.com.</Name>
|
| - <Type>A</Type>
|
| - <TTL>60</TTL>
|
| - <ResourceRecords>
|
| - <ResourceRecord>
|
| - <Value>10.0.0.1</Value>
|
| - </ResourceRecord>
|
| - </ResourceRecords>
|
| - </ResourceRecordSet>
|
| - <ResourceRecordSet>
|
| - <Name>www.example.com.</Name>
|
| - <Type>A</Type>
|
| - <TTL>60</TTL>
|
| - <ResourceRecords>
|
| - <ResourceRecord>
|
| - <Value>10.0.0.2</Value>
|
| - </ResourceRecord>
|
| - </ResourceRecords>
|
| - </ResourceRecordSet>
|
| - <ResourceRecordSet>
|
| - <Name>us-west-2-evaluate-health.example.com.</Name>
|
| - <Type>A</Type>
|
| - <SetIdentifier>latency-example-us-west-2-evaluate-health</SetIdentifier>
|
| - <Region>us-west-2</Region>
|
| - <AliasTarget>
|
| - <HostedZoneId>ABCDEFG123456</HostedZoneId>
|
| - <EvaluateTargetHealth>true</EvaluateTargetHealth>
|
| - <DNSName>example-123456-evaluate-health.us-west-2.elb.amazonaws.com.</DNSName>
|
| - </AliasTarget>
|
| - <HealthCheckId>abcdefgh-abcd-abcd-abcd-abcdefghijkl</HealthCheckId>
|
| - </ResourceRecordSet>
|
| - <ResourceRecordSet>
|
| - <Name>us-west-2-no-evaluate-health.example.com.</Name>
|
| - <Type>A</Type>
|
| - <SetIdentifier>latency-example-us-west-2-no-evaluate-health</SetIdentifier>
|
| - <Region>us-west-2</Region>
|
| - <AliasTarget>
|
| - <HostedZoneId>ABCDEFG567890</HostedZoneId>
|
| - <EvaluateTargetHealth>false</EvaluateTargetHealth>
|
| - <DNSName>example-123456-no-evaluate-health.us-west-2.elb.amazonaws.com.</DNSName>
|
| - </AliasTarget>
|
| - <HealthCheckId>abcdefgh-abcd-abcd-abcd-abcdefghijkl</HealthCheckId>
|
| - </ResourceRecordSet>
|
| - <ResourceRecordSet>
|
| - <Name>failover.example.com.</Name>
|
| - <Type>A</Type>
|
| - <SetIdentifier>failover-primary</SetIdentifier>
|
| - <Failover>PRIMARY</Failover>
|
| - <TTL>60</TTL>
|
| - <ResourceRecords>
|
| - <ResourceRecord>
|
| - <Value>10.0.0.4</Value>
|
| - </ResourceRecord>
|
| - </ResourceRecords>
|
| - </ResourceRecordSet>
|
| - <ResourceRecordSet>
|
| - <Name>us-west-2-evaluate-health-healthcheck.example.com.</Name>
|
| - <Type>A</Type>
|
| - <SetIdentifier>latency-example-us-west-2-evaluate-health-healthcheck</SetIdentifier>
|
| - <Region>us-west-2</Region>
|
| - <AliasTarget>
|
| - <HostedZoneId>ABCDEFG123456</HostedZoneId>
|
| - <EvaluateTargetHealth>true</EvaluateTargetHealth>
|
| - <DNSName>example-123456-evaluate-health-healthcheck.us-west-2.elb.amazonaws.com.</DNSName>
|
| - </AliasTarget>
|
| - <HealthCheckId>076a32f8-86f7-4c9e-9fa2-c163d5be67d9</HealthCheckId>
|
| - </ResourceRecordSet>
|
| - </ResourceRecordSets>
|
| - <IsTruncated>false</IsTruncated>
|
| - <MaxItems>100</MaxItems>
|
| -</ListResourceRecordSetsResponse>
|
| - """
|
| -
|
| - def test_get_all_rr_sets(self):
|
| - self.set_http_response(status_code=200)
|
| - response = self.service_connection.get_all_rrsets("Z1111",
|
| - "A",
|
| - "example.com.")
|
| -
|
| - self.assertIn(self.actual_request.path,
|
| - ("/2013-04-01/hostedzone/Z1111/rrset?type=A&name=example.com.",
|
| - "/2013-04-01/hostedzone/Z1111/rrset?name=example.com.&type=A"))
|
| -
|
| - self.assertTrue(isinstance(response, ResourceRecordSets))
|
| - self.assertEqual(response.hosted_zone_id, "Z1111")
|
| - self.assertTrue(isinstance(response[0], Record))
|
| -
|
| - self.assertTrue(response[0].name, "test.example.com.")
|
| - self.assertTrue(response[0].ttl, "60")
|
| - self.assertTrue(response[0].type, "A")
|
| -
|
| - evaluate_record = response[2]
|
| - self.assertEqual(evaluate_record.name, 'us-west-2-evaluate-health.example.com.')
|
| - self.assertEqual(evaluate_record.type, 'A')
|
| - self.assertEqual(evaluate_record.identifier, 'latency-example-us-west-2-evaluate-health')
|
| - self.assertEqual(evaluate_record.region, 'us-west-2')
|
| - self.assertEqual(evaluate_record.alias_hosted_zone_id, 'ABCDEFG123456')
|
| - self.assertTrue(evaluate_record.alias_evaluate_target_health)
|
| - self.assertEqual(evaluate_record.alias_dns_name, 'example-123456-evaluate-health.us-west-2.elb.amazonaws.com.')
|
| - evaluate_xml = evaluate_record.to_xml()
|
| - self.assertTrue(evaluate_record.health_check, 'abcdefgh-abcd-abcd-abcd-abcdefghijkl')
|
| - self.assertTrue('<EvaluateTargetHealth>true</EvaluateTargetHealth>' in evaluate_xml)
|
| -
|
| - no_evaluate_record = response[3]
|
| - self.assertEqual(no_evaluate_record.name, 'us-west-2-no-evaluate-health.example.com.')
|
| - self.assertEqual(no_evaluate_record.type, 'A')
|
| - self.assertEqual(no_evaluate_record.identifier, 'latency-example-us-west-2-no-evaluate-health')
|
| - self.assertEqual(no_evaluate_record.region, 'us-west-2')
|
| - self.assertEqual(no_evaluate_record.alias_hosted_zone_id, 'ABCDEFG567890')
|
| - self.assertFalse(no_evaluate_record.alias_evaluate_target_health)
|
| - self.assertEqual(no_evaluate_record.alias_dns_name, 'example-123456-no-evaluate-health.us-west-2.elb.amazonaws.com.')
|
| - no_evaluate_xml = no_evaluate_record.to_xml()
|
| - self.assertTrue(no_evaluate_record.health_check, 'abcdefgh-abcd-abcd-abcd-abcdefghijkl')
|
| - self.assertTrue('<EvaluateTargetHealth>false</EvaluateTargetHealth>' in no_evaluate_xml)
|
| -
|
| - failover_record = response[4]
|
| - self.assertEqual(failover_record.name, 'failover.example.com.')
|
| - self.assertEqual(failover_record.type, 'A')
|
| - self.assertEqual(failover_record.identifier, 'failover-primary')
|
| - self.assertEqual(failover_record.failover, 'PRIMARY')
|
| - self.assertEqual(failover_record.ttl, '60')
|
| -
|
| - healthcheck_record = response[5]
|
| - self.assertEqual(healthcheck_record.health_check, '076a32f8-86f7-4c9e-9fa2-c163d5be67d9')
|
| - self.assertEqual(healthcheck_record.name, 'us-west-2-evaluate-health-healthcheck.example.com.')
|
| - self.assertEqual(healthcheck_record.identifier, 'latency-example-us-west-2-evaluate-health-healthcheck')
|
| - self.assertEqual(healthcheck_record.alias_dns_name, 'example-123456-evaluate-health-healthcheck.us-west-2.elb.amazonaws.com.')
|
| -
|
| -
|
| -@attr(route53=True)
|
| -class TestTruncatedGetAllRRSetsRoute53(AWSMockServiceTestCase):
|
| - connection_class = Route53Connection
|
| -
|
| - def setUp(self):
|
| - super(TestTruncatedGetAllRRSetsRoute53, self).setUp()
|
| -
|
| - def default_body(self):
|
| - return b"""
|
| -<ListResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/">
|
| - <ResourceRecordSets>
|
| - <ResourceRecordSet>
|
| - <Name>example.com.</Name>
|
| - <Type>NS</Type>
|
| - <TTL>900</TTL>
|
| - <ResourceRecords>
|
| - <ResourceRecord>
|
| - <Value>ns-91.awsdns-41.co.uk.</Value>
|
| - </ResourceRecord>
|
| - <ResourceRecord>
|
| - <Value>ns-1929.awsdns-93.net.</Value>
|
| - </ResourceRecord>
|
| - <ResourceRecord>
|
| - <Value>ns-12.awsdns-21.org.</Value>
|
| - </ResourceRecord>
|
| - <ResourceRecord>
|
| - <Value>ns-102.awsdns-96.com.</Value>
|
| - </ResourceRecord>
|
| - </ResourceRecords>
|
| - </ResourceRecordSet>
|
| - <ResourceRecordSet>
|
| - <Name>example.com.</Name>
|
| - <Type>SOA</Type>
|
| - <TTL>1800</TTL>
|
| - <ResourceRecords>
|
| - <ResourceRecord>
|
| - <Value>ns-1929.awsdns-93.net. hostmaster.awsdns.net. 1 10800 3600 604800 1800</Value>
|
| - </ResourceRecord>
|
| - </ResourceRecords>
|
| - </ResourceRecordSet>
|
| - <ResourceRecordSet>
|
| - <Name>wrr.example.com.</Name>
|
| - <Type>A</Type>
|
| - <SetIdentifier>primary</SetIdentifier>
|
| - <Weight>100</Weight>
|
| - <TTL>300</TTL>
|
| - <ResourceRecords>
|
| - <ResourceRecord><Value>127.0.0.1</Value></ResourceRecord>
|
| - </ResourceRecords>
|
| - </ResourceRecordSet>
|
| - </ResourceRecordSets>
|
| - <IsTruncated>true</IsTruncated>
|
| - <NextRecordName>wrr.example.com.</NextRecordName>
|
| - <NextRecordType>A</NextRecordType>
|
| - <NextRecordIdentifier>secondary</NextRecordIdentifier>
|
| - <MaxItems>3</MaxItems>
|
| -</ListResourceRecordSetsResponse>"""
|
| -
|
| - def paged_body(self):
|
| - return b"""
|
| -<ListResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/">
|
| - <ResourceRecordSets>
|
| - <ResourceRecordSet>
|
| - <Name>wrr.example.com.</Name>
|
| - <Type>A</Type>
|
| - <SetIdentifier>secondary</SetIdentifier>
|
| - <Weight>50</Weight>
|
| - <TTL>300</TTL>
|
| - <ResourceRecords>
|
| - <ResourceRecord><Value>127.0.0.2</Value></ResourceRecord>
|
| - </ResourceRecords>
|
| - </ResourceRecordSet>
|
| - </ResourceRecordSets>
|
| - <IsTruncated>false</IsTruncated>
|
| - <MaxItems>3</MaxItems>
|
| -</ListResourceRecordSetsResponse>"""
|
| -
|
| -
|
| - def test_get_all_rr_sets(self):
|
| - self.set_http_response(status_code=200)
|
| - response = self.service_connection.get_all_rrsets("Z1111", maxitems=3)
|
| -
|
| - # made first request
|
| - self.assertEqual(self.actual_request.path, '/2013-04-01/hostedzone/Z1111/rrset?maxitems=3')
|
| -
|
| - # anticipate a second request when we page it
|
| - self.set_http_response(status_code=200, body=self.paged_body())
|
| -
|
| - # this should trigger another call to get_all_rrsets
|
| - self.assertEqual(len(list(response)), 4)
|
| -
|
| - url_parts = urllib.parse.urlparse(self.actual_request.path)
|
| - self.assertEqual(url_parts.path, '/2013-04-01/hostedzone/Z1111/rrset')
|
| - self.assertEqual(urllib.parse.parse_qs(url_parts.query),
|
| - dict(type=['A'], name=['wrr.example.com.'], identifier=['secondary']))
|
| -
|
| -
|
| -@attr(route53=True)
|
| -class TestCreateHealthCheckRoute53IpAddress(AWSMockServiceTestCase):
|
| - connection_class = Route53Connection
|
| -
|
| - def setUp(self):
|
| - super(TestCreateHealthCheckRoute53IpAddress, self).setUp()
|
| -
|
| - def default_body(self):
|
| - return b"""
|
| -<CreateHealthCheckResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/">
|
| - <HealthCheck>
|
| - <Id>34778cf8-e31e-4974-bad0-b108bd1623d3</Id>
|
| - <CallerReference>2fa48c8f-76ef-4253-9874-8bcb2b0d7694</CallerReference>
|
| - <HealthCheckConfig>
|
| - <IPAddress>74.125.228.81</IPAddress>
|
| - <Port>443</Port>
|
| - <Type>HTTPS_STR_MATCH</Type>
|
| - <SearchString>OK</SearchString>
|
| - <ResourcePath>/health_check</ResourcePath>
|
| - <RequestInterval>30</RequestInterval>
|
| - <FailureThreshold>3</FailureThreshold>
|
| - </HealthCheckConfig>
|
| - </HealthCheck>
|
| -</CreateHealthCheckResponse>
|
| - """
|
| -
|
| - def test_create_health_check_ip_address(self):
|
| - self.set_http_response(status_code=201)
|
| - hc = HealthCheck(ip_addr='74.125.228.81', port=443, hc_type='HTTPS_STR_MATCH', resource_path='/health_check', string_match='OK')
|
| - hc_xml = hc.to_xml()
|
| - self.assertFalse('<FullyQualifiedDomainName>' in hc_xml)
|
| - self.assertTrue('<IPAddress>' in hc_xml)
|
| -
|
| - response = self.service_connection.create_health_check(hc)
|
| - hc_resp = response['CreateHealthCheckResponse']['HealthCheck']['HealthCheckConfig']
|
| - self.assertEqual(hc_resp['IPAddress'], '74.125.228.81')
|
| - self.assertEqual(hc_resp['ResourcePath'], '/health_check')
|
| - self.assertEqual(hc_resp['Type'], 'HTTPS_STR_MATCH')
|
| - self.assertEqual(hc_resp['Port'], '443')
|
| - self.assertEqual(hc_resp['ResourcePath'], '/health_check')
|
| - self.assertEqual(hc_resp['SearchString'], 'OK')
|
| - self.assertEqual(response['CreateHealthCheckResponse']['HealthCheck']['Id'], '34778cf8-e31e-4974-bad0-b108bd1623d3')
|
| -
|
| -
|
| -@attr(route53=True)
|
| -class TestGetCheckerIpRanges(AWSMockServiceTestCase):
|
| - connection_class = Route53Connection
|
| -
|
| - def default_body(self):
|
| - return b"""
|
| -<GetCheckerIpRangesResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/">
|
| - <CheckerIpRanges>
|
| - <member>54.183.255.128/26</member>
|
| - <member>54.228.16.0/26</member>
|
| - <member>54.232.40.64/26</member>
|
| - <member>177.71.207.128/26</member>
|
| - <member>176.34.159.192/26</member>
|
| - </CheckerIpRanges>
|
| -</GetCheckerIpRangesResponse>
|
| - """
|
| -
|
| - def test_get_checker_ip_ranges(self):
|
| - self.set_http_response(status_code=200)
|
| - response = self.service_connection.get_checker_ip_ranges()
|
| - ip_ranges = response['GetCheckerIpRangesResponse']['CheckerIpRanges']
|
| -
|
| - self.assertEqual(len(ip_ranges), 5)
|
| - self.assertIn('54.183.255.128/26', ip_ranges)
|
| - self.assertIn('54.228.16.0/26', ip_ranges)
|
| - self.assertIn('54.232.40.64/26', ip_ranges)
|
| - self.assertIn('177.71.207.128/26', ip_ranges)
|
| - self.assertIn('176.34.159.192/26', ip_ranges)
|
| -
|
| -
|
| -@attr(route53=True)
|
| -class TestCreateHealthCheckRoute53FQDN(AWSMockServiceTestCase):
|
| - connection_class = Route53Connection
|
| -
|
| - def setUp(self):
|
| - super(TestCreateHealthCheckRoute53FQDN, self).setUp()
|
| -
|
| - def default_body(self):
|
| - return b"""
|
| -<CreateHealthCheckResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/">
|
| - <HealthCheck>
|
| - <Id>f9abfe10-8d2a-4bbd-8f35-796f0f8572f2</Id>
|
| - <CallerReference>3246ac17-b651-4295-a5c8-c132a59693d7</CallerReference>
|
| - <HealthCheckConfig>
|
| - <Port>443</Port>
|
| - <Type>HTTPS</Type>
|
| - <ResourcePath>/health_check</ResourcePath>
|
| - <FullyQualifiedDomainName>example.com</FullyQualifiedDomainName>
|
| - <RequestInterval>30</RequestInterval>
|
| - <FailureThreshold>3</FailureThreshold>
|
| - </HealthCheckConfig>
|
| - </HealthCheck>
|
| -</CreateHealthCheckResponse>
|
| - """
|
| -
|
| - def test_create_health_check_fqdn(self):
|
| - self.set_http_response(status_code=201)
|
| - hc = HealthCheck(ip_addr='', port=443, hc_type='HTTPS', resource_path='/health_check', fqdn='example.com')
|
| - hc_xml = hc.to_xml()
|
| - self.assertTrue('<FullyQualifiedDomainName>' in hc_xml)
|
| - self.assertFalse('<IPAddress>' in hc_xml)
|
| -
|
| - response = self.service_connection.create_health_check(hc)
|
| - hc_resp = response['CreateHealthCheckResponse']['HealthCheck']['HealthCheckConfig']
|
| - self.assertEqual(hc_resp['FullyQualifiedDomainName'], 'example.com')
|
| - self.assertEqual(hc_resp['ResourcePath'], '/health_check')
|
| - self.assertEqual(hc_resp['Type'], 'HTTPS')
|
| - self.assertEqual(hc_resp['Port'], '443')
|
| - self.assertEqual(hc_resp['ResourcePath'], '/health_check')
|
| - self.assertEqual(response['CreateHealthCheckResponse']['HealthCheck']['Id'], 'f9abfe10-8d2a-4bbd-8f35-796f0f8572f2')
|
| -
|
| -
|
| -@attr(route53=True)
|
| -class TestChangeResourceRecordSetsRoute53(AWSMockServiceTestCase):
|
| - connection_class = Route53Connection
|
| -
|
| - def setUp(self):
|
| - super(TestChangeResourceRecordSetsRoute53, self).setUp()
|
| -
|
| - def default_body(self):
|
| - return b"""
|
| -<ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/">
|
| - <ChangeInfo>
|
| - <Id>/change/C1111111111111</Id>
|
| - <Status>PENDING</Status>
|
| - <SubmittedAt>2014-05-05T10:11:12.123Z</SubmittedAt>
|
| - </ChangeInfo>
|
| -</ChangeResourceRecordSetsResponse>
|
| - """
|
| -
|
| - def test_record_commit(self):
|
| - rrsets = ResourceRecordSets(self.service_connection)
|
| - rrsets.add_change_record('CREATE', Record('vanilla.example.com', 'A', 60, ['1.2.3.4']))
|
| - rrsets.add_change_record('CREATE', Record('alias.example.com', 'AAAA', alias_hosted_zone_id='Z123OTHER', alias_dns_name='target.other', alias_evaluate_target_health=True))
|
| - rrsets.add_change_record('CREATE', Record('wrr.example.com', 'CNAME', 60, ['cname.target'], weight=10, identifier='weight-1'))
|
| - rrsets.add_change_record('CREATE', Record('lbr.example.com', 'TXT', 60, ['text record'], region='us-west-2', identifier='region-1'))
|
| - rrsets.add_change_record('CREATE', Record('failover.example.com', 'A', 60, ['2.2.2.2'], health_check='hc-1234', failover='PRIMARY', identifier='primary'))
|
| -
|
| - changes_xml = rrsets.to_xml()
|
| -
|
| - # the whitespacing doesn't match exactly, so we'll pretty print and drop all new lines
|
| - # not the best, but
|
| - actual_xml = re.sub(r"\s*[\r\n]+", "\n", xml.dom.minidom.parseString(changes_xml).toprettyxml())
|
| - expected_xml = re.sub(r"\s*[\r\n]+", "\n", xml.dom.minidom.parseString(b"""
|
| -<ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2013-04-01/">
|
| - <ChangeBatch>
|
| - <Comment>None</Comment>
|
| - <Changes>
|
| - <Change>
|
| - <Action>CREATE</Action>
|
| - <ResourceRecordSet>
|
| - <Name>vanilla.example.com</Name>
|
| - <Type>A</Type>
|
| - <TTL>60</TTL>
|
| - <ResourceRecords>
|
| - <ResourceRecord>
|
| - <Value>1.2.3.4</Value>
|
| - </ResourceRecord>
|
| - </ResourceRecords>
|
| - </ResourceRecordSet>
|
| - </Change>
|
| - <Change>
|
| - <Action>CREATE</Action>
|
| - <ResourceRecordSet>
|
| - <Name>alias.example.com</Name>
|
| - <Type>AAAA</Type>
|
| - <AliasTarget>
|
| - <HostedZoneId>Z123OTHER</HostedZoneId>
|
| - <DNSName>target.other</DNSName>
|
| - <EvaluateTargetHealth>true</EvaluateTargetHealth>
|
| - </AliasTarget>
|
| - </ResourceRecordSet>
|
| - </Change>
|
| - <Change>
|
| - <Action>CREATE</Action>
|
| - <ResourceRecordSet>
|
| - <Name>wrr.example.com</Name>
|
| - <Type>CNAME</Type>
|
| - <SetIdentifier>weight-1</SetIdentifier>
|
| - <Weight>10</Weight>
|
| - <TTL>60</TTL>
|
| - <ResourceRecords>
|
| - <ResourceRecord>
|
| - <Value>cname.target</Value>
|
| - </ResourceRecord>
|
| - </ResourceRecords>
|
| - </ResourceRecordSet>
|
| - </Change>
|
| - <Change>
|
| - <Action>CREATE</Action>
|
| - <ResourceRecordSet>
|
| - <Name>lbr.example.com</Name>
|
| - <Type>TXT</Type>
|
| - <SetIdentifier>region-1</SetIdentifier>
|
| - <Region>us-west-2</Region>
|
| - <TTL>60</TTL>
|
| - <ResourceRecords>
|
| - <ResourceRecord>
|
| - <Value>text record</Value>
|
| - </ResourceRecord>
|
| - </ResourceRecords>
|
| - </ResourceRecordSet>
|
| - </Change>
|
| - <Change>
|
| - <Action>CREATE</Action>
|
| - <ResourceRecordSet>
|
| - <Name>failover.example.com</Name>
|
| - <Type>A</Type>
|
| - <SetIdentifier>primary</SetIdentifier>
|
| - <Failover>PRIMARY</Failover>
|
| - <TTL>60</TTL>
|
| - <ResourceRecords>
|
| - <ResourceRecord>
|
| - <Value>2.2.2.2</Value>
|
| - </ResourceRecord>
|
| - </ResourceRecords>
|
| - <HealthCheckId>hc-1234</HealthCheckId>
|
| - </ResourceRecordSet>
|
| - </Change>
|
| - </Changes>
|
| - </ChangeBatch>
|
| -</ChangeResourceRecordSetsRequest>
|
| - """).toprettyxml())
|
| -
|
| - # Note: the alias XML should not include the TTL, even if it's specified in the object model
|
| - self.assertEqual(actual_xml, expected_xml)
|
|
|