moto/tests/test_route53/test_route53_healthchecks.py

323 lines
9.9 KiB
Python

import boto3
import pytest
from botocore.exceptions import ClientError
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,
},
)
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_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",
"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_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"]
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_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"]
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_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"]
assert resp["Id"] == hc_id
assert resp["CallerReference"] == "callref"
assert resp["HealthCheckVersion"] == 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"]
assert err["Code"] == "NoSuchHealthCheck"
assert err["Message"] == "A health check with id unknown does not exist."
@mock_route53
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_route53
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_route53
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_route53
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."