moto/tests/test_route53/test_route53_healthchecks.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

324 lines
9.9 KiB
Python
Raw Normal View History

import boto3
2022-06-12 17:53:27 +00:00
import pytest
from botocore.exceptions import ClientError
2024-01-07 12:03:33 +00:00
from moto import mock_aws
2024-01-07 12:03:33 +00:00
@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
2024-01-07 12:03:33 +00:00
@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",
2022-06-19 13:43:57 +00:00
"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
2024-01-07 12:03:33 +00:00
@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
2024-01-07 12:03:33 +00:00
@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"],
]
2022-06-12 17:53:27 +00:00
2024-01-07 12:03:33 +00:00
@mock_aws
2022-06-12 17:53:27 +00:00
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
2022-06-12 17:53:27 +00:00
2024-01-07 12:03:33 +00:00
@mock_aws
2022-06-12 17:53:27 +00:00
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."
2022-06-12 17:53:27 +00:00
2024-01-07 12:03:33 +00:00
@mock_aws
2022-06-19 13:43:57 +00:00
def test_list_health_checks():
conn = boto3.client("route53", region_name="us-east-1")
assert len(conn.list_health_checks()["HealthChecks"]) == 0
2022-06-19 13:43:57 +00:00
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]
2022-06-19 13:43:57 +00:00
2024-01-07 12:03:33 +00:00
@mock_aws
2022-06-19 13:43:57 +00:00
def test_delete_health_checks():
conn = boto3.client("route53", region_name="us-east-1")
assert len(conn.list_health_checks()["HealthChecks"]) == 0
2022-06-19 13:43:57 +00:00
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
2022-06-19 13:43:57 +00:00
2024-01-07 12:03:33 +00:00
@mock_aws
2022-06-19 13:43:57 +00:00
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"
]
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"]
2024-01-07 12:03:33 +00:00
@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."