second first commit
This commit is contained in:
@@ -0,0 +1,186 @@
|
||||
"""Neptune cluster and instance integration tests."""
|
||||
|
||||
import pytest
|
||||
from botocore.exceptions import ClientError
|
||||
|
||||
|
||||
class TestNeptuneCluster:
|
||||
"""Test Neptune DB cluster operations."""
|
||||
|
||||
def test_create_cluster(self, neptune_client, unique_name):
|
||||
"""Test CreateDBCluster returns a valid cluster descriptor."""
|
||||
cluster_id = f"pytest-{unique_name}"
|
||||
|
||||
try:
|
||||
response = neptune_client.create_db_cluster(
|
||||
DBClusterIdentifier=cluster_id,
|
||||
Engine="neptune",
|
||||
)
|
||||
cluster = response["DBCluster"]
|
||||
assert cluster["DBClusterIdentifier"] == cluster_id
|
||||
assert cluster["Engine"] == "neptune"
|
||||
assert cluster["Status"] == "available"
|
||||
assert cluster["DBClusterArn"].startswith("arn:aws:neptune:")
|
||||
assert cluster["Port"] > 0
|
||||
finally:
|
||||
neptune_client.delete_db_cluster(
|
||||
DBClusterIdentifier=cluster_id, SkipFinalSnapshot=True
|
||||
)
|
||||
|
||||
def test_create_cluster_duplicate_fails(self, neptune_client, unique_name):
|
||||
"""Test CreateDBCluster fails with DBClusterAlreadyExistsFault on duplicate."""
|
||||
cluster_id = f"pytest-{unique_name}"
|
||||
|
||||
neptune_client.create_db_cluster(
|
||||
DBClusterIdentifier=cluster_id, Engine="neptune"
|
||||
)
|
||||
try:
|
||||
with pytest.raises(ClientError) as exc_info:
|
||||
neptune_client.create_db_cluster(
|
||||
DBClusterIdentifier=cluster_id, Engine="neptune"
|
||||
)
|
||||
assert exc_info.value.response["Error"]["Code"] == "DBClusterAlreadyExistsFault"
|
||||
finally:
|
||||
neptune_client.delete_db_cluster(
|
||||
DBClusterIdentifier=cluster_id, SkipFinalSnapshot=True
|
||||
)
|
||||
|
||||
def test_describe_clusters(self, neptune_client, unique_name):
|
||||
"""Test DescribeDBClusters lists created cluster."""
|
||||
cluster_id = f"pytest-{unique_name}"
|
||||
|
||||
neptune_client.create_db_cluster(
|
||||
DBClusterIdentifier=cluster_id, Engine="neptune"
|
||||
)
|
||||
try:
|
||||
response = neptune_client.describe_db_clusters(
|
||||
DBClusterIdentifier=cluster_id
|
||||
)
|
||||
clusters = response["DBClusters"]
|
||||
assert len(clusters) == 1
|
||||
assert clusters[0]["DBClusterIdentifier"] == cluster_id
|
||||
finally:
|
||||
neptune_client.delete_db_cluster(
|
||||
DBClusterIdentifier=cluster_id, SkipFinalSnapshot=True
|
||||
)
|
||||
|
||||
def test_modify_cluster(self, neptune_client, unique_name):
|
||||
"""Test ModifyDBCluster updates cluster properties."""
|
||||
cluster_id = f"pytest-{unique_name}"
|
||||
|
||||
neptune_client.create_db_cluster(
|
||||
DBClusterIdentifier=cluster_id, Engine="neptune"
|
||||
)
|
||||
try:
|
||||
response = neptune_client.modify_db_cluster(
|
||||
DBClusterIdentifier=cluster_id,
|
||||
EnableIAMDatabaseAuthentication=True,
|
||||
)
|
||||
assert response["DBCluster"]["IAMDatabaseAuthenticationEnabled"] is True
|
||||
finally:
|
||||
neptune_client.delete_db_cluster(
|
||||
DBClusterIdentifier=cluster_id, SkipFinalSnapshot=True
|
||||
)
|
||||
|
||||
def test_delete_cluster_with_instances_fails(self, neptune_client, unique_name):
|
||||
"""Test DeleteDBCluster fails when instances still exist."""
|
||||
cluster_id = f"pytest-{unique_name}"
|
||||
instance_id = f"pytest-inst-{unique_name}"
|
||||
|
||||
neptune_client.create_db_cluster(
|
||||
DBClusterIdentifier=cluster_id, Engine="neptune"
|
||||
)
|
||||
neptune_client.create_db_instance(
|
||||
DBInstanceIdentifier=instance_id,
|
||||
DBClusterIdentifier=cluster_id,
|
||||
DBInstanceClass="db.r5.large",
|
||||
Engine="neptune",
|
||||
)
|
||||
try:
|
||||
with pytest.raises(ClientError) as exc_info:
|
||||
neptune_client.delete_db_cluster(
|
||||
DBClusterIdentifier=cluster_id, SkipFinalSnapshot=True
|
||||
)
|
||||
assert exc_info.value.response["Error"]["Code"] == "InvalidDBClusterStateFault"
|
||||
finally:
|
||||
neptune_client.delete_db_instance(DBInstanceIdentifier=instance_id)
|
||||
neptune_client.delete_db_cluster(
|
||||
DBClusterIdentifier=cluster_id, SkipFinalSnapshot=True
|
||||
)
|
||||
|
||||
|
||||
class TestNeptuneInstance:
|
||||
"""Test Neptune DB instance operations."""
|
||||
|
||||
@pytest.fixture
|
||||
def neptune_cluster(self, neptune_client, unique_name):
|
||||
"""Create and tear down a Neptune cluster for instance tests."""
|
||||
cluster_id = f"pytest-cluster-{unique_name}"
|
||||
neptune_client.create_db_cluster(
|
||||
DBClusterIdentifier=cluster_id, Engine="neptune"
|
||||
)
|
||||
yield cluster_id
|
||||
try:
|
||||
neptune_client.delete_db_cluster(
|
||||
DBClusterIdentifier=cluster_id, SkipFinalSnapshot=True
|
||||
)
|
||||
except ClientError:
|
||||
pass
|
||||
|
||||
def test_create_instance(self, neptune_client, neptune_cluster, unique_name):
|
||||
"""Test CreateDBInstance returns a valid instance descriptor."""
|
||||
instance_id = f"pytest-inst-{unique_name}"
|
||||
|
||||
try:
|
||||
response = neptune_client.create_db_instance(
|
||||
DBInstanceIdentifier=instance_id,
|
||||
DBClusterIdentifier=neptune_cluster,
|
||||
DBInstanceClass="db.r5.large",
|
||||
Engine="neptune",
|
||||
)
|
||||
instance = response["DBInstance"]
|
||||
assert instance["DBInstanceIdentifier"] == instance_id
|
||||
assert instance["DBClusterIdentifier"] == neptune_cluster
|
||||
assert instance["DBInstanceStatus"] == "available"
|
||||
assert instance["DBInstanceArn"].startswith("arn:aws:neptune:")
|
||||
finally:
|
||||
neptune_client.delete_db_instance(DBInstanceIdentifier=instance_id)
|
||||
|
||||
def test_describe_instances(self, neptune_client, neptune_cluster, unique_name):
|
||||
"""Test DescribeDBInstances lists created instance."""
|
||||
instance_id = f"pytest-inst-{unique_name}"
|
||||
|
||||
neptune_client.create_db_instance(
|
||||
DBInstanceIdentifier=instance_id,
|
||||
DBClusterIdentifier=neptune_cluster,
|
||||
DBInstanceClass="db.r5.large",
|
||||
Engine="neptune",
|
||||
)
|
||||
try:
|
||||
response = neptune_client.describe_db_instances(
|
||||
DBInstanceIdentifier=instance_id
|
||||
)
|
||||
instances = response["DBInstances"]
|
||||
assert len(instances) == 1
|
||||
assert instances[0]["DBInstanceIdentifier"] == instance_id
|
||||
finally:
|
||||
neptune_client.delete_db_instance(DBInstanceIdentifier=instance_id)
|
||||
|
||||
def test_modify_instance(self, neptune_client, neptune_cluster, unique_name):
|
||||
"""Test ModifyDBInstance updates instance class."""
|
||||
instance_id = f"pytest-inst-{unique_name}"
|
||||
|
||||
neptune_client.create_db_instance(
|
||||
DBInstanceIdentifier=instance_id,
|
||||
DBClusterIdentifier=neptune_cluster,
|
||||
DBInstanceClass="db.r5.large",
|
||||
Engine="neptune",
|
||||
)
|
||||
try:
|
||||
response = neptune_client.modify_db_instance(
|
||||
DBInstanceIdentifier=instance_id,
|
||||
DBInstanceClass="db.r5.xlarge",
|
||||
)
|
||||
assert response["DBInstance"]["DBInstanceClass"] == "db.r5.xlarge"
|
||||
finally:
|
||||
neptune_client.delete_db_instance(DBInstanceIdentifier=instance_id)
|
||||
Reference in New Issue
Block a user