209 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			209 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								"""Unit tests for servicediscovery-supported APIs."""
							 | 
						||
| 
								 | 
							
								import boto3
							 | 
						||
| 
								 | 
							
								import pytest
							 | 
						||
| 
								 | 
							
								import sure  # noqa # pylint: disable=unused-import
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from botocore.exceptions import ClientError
							 | 
						||
| 
								 | 
							
								from moto import mock_servicediscovery
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# 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_servicediscovery
							 | 
						||
| 
								 | 
							
								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)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    resp.should.have.key("Service")
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("Id")
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("Arn")
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("Name").equals("my service")
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("NamespaceId").equals(namespace_id)
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("CreateDate")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@mock_servicediscovery
							 | 
						||
| 
								 | 
							
								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",
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    resp.should.have.key("Service")
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("Id")
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("Arn")
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("Name").equals("my service")
							 | 
						||
| 
								 | 
							
								    resp["Service"].shouldnt.have.key("NamespaceId")
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("Description").equals("my service")
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("DnsConfig").equals(
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            "NamespaceId": namespace_id,
							 | 
						||
| 
								 | 
							
								            "RoutingPolicy": "WEIGHTED",
							 | 
						||
| 
								 | 
							
								            "DnsRecords": [{"Type": "SRV", "TTL": 0}],
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("HealthCheckConfig").equals(
							 | 
						||
| 
								 | 
							
								        {"Type": "TCP", "ResourcePath": "/sth"}
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("HealthCheckCustomConfig").equals(
							 | 
						||
| 
								 | 
							
								        {"FailureThreshold": 125}
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("Type").equals("HTTP")
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("CreatorRequestId").equals("crid")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@mock_servicediscovery
							 | 
						||
| 
								 | 
							
								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)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    resp.should.have.key("Service")
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("Id")
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("Arn")
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("Name").equals("my service")
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("NamespaceId").equals(namespace_id)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@mock_servicediscovery
							 | 
						||
| 
								 | 
							
								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"]
							 | 
						||
| 
								 | 
							
								    err["Code"].should.equal("ServiceNotFound")
							 | 
						||
| 
								 | 
							
								    err["Message"].should.equal("unknown")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@mock_servicediscovery
							 | 
						||
| 
								 | 
							
								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"]
							 | 
						||
| 
								 | 
							
								    err["Code"].should.equal("ServiceNotFound")
							 | 
						||
| 
								 | 
							
								    err["Message"].should.equal(service_id)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@mock_servicediscovery
							 | 
						||
| 
								 | 
							
								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)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    resp.should.have.key("Service")
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("Id").equals(service_id)
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("Arn")
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("Name").equals("my service")
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("NamespaceId").equals(namespace_id)
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("Description").equals("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.
							 | 
						||
| 
								 | 
							
								    resp["Service"].shouldnt.have.key("DnsConfig")
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("HealthCheckConfig").equals(
							 | 
						||
| 
								 | 
							
								        {"Type": "TCP", "ResourcePath": "/sth"}
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@mock_servicediscovery
							 | 
						||
| 
								 | 
							
								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)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    resp.should.have.key("Service")
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("Id").equals(service_id)
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("Arn")
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("Name").equals("my service")
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("NamespaceId").equals(namespace_id)
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("Description").equals("first desc")
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("DnsConfig").equals(
							 | 
						||
| 
								 | 
							
								        {"RoutingPolicy": "WEIGHTED", "DnsRecords": [{"Type": "SRV", "TTL": 12}]}
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								    resp["Service"].should.have.key("HealthCheckConfig").equals(
							 | 
						||
| 
								 | 
							
								        {"Type": "TCP", "ResourcePath": "/sth"}
							 | 
						||
| 
								 | 
							
								    )
							 |