324 lines
9.9 KiB
Python
324 lines
9.9 KiB
Python
import boto3
|
|
import pytest
|
|
from botocore.exceptions import ClientError
|
|
|
|
from moto import mock_aws
|
|
|
|
|
|
@mock_aws
|
|
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,
|
|
},
|
|
)
|
|
assert response["ResponseMetadata"]["HTTPStatusCode"] == 201
|
|
#
|
|
check = response["HealthCheck"]
|
|
assert "Id" in check
|
|
assert check["CallerReference"] == "test-route53-health-HealthCheck-asdf"
|
|
assert "HealthCheckConfig" in check
|
|
#
|
|
config = check["HealthCheckConfig"]
|
|
assert config["IPAddress"] == "93.184.216.34"
|
|
assert config["Port"] == 80
|
|
assert config["Type"] == "HTTP"
|
|
assert config["ResourcePath"] == "/"
|
|
assert config["FullyQualifiedDomainName"] == "example.com"
|
|
assert config["RequestInterval"] == 10
|
|
assert config["FailureThreshold"] == 2
|
|
assert config["MeasureLatency"] is False
|
|
assert config["Inverted"] is False
|
|
assert config["Disabled"] is False
|
|
assert config["EnableSNI"] is False
|
|
|
|
assert "ChildHealthChecks" not in config
|
|
assert "HealthThreshold" not in config
|
|
|
|
|
|
@mock_aws
|
|
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",
|
|
"SearchString": "a good response",
|
|
"RequestInterval": 10,
|
|
"FailureThreshold": 2,
|
|
"MeasureLatency": True,
|
|
"Inverted": True,
|
|
"Disabled": True,
|
|
"EnableSNI": True,
|
|
},
|
|
)
|
|
assert response["ResponseMetadata"]["HTTPStatusCode"] == 201
|
|
#
|
|
check = response["HealthCheck"]
|
|
assert check["CallerReference"] == "test-route53-health-HealthCheck-asdf"
|
|
assert check["HealthCheckVersion"] == 1
|
|
assert "HealthCheckConfig" in check
|
|
#
|
|
config = check["HealthCheckConfig"]
|
|
assert check["HealthCheckConfig"]["SearchString"] == "a good response"
|
|
assert config["MeasureLatency"] is True
|
|
assert config["Inverted"] is True
|
|
assert config["Disabled"] is True
|
|
assert config["EnableSNI"] is True
|
|
|
|
|
|
@mock_aws
|
|
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"]
|
|
assert "Id" in check
|
|
assert check["CallerReference"] == "test-route53-health-HealthCheck-ZHV123"
|
|
#
|
|
config = check["HealthCheckConfig"]
|
|
assert config["Type"] == "CALCULATED"
|
|
assert config["Inverted"] is False
|
|
assert config["Disabled"] is False
|
|
assert config["HealthThreshold"] == 1
|
|
#
|
|
assert "IPAddress" not in config
|
|
assert "Port" not in config
|
|
assert "ResourcePath" not in config
|
|
assert "FullyQualifiedDomainName" not in config
|
|
assert "RequestInterval" not in config
|
|
assert "FailureThreshold" not in config
|
|
assert "MeasureLatency" not in config
|
|
|
|
|
|
@mock_aws
|
|
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"]
|
|
assert "Id" in check
|
|
assert check["CallerReference"] == "test-route53-health-HealthCheck-parent"
|
|
#
|
|
config = check["HealthCheckConfig"]
|
|
assert config["Type"] == "CALCULATED"
|
|
assert config["Inverted"] is False
|
|
assert config["Disabled"] is False
|
|
assert config["HealthThreshold"] == 1
|
|
assert config["ChildHealthChecks"] == [
|
|
child1["HealthCheck"]["Id"],
|
|
child2["HealthCheck"]["Id"],
|
|
]
|
|
|
|
|
|
@mock_aws
|
|
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"]
|
|
assert resp["Id"] == hc_id
|
|
assert resp["CallerReference"] == "callref"
|
|
assert resp["HealthCheckVersion"] == 1
|
|
|
|
|
|
@mock_aws
|
|
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"]
|
|
assert err["Code"] == "NoSuchHealthCheck"
|
|
assert err["Message"] == "A health check with id unknown does not exist."
|
|
|
|
|
|
@mock_aws
|
|
def test_list_health_checks():
|
|
conn = boto3.client("route53", region_name="us-east-1")
|
|
|
|
assert len(conn.list_health_checks()["HealthChecks"]) == 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"]
|
|
|
|
assert conn.list_health_checks()["HealthChecks"] == [check]
|
|
|
|
|
|
@mock_aws
|
|
def test_delete_health_checks():
|
|
conn = boto3.client("route53", region_name="us-east-1")
|
|
|
|
assert len(conn.list_health_checks()["HealthChecks"]) == 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"]
|
|
assert len(checks) == 0
|
|
|
|
|
|
@mock_aws
|
|
def test_update_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"]
|
|
|
|
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"
|
|
]
|
|
assert config["Type"] == "CALCULATED"
|
|
assert config["ResourcePath"] == "rp"
|
|
assert config["FullyQualifiedDomainName"] == "example.com"
|
|
assert config["SearchString"] == "search"
|
|
assert config["Inverted"] is False
|
|
assert config["Disabled"] is False
|
|
assert config["ChildHealthChecks"] == ["child"]
|
|
assert config["Regions"] == ["us-east-1", "us-east-2", "us-west-1"]
|
|
|
|
|
|
@mock_aws
|
|
def test_health_check_status():
|
|
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_status(HealthCheckId=hc_id)
|
|
assert len(resp["HealthCheckObservations"]) == 1
|
|
|
|
observation = resp["HealthCheckObservations"][0]
|
|
assert observation["Region"] == "us-east-1"
|
|
assert observation["IPAddress"] == "127.0.13.37"
|
|
assert "StatusReport" in observation
|
|
assert (
|
|
observation["StatusReport"]["Status"]
|
|
== "Success: HTTP Status Code: 200. Resolved IP: 127.0.13.37. OK"
|
|
)
|
|
|
|
with pytest.raises(ClientError) as exc:
|
|
client.get_health_check_status(HealthCheckId="bad-id")
|
|
|
|
err = exc.value.response["Error"]
|
|
assert err["Code"] == "NoSuchHealthCheck"
|
|
assert err["Message"] == "A health check with id bad-id does not exist."
|