moto/tests/test_servicediscovery/test_servicediscovery_httpnamespaces.py

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

293 lines
9.3 KiB
Python
Raw Permalink Normal View History

import re
import boto3
import pytest
from botocore.exceptions import ClientError
2024-01-07 12:03:33 +00:00
from moto import mock_aws
2022-08-13 09:49:43 +00:00
from moto.core import DEFAULT_ACCOUNT_ID as ACCOUNT_ID
# 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
2024-01-07 12:03:33 +00:00
@mock_aws
def test_create_http_namespace():
client = boto3.client("servicediscovery", region_name="eu-west-1")
client.create_http_namespace(Name="mynamespace")
resp = client.list_namespaces()
assert len(resp["Namespaces"]) == 1
namespace = resp["Namespaces"][0]
assert re.match("ns-[a-z0-9]{16}", namespace["Id"])
assert re.match(
f"arn:aws:servicediscovery:eu-west-1:{ACCOUNT_ID}:namespace/{namespace['Id']}",
namespace["Arn"],
)
assert namespace["Name"] == "mynamespace"
assert namespace["Type"] == "HTTP"
assert "CreateDate" in namespace
assert "Properties" in namespace
props = namespace["Properties"]
assert props["DnsProperties"] == {"SOA": {}}
assert props["HttpProperties"] == {"HttpName": "mynamespace"}
2024-01-07 12:03:33 +00:00
@mock_aws
def test_get_http_namespace_minimal():
client = boto3.client("servicediscovery", region_name="eu-west-1")
client.create_http_namespace(Name="mynamespace")
ns_id = client.list_namespaces()["Namespaces"][0]["Id"]
resp = client.get_namespace(Id=ns_id)
assert "Namespace" in resp
namespace = resp["Namespace"]
assert re.match(ns_id, namespace["Id"])
assert re.match(
f"arn:aws:servicediscovery:eu-west-1:{ACCOUNT_ID}:namespace/{namespace['Id']}",
namespace["Arn"],
)
assert namespace["Name"] == "mynamespace"
assert namespace["Type"] == "HTTP"
assert "CreateDate" in namespace
assert "CreatorRequestId" in namespace
assert "Properties" in namespace
props = namespace["Properties"]
assert props["DnsProperties"] == {"SOA": {}}
assert props["HttpProperties"] == {"HttpName": "mynamespace"}
assert "Description" not in namespace
2024-01-07 12:03:33 +00:00
@mock_aws
def test_get_http_namespace():
client = boto3.client("servicediscovery", region_name="eu-west-1")
client.create_http_namespace(
Name="mynamespace", CreatorRequestId="crid", Description="mu fancy namespace"
)
ns_id = client.list_namespaces()["Namespaces"][0]["Id"]
resp = client.get_namespace(Id=ns_id)
assert "Namespace" in resp
namespace = resp["Namespace"]
assert re.match(ns_id, namespace["Id"])
assert re.match(
f"arn:aws:servicediscovery:eu-west-1:{ACCOUNT_ID}:namespace/{namespace['Id']}",
namespace["Arn"],
)
assert namespace["Name"] == "mynamespace"
assert namespace["Type"] == "HTTP"
assert "CreateDate" in namespace
assert namespace["CreatorRequestId"] == "crid"
assert namespace["Description"] == "mu fancy namespace"
assert "Properties" in namespace
props = namespace["Properties"]
assert props["DnsProperties"] == {"SOA": {}}
assert props["HttpProperties"] == {"HttpName": "mynamespace"}
2024-01-07 12:03:33 +00:00
@mock_aws
def test_delete_namespace():
client = boto3.client("servicediscovery", region_name="eu-west-1")
client.create_http_namespace(Name="mynamespace")
ns_id = client.list_namespaces()["Namespaces"][0]["Id"]
resp = client.delete_namespace(Id=ns_id)
assert "OperationId" in resp
# Calling delete again while this is in progress results in an error:
# Another operation of type DeleteNamespace and id
# dlmpkcn33aovnztwdpsdplgtheuhgcap-k6x64euq is in progress
# list_operations is empty after successfull deletion - old operations
# from this namespace should be deleted
# list_namespaces is also empty (obvs)
assert client.list_namespaces()["Namespaces"] == []
assert client.list_operations()["Operations"] == []
2024-01-07 12:03:33 +00:00
@mock_aws
def test_delete_unknown_namespace():
client = boto3.client("servicediscovery", region_name="eu-west-1")
with pytest.raises(ClientError) as exc:
client.delete_namespace(Id="unknown")
err = exc.value.response["Error"]
assert err["Code"] == "NamespaceNotFound"
assert err["Message"] == "unknown"
2024-01-07 12:03:33 +00:00
@mock_aws
def test_get_unknown_namespace():
client = boto3.client("servicediscovery", region_name="eu-west-1")
with pytest.raises(ClientError) as exc:
client.get_namespace(Id="unknown")
err = exc.value.response["Error"]
assert err["Code"] == "NamespaceNotFound"
assert err["Message"] == "unknown"
2024-01-07 12:03:33 +00:00
@mock_aws
def test_create_private_dns_namespace_minimal():
client = boto3.client("servicediscovery", region_name="eu-west-1")
client.create_private_dns_namespace(Name="dns_ns", Vpc="vpc_id")
ns_id = client.list_namespaces()["Namespaces"][0]["Id"]
resp = client.get_namespace(Id=ns_id)
assert "Namespace" in resp
namespace = resp["Namespace"]
assert re.match(ns_id, namespace["Id"])
assert namespace["Name"] == "dns_ns"
assert namespace["Type"] == "DNS_PRIVATE"
assert "Properties" in namespace
props = namespace["Properties"]
assert "DnsProperties" in props
assert "HostedZoneId" in props["DnsProperties"]
assert "SOA" not in props["DnsProperties"]
2024-01-07 12:03:33 +00:00
@mock_aws
def test_create_private_dns_namespace():
client = boto3.client("servicediscovery", region_name="eu-west-1")
client.create_private_dns_namespace(
Name="dns_ns",
Vpc="vpc_id",
Description="my private dns",
Properties={"DnsProperties": {"SOA": {"TTL": 123}}},
)
ns_id = client.list_namespaces()["Namespaces"][0]["Id"]
resp = client.get_namespace(Id=ns_id)
assert "Namespace" in resp
namespace = resp["Namespace"]
assert re.match(ns_id, namespace["Id"])
assert namespace["Name"] == "dns_ns"
assert namespace["Type"] == "DNS_PRIVATE"
assert namespace["Description"] == "my private dns"
assert "Properties" in namespace
props = namespace["Properties"]
assert "DnsProperties" in props
assert "HostedZoneId" in props["DnsProperties"]
assert props["DnsProperties"]["SOA"] == {"TTL": 123}
2024-01-07 12:03:33 +00:00
@mock_aws
2023-08-21 20:33:16 +00:00
def test_update_private_dns_namespace():
client = boto3.client("servicediscovery", region_name="eu-west-1")
client.create_private_dns_namespace(
Name="dns_ns",
Vpc="vpc_id",
Description="my private dns",
Properties={"DnsProperties": {"SOA": {"TTL": 123}}},
)
ns_id = client.list_namespaces()["Namespaces"][0]["Id"]
client.update_private_dns_namespace(
Id=ns_id,
Namespace={
"Description": "updated dns",
"Properties": {"DnsProperties": {"SOA": {"TTL": 654}}},
},
)
namespace = client.get_namespace(Id=ns_id)["Namespace"]
assert namespace["Description"] == "updated dns"
props = namespace["Properties"]
assert props["DnsProperties"]["SOA"] == {"TTL": 654}
2024-01-07 12:03:33 +00:00
@mock_aws
def test_create_private_dns_namespace_with_duplicate_vpc():
client = boto3.client("servicediscovery", region_name="eu-west-1")
client.create_private_dns_namespace(Name="dns_ns", Vpc="vpc_id")
with pytest.raises(ClientError) as exc:
client.create_private_dns_namespace(Name="sth else", Vpc="vpc_id")
err = exc.value.response["Error"]
assert err["Code"] == "ConflictingDomainExists"
2024-01-07 12:03:33 +00:00
@mock_aws
def test_create_public_dns_namespace_minimal():
client = boto3.client("servicediscovery", region_name="us-east-2")
client.create_public_dns_namespace(Name="public_dns_ns")
ns_id = client.list_namespaces()["Namespaces"][0]["Id"]
resp = client.get_namespace(Id=ns_id)
assert "Namespace" in resp
namespace = resp["Namespace"]
assert re.match(ns_id, namespace["Id"])
assert namespace["Name"] == "public_dns_ns"
assert namespace["Type"] == "DNS_PUBLIC"
2024-01-07 12:03:33 +00:00
@mock_aws
def test_create_public_dns_namespace():
client = boto3.client("servicediscovery", region_name="us-east-2")
client.create_public_dns_namespace(
Name="public_dns_ns",
CreatorRequestId="cri",
Description="my public dns",
Properties={"DnsProperties": {"SOA": {"TTL": 124}}},
)
ns_id = client.list_namespaces()["Namespaces"][0]["Id"]
resp = client.get_namespace(Id=ns_id)
assert "Namespace" in resp
namespace = resp["Namespace"]
assert re.match(ns_id, namespace["Id"])
assert namespace["Name"] == "public_dns_ns"
assert namespace["Type"] == "DNS_PUBLIC"
assert namespace["Description"] == "my public dns"
assert namespace["CreatorRequestId"] == "cri"
assert "DnsProperties" in namespace["Properties"]
dns_props = namespace["Properties"]["DnsProperties"]
assert dns_props == {"HostedZoneId": "hzi", "SOA": {"TTL": 124}}
2023-08-21 20:33:16 +00:00
2024-01-07 12:03:33 +00:00
@mock_aws
2023-08-21 20:33:16 +00:00
def test_update_public_dns_namespace():
client = boto3.client("servicediscovery", region_name="us-east-2")
client.create_public_dns_namespace(
Name="public_dns_ns",
CreatorRequestId="cri",
Description="my public dns",
Properties={"DnsProperties": {"SOA": {"TTL": 124}}},
)
ns_id = client.list_namespaces()["Namespaces"][0]["Id"]
client.update_public_dns_namespace(
Id=ns_id,
Namespace={
"Description": "updated dns",
"Properties": {"DnsProperties": {"SOA": {"TTL": 987}}},
},
)
namespace = client.get_namespace(Id=ns_id)["Namespace"]
assert namespace["Description"] == "updated dns"
dns_props = namespace["Properties"]["DnsProperties"]
assert dns_props == {"SOA": {"TTL": 987}}