moto/tests/test_servicediscovery/test_servicediscovery_service.py
2024-01-27 19:38:09 +00:00

207 lines
6.8 KiB
Python

import boto3
import pytest
from botocore.exceptions import ClientError
from moto import mock_aws
# See our Development Tips on writing tests for hints on how to write good tests:
# http://docs.getmoto.org/en/latest/docs/contributing/development_tips/tests.html
@mock_aws
def test_create_service_minimal():
client = boto3.client("servicediscovery", region_name="ap-southeast-1")
operation_id = client.create_http_namespace(Name="mynamespace")["OperationId"]
namespace_id = client.get_operation(OperationId=operation_id)["Operation"][
"Targets"
]["NAMESPACE"]
resp = client.create_service(Name="my service", NamespaceId=namespace_id)
assert "Service" in resp
assert "Id" in resp["Service"]
assert "Arn" in resp["Service"]
assert resp["Service"]["Name"] == "my service"
assert resp["Service"]["NamespaceId"] == namespace_id
assert "CreateDate" in resp["Service"]
@mock_aws
def test_create_service():
client = boto3.client("servicediscovery", region_name="ap-southeast-1")
operation_id = client.create_http_namespace(Name="mynamespace")["OperationId"]
namespace_id = client.get_operation(OperationId=operation_id)["Operation"][
"Targets"
]["NAMESPACE"]
resp = client.create_service(
Name="my service",
CreatorRequestId="crid",
Description="my service",
DnsConfig={
"NamespaceId": namespace_id,
"RoutingPolicy": "WEIGHTED",
"DnsRecords": [{"Type": "SRV", "TTL": 0}],
},
HealthCheckConfig={"Type": "TCP", "ResourcePath": "/sth"},
HealthCheckCustomConfig={"FailureThreshold": 125},
Type="HTTP",
)
assert "Service" in resp
assert "Id" in resp["Service"]
assert "Arn" in resp["Service"]
assert resp["Service"]["Name"] == "my service"
assert "NamespaceId" not in resp["Service"]
assert resp["Service"]["Description"] == "my service"
assert resp["Service"]["DnsConfig"] == {
"NamespaceId": namespace_id,
"RoutingPolicy": "WEIGHTED",
"DnsRecords": [{"Type": "SRV", "TTL": 0}],
}
assert resp["Service"]["HealthCheckConfig"] == {
"Type": "TCP",
"ResourcePath": "/sth",
}
assert resp["Service"]["HealthCheckCustomConfig"] == {"FailureThreshold": 125}
assert resp["Service"]["Type"] == "HTTP"
assert resp["Service"]["CreatorRequestId"] == "crid"
@mock_aws
def test_get_service():
client = boto3.client("servicediscovery", region_name="ap-southeast-1")
operation_id = client.create_http_namespace(Name="mynamespace")["OperationId"]
namespace_id = client.get_operation(OperationId=operation_id)["Operation"][
"Targets"
]["NAMESPACE"]
service_id = client.create_service(Name="my service", NamespaceId=namespace_id)[
"Service"
]["Id"]
resp = client.get_service(Id=service_id)
assert "Service" in resp
assert "Id" in resp["Service"]
assert "Arn" in resp["Service"]
assert resp["Service"]["Name"] == "my service"
assert resp["Service"]["NamespaceId"] == namespace_id
@mock_aws
def test_get_unknown_service():
client = boto3.client("servicediscovery", region_name="ap-southeast-1")
with pytest.raises(ClientError) as exc:
client.get_service(Id="unknown")
err = exc.value.response["Error"]
assert err["Code"] == "ServiceNotFound"
assert err["Message"] == "unknown"
@mock_aws
def test_delete_service():
client = boto3.client("servicediscovery", region_name="eu-west-1")
operation_id = client.create_http_namespace(Name="mynamespace")["OperationId"]
namespace_id = client.get_operation(OperationId=operation_id)["Operation"][
"Targets"
]["NAMESPACE"]
service_id = client.create_service(Name="my service", NamespaceId=namespace_id)[
"Service"
]["Id"]
client.delete_service(Id=service_id)
with pytest.raises(ClientError) as exc:
client.get_service(Id=service_id)
err = exc.value.response["Error"]
assert err["Code"] == "ServiceNotFound"
assert err["Message"] == service_id
@mock_aws
def test_update_service_description():
client = boto3.client("servicediscovery", region_name="ap-southeast-1")
operation_id = client.create_http_namespace(Name="mynamespace")["OperationId"]
namespace_id = client.get_operation(OperationId=operation_id)["Operation"][
"Targets"
]["NAMESPACE"]
service_id = client.create_service(
Name="my service",
NamespaceId=namespace_id,
Description="first desc",
DnsConfig={
"NamespaceId": namespace_id,
"RoutingPolicy": "WEIGHTED",
"DnsRecords": [{"Type": "SRV", "TTL": 0}],
},
HealthCheckConfig={"Type": "TCP", "ResourcePath": "/sth"},
)["Service"]["Id"]
client.update_service(Id=service_id, Service={"Description": "updated desc"})
resp = client.get_service(Id=service_id)
assert "Service" in resp
assert resp["Service"]["Id"] == service_id
assert "Arn" in resp["Service"]
assert resp["Service"]["Name"] == "my service"
assert resp["Service"]["NamespaceId"] == namespace_id
assert resp["Service"]["Description"] == "updated desc"
# From the docs:
# If you omit any existing DnsRecords or HealthCheckConfig
# configurations from an UpdateService request,
# the configurations are deleted from the service.
assert "DnsConfig" not in resp["Service"]
assert resp["Service"]["HealthCheckConfig"] == {
"Type": "TCP",
"ResourcePath": "/sth",
}
@mock_aws
def test_update_service_others():
client = boto3.client("servicediscovery", region_name="ap-southeast-1")
operation_id = client.create_http_namespace(Name="mynamespace")["OperationId"]
namespace_id = client.get_operation(OperationId=operation_id)["Operation"][
"Targets"
]["NAMESPACE"]
service_id = client.create_service(
Name="my service",
NamespaceId=namespace_id,
Description="first desc",
DnsConfig={
"RoutingPolicy": "WEIGHTED",
"DnsRecords": [{"Type": "SRV", "TTL": 0}],
},
)["Service"]["Id"]
client.update_service(
Id=service_id,
Service={
"DnsConfig": {"DnsRecords": [{"Type": "SRV", "TTL": 12}]},
"HealthCheckConfig": {"Type": "TCP", "ResourcePath": "/sth"},
},
)
resp = client.get_service(Id=service_id)
assert "Service" in resp
assert resp["Service"]["Id"] == service_id
assert "Arn" in resp["Service"]
assert resp["Service"]["Name"] == "my service"
assert resp["Service"]["NamespaceId"] == namespace_id
assert resp["Service"]["Description"] == "first desc"
assert resp["Service"]["DnsConfig"] == (
{"RoutingPolicy": "WEIGHTED", "DnsRecords": [{"Type": "SRV", "TTL": 12}]}
)
assert resp["Service"]["HealthCheckConfig"] == {
"Type": "TCP",
"ResourcePath": "/sth",
}