| 
									
										
										
										
											2021-08-22 10:51:21 +01:00
										 |  |  | import boto3 | 
					
						
							| 
									
										
										
										
											2022-06-12 17:53:27 +00:00
										 |  |  | import pytest | 
					
						
							| 
									
										
										
										
											2021-10-18 19:44:29 +00:00
										 |  |  | import sure  # noqa # pylint: disable=unused-import | 
					
						
							| 
									
										
										
										
											2022-06-12 17:53:27 +00:00
										 |  |  | from botocore.exceptions import ClientError | 
					
						
							| 
									
										
										
										
											2021-08-22 10:51:21 +01:00
										 |  |  | from moto import mock_route53 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_route53 | 
					
						
							|  |  |  | def test_create_health_check(): | 
					
						
							|  |  |  |     client = boto3.client("route53", region_name="us-east-1") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     response = client.create_health_check( | 
					
						
							|  |  |  |         CallerReference="test-route53-health-HealthCheck-asdf", | 
					
						
							|  |  |  |         HealthCheckConfig={ | 
					
						
							|  |  |  |             "IPAddress": "93.184.216.34", | 
					
						
							|  |  |  |             "Port": 80, | 
					
						
							|  |  |  |             "Type": "HTTP", | 
					
						
							|  |  |  |             "ResourcePath": "/", | 
					
						
							|  |  |  |             "FullyQualifiedDomainName": "example.com", | 
					
						
							|  |  |  |             "RequestInterval": 10, | 
					
						
							|  |  |  |             "FailureThreshold": 2, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     response["ResponseMetadata"]["HTTPStatusCode"].should.equal(201) | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     check = response["HealthCheck"] | 
					
						
							|  |  |  |     check.should.have.key("Id") | 
					
						
							|  |  |  |     check.should.have.key("CallerReference").being.equal( | 
					
						
							|  |  |  |         "test-route53-health-HealthCheck-asdf" | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     check.should.have.key("HealthCheckConfig") | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     config = check["HealthCheckConfig"] | 
					
						
							|  |  |  |     config.should.have.key("IPAddress").being.equal("93.184.216.34") | 
					
						
							|  |  |  |     config.should.have.key("Port").being.equal(80) | 
					
						
							|  |  |  |     config.should.have.key("Type").being.equal("HTTP") | 
					
						
							|  |  |  |     config.should.have.key("ResourcePath").being.equal("/") | 
					
						
							|  |  |  |     config.should.have.key("FullyQualifiedDomainName").being.equal("example.com") | 
					
						
							|  |  |  |     config.should.have.key("RequestInterval").being.equal(10) | 
					
						
							|  |  |  |     config.should.have.key("FailureThreshold").being.equal(2) | 
					
						
							|  |  |  |     config.should.have.key("MeasureLatency").being.equal(False) | 
					
						
							|  |  |  |     config.should.have.key("Inverted").being.equal(False) | 
					
						
							|  |  |  |     config.should.have.key("Disabled").being.equal(False) | 
					
						
							|  |  |  |     config.should.have.key("EnableSNI").being.equal(False) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     config.shouldnt.have.key("ChildHealthChecks") | 
					
						
							|  |  |  |     config.shouldnt.have.key("HealthThreshold") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_route53 | 
					
						
							|  |  |  | def test_create_health_check_with_additional_options(): | 
					
						
							|  |  |  |     client = boto3.client("route53", region_name="us-east-1") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     response = client.create_health_check( | 
					
						
							|  |  |  |         CallerReference="test-route53-health-HealthCheck-asdf", | 
					
						
							|  |  |  |         HealthCheckConfig={ | 
					
						
							|  |  |  |             "IPAddress": "93.184.216.34", | 
					
						
							|  |  |  |             "Port": 80, | 
					
						
							|  |  |  |             "Type": "HTTP", | 
					
						
							|  |  |  |             "ResourcePath": "/", | 
					
						
							|  |  |  |             "FullyQualifiedDomainName": "example.com", | 
					
						
							| 
									
										
										
										
											2022-06-19 13:43:57 +00:00
										 |  |  |             "SearchString": "a good response", | 
					
						
							| 
									
										
										
										
											2021-08-22 10:51:21 +01:00
										 |  |  |             "RequestInterval": 10, | 
					
						
							|  |  |  |             "FailureThreshold": 2, | 
					
						
							|  |  |  |             "MeasureLatency": True, | 
					
						
							|  |  |  |             "Inverted": True, | 
					
						
							|  |  |  |             "Disabled": True, | 
					
						
							|  |  |  |             "EnableSNI": True, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     response["ResponseMetadata"]["HTTPStatusCode"].should.equal(201) | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     check = response["HealthCheck"] | 
					
						
							|  |  |  |     check.should.have.key("CallerReference").being.equal( | 
					
						
							|  |  |  |         "test-route53-health-HealthCheck-asdf" | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2022-06-19 13:43:57 +00:00
										 |  |  |     check.should.have.key("HealthCheckVersion").equal(1) | 
					
						
							| 
									
										
										
										
											2021-08-22 10:51:21 +01:00
										 |  |  |     check.should.have.key("HealthCheckConfig") | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     config = check["HealthCheckConfig"] | 
					
						
							| 
									
										
										
										
											2022-06-19 13:43:57 +00:00
										 |  |  |     check["HealthCheckConfig"].should.have.key("SearchString").equal("a good response") | 
					
						
							| 
									
										
										
										
											2021-08-22 10:51:21 +01:00
										 |  |  |     config.should.have.key("MeasureLatency").being.equal(True) | 
					
						
							|  |  |  |     config.should.have.key("Inverted").being.equal(True) | 
					
						
							|  |  |  |     config.should.have.key("Disabled").being.equal(True) | 
					
						
							|  |  |  |     config.should.have.key("EnableSNI").being.equal(True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_route53 | 
					
						
							|  |  |  | def test_create_calculated_health_check(): | 
					
						
							|  |  |  |     client = boto3.client("route53", region_name="us-east-1") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     response = client.create_health_check( | 
					
						
							|  |  |  |         CallerReference="test-route53-health-HealthCheck-ZHV123", | 
					
						
							|  |  |  |         HealthCheckConfig={ | 
					
						
							|  |  |  |             "Type": "CALCULATED", | 
					
						
							|  |  |  |             "Inverted": False, | 
					
						
							|  |  |  |             "Disabled": False, | 
					
						
							|  |  |  |             "HealthThreshold": 1, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     check = response["HealthCheck"] | 
					
						
							|  |  |  |     check.should.have.key("Id") | 
					
						
							|  |  |  |     check.should.have.key("CallerReference").being.equal( | 
					
						
							|  |  |  |         "test-route53-health-HealthCheck-ZHV123" | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     config = check["HealthCheckConfig"] | 
					
						
							|  |  |  |     config.should.have.key("Type").being.equal("CALCULATED") | 
					
						
							|  |  |  |     config.should.have.key("Inverted").being.equal(False) | 
					
						
							|  |  |  |     config.should.have.key("Disabled").being.equal(False) | 
					
						
							|  |  |  |     config.should.have.key("HealthThreshold").being.equal(1) | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     config.shouldnt.have.key("IPAddress") | 
					
						
							|  |  |  |     config.shouldnt.have.key("Port") | 
					
						
							|  |  |  |     config.shouldnt.have.key("ResourcePath") | 
					
						
							|  |  |  |     config.shouldnt.have.key("FullyQualifiedDomainName") | 
					
						
							|  |  |  |     config.shouldnt.have.key("RequestInterval") | 
					
						
							|  |  |  |     config.shouldnt.have.key("FailureThreshold") | 
					
						
							|  |  |  |     config.shouldnt.have.key("MeasureLatency") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_route53 | 
					
						
							|  |  |  | def test_create_calculated_health_check_with_children(): | 
					
						
							|  |  |  |     client = boto3.client("route53", region_name="us-east-1") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     child1 = client.create_health_check( | 
					
						
							|  |  |  |         CallerReference="test-route53-health-HealthCheck-child1", | 
					
						
							|  |  |  |         HealthCheckConfig={ | 
					
						
							|  |  |  |             "Type": "CALCULATED", | 
					
						
							|  |  |  |             "Inverted": False, | 
					
						
							|  |  |  |             "Disabled": False, | 
					
						
							|  |  |  |             "HealthThreshold": 1, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     child2 = client.create_health_check( | 
					
						
							|  |  |  |         CallerReference="test-route53-health-HealthCheck-child2", | 
					
						
							|  |  |  |         HealthCheckConfig={ | 
					
						
							|  |  |  |             "Type": "CALCULATED", | 
					
						
							|  |  |  |             "Inverted": False, | 
					
						
							|  |  |  |             "Disabled": False, | 
					
						
							|  |  |  |             "HealthThreshold": 1, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     parent = client.create_health_check( | 
					
						
							|  |  |  |         CallerReference="test-route53-health-HealthCheck-parent", | 
					
						
							|  |  |  |         HealthCheckConfig={ | 
					
						
							|  |  |  |             "Type": "CALCULATED", | 
					
						
							|  |  |  |             "Inverted": False, | 
					
						
							|  |  |  |             "Disabled": False, | 
					
						
							|  |  |  |             "HealthThreshold": 1, | 
					
						
							|  |  |  |             "ChildHealthChecks": [ | 
					
						
							|  |  |  |                 child1["HealthCheck"]["Id"], | 
					
						
							|  |  |  |                 child2["HealthCheck"]["Id"], | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     check = parent["HealthCheck"] | 
					
						
							|  |  |  |     check.should.have.key("Id") | 
					
						
							|  |  |  |     check.should.have.key("CallerReference").being.equal( | 
					
						
							|  |  |  |         "test-route53-health-HealthCheck-parent" | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     config = check["HealthCheckConfig"] | 
					
						
							|  |  |  |     config.should.have.key("Type").being.equal("CALCULATED") | 
					
						
							|  |  |  |     config.should.have.key("Inverted").being.equal(False) | 
					
						
							|  |  |  |     config.should.have.key("Disabled").being.equal(False) | 
					
						
							|  |  |  |     config.should.have.key("HealthThreshold").being.equal(1) | 
					
						
							|  |  |  |     config.should.have.key("ChildHealthChecks").being.equal( | 
					
						
							|  |  |  |         [child1["HealthCheck"]["Id"], child2["HealthCheck"]["Id"]] | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2022-06-12 17:53:27 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_route53 | 
					
						
							|  |  |  | def test_get_health_check(): | 
					
						
							|  |  |  |     client = boto3.client("route53", region_name="us-east-1") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     hc_id = client.create_health_check( | 
					
						
							|  |  |  |         CallerReference="callref", | 
					
						
							|  |  |  |         HealthCheckConfig={ | 
					
						
							|  |  |  |             "Type": "CALCULATED", | 
					
						
							|  |  |  |             "Inverted": False, | 
					
						
							|  |  |  |             "Disabled": False, | 
					
						
							|  |  |  |             "HealthThreshold": 1, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |     )["HealthCheck"]["Id"] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resp = client.get_health_check(HealthCheckId=hc_id)["HealthCheck"] | 
					
						
							|  |  |  |     resp.should.have.key("Id").equals(hc_id) | 
					
						
							|  |  |  |     resp.should.have.key("CallerReference").equals("callref") | 
					
						
							|  |  |  |     resp.should.have.key("HealthCheckVersion").equals(1) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_route53 | 
					
						
							|  |  |  | def test_get_unknown_health_check(): | 
					
						
							|  |  |  |     client = boto3.client("route53", region_name="us-east-1") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     with pytest.raises(ClientError) as exc: | 
					
						
							|  |  |  |         client.get_health_check(HealthCheckId="unknown") | 
					
						
							|  |  |  |     err = exc.value.response["Error"] | 
					
						
							|  |  |  |     err["Code"].should.equal("NoSuchHealthCheck") | 
					
						
							|  |  |  |     err["Message"].should.equal("A health check with id unknown does not exist.") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_route53 | 
					
						
							| 
									
										
										
										
											2022-06-19 13:43:57 +00:00
										 |  |  | def test_list_health_checks(): | 
					
						
							|  |  |  |     conn = boto3.client("route53", region_name="us-east-1") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     conn.list_health_checks()["HealthChecks"].should.have.length_of(0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     check = conn.create_health_check( | 
					
						
							|  |  |  |         CallerReference="?", | 
					
						
							|  |  |  |         HealthCheckConfig={ | 
					
						
							|  |  |  |             "IPAddress": "10.0.0.25", | 
					
						
							|  |  |  |             "Port": 80, | 
					
						
							|  |  |  |             "Type": "HTTP", | 
					
						
							|  |  |  |             "ResourcePath": "/", | 
					
						
							|  |  |  |             "FullyQualifiedDomainName": "example.com", | 
					
						
							|  |  |  |             "SearchString": "a good response", | 
					
						
							|  |  |  |             "RequestInterval": 10, | 
					
						
							|  |  |  |             "FailureThreshold": 2, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |     )["HealthCheck"] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     checks = conn.list_health_checks()["HealthChecks"] | 
					
						
							|  |  |  |     checks.should.have.length_of(1) | 
					
						
							|  |  |  |     checks.should.contain(check) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_route53 | 
					
						
							|  |  |  | def test_delete_health_checks(): | 
					
						
							|  |  |  |     conn = boto3.client("route53", region_name="us-east-1") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     conn.list_health_checks()["HealthChecks"].should.have.length_of(0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     check = conn.create_health_check( | 
					
						
							|  |  |  |         CallerReference="?", | 
					
						
							|  |  |  |         HealthCheckConfig={ | 
					
						
							|  |  |  |             "IPAddress": "10.0.0.25", | 
					
						
							|  |  |  |             "Port": 80, | 
					
						
							|  |  |  |             "Type": "HTTP", | 
					
						
							|  |  |  |             "ResourcePath": "/", | 
					
						
							|  |  |  |             "FullyQualifiedDomainName": "example.com", | 
					
						
							|  |  |  |             "SearchString": "a good response", | 
					
						
							|  |  |  |             "RequestInterval": 10, | 
					
						
							|  |  |  |             "FailureThreshold": 2, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |     )["HealthCheck"] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     conn.delete_health_check(HealthCheckId=check["Id"]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     checks = conn.list_health_checks()["HealthChecks"] | 
					
						
							|  |  |  |     checks.should.have.length_of(0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_route53 | 
					
						
							|  |  |  | def test_update_health_check(): | 
					
						
							| 
									
										
										
										
											2022-06-12 17:53:27 +00:00
										 |  |  |     client = boto3.client("route53", region_name="us-east-1") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-19 13:43:57 +00:00
										 |  |  |     hc_id = client.create_health_check( | 
					
						
							|  |  |  |         CallerReference="callref", | 
					
						
							|  |  |  |         HealthCheckConfig={ | 
					
						
							|  |  |  |             "Type": "CALCULATED", | 
					
						
							|  |  |  |             "Inverted": False, | 
					
						
							|  |  |  |             "Disabled": False, | 
					
						
							|  |  |  |             "HealthThreshold": 1, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |     )["HealthCheck"]["Id"] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     client.update_health_check( | 
					
						
							|  |  |  |         HealthCheckId=hc_id, | 
					
						
							|  |  |  |         IPAddress="0.0.0.0", | 
					
						
							|  |  |  |         Port=80, | 
					
						
							|  |  |  |         ResourcePath="rp", | 
					
						
							|  |  |  |         FullyQualifiedDomainName="example.com", | 
					
						
							|  |  |  |         SearchString="search", | 
					
						
							|  |  |  |         FailureThreshold=123, | 
					
						
							|  |  |  |         Inverted=False, | 
					
						
							|  |  |  |         Disabled=False, | 
					
						
							|  |  |  |         HealthThreshold=13, | 
					
						
							|  |  |  |         ChildHealthChecks=["child"], | 
					
						
							|  |  |  |         Regions=["us-east-1", "us-east-2", "us-west-1"], | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     config = client.get_health_check(HealthCheckId=hc_id)["HealthCheck"][ | 
					
						
							|  |  |  |         "HealthCheckConfig" | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  |     config.should.have.key("Type").equals("CALCULATED") | 
					
						
							|  |  |  |     config.should.have.key("ResourcePath").equals("rp") | 
					
						
							|  |  |  |     config.should.have.key("FullyQualifiedDomainName").equals("example.com") | 
					
						
							|  |  |  |     config.should.have.key("SearchString").equals("search") | 
					
						
							|  |  |  |     config.should.have.key("Inverted").equals(False) | 
					
						
							|  |  |  |     config.should.have.key("Disabled").equals(False) | 
					
						
							|  |  |  |     config.should.have.key("ChildHealthChecks").equals(["child"]) | 
					
						
							|  |  |  |     config.should.have.key("Regions").equals(["us-east-1", "us-east-2", "us-west-1"]) |