201 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			201 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from botocore.exceptions import ClientError
 | |
| import boto3
 | |
| import sure  # noqa # pylint: disable=unused-import
 | |
| import pytest
 | |
| 
 | |
| from moto import mock_dms
 | |
| 
 | |
| 
 | |
| @mock_dms
 | |
| def test_create_and_get_replication_task():
 | |
|     client = boto3.client("dms", region_name="us-east-1")
 | |
| 
 | |
|     client.create_replication_task(
 | |
|         ReplicationTaskIdentifier="test",
 | |
|         SourceEndpointArn="source-endpoint-arn",
 | |
|         TargetEndpointArn="target-endpoint-arn",
 | |
|         ReplicationInstanceArn="replication-instance-arn",
 | |
|         MigrationType="full-load",
 | |
|         TableMappings='{"rules":[]}',
 | |
|     )
 | |
| 
 | |
|     tasks = client.describe_replication_tasks(
 | |
|         Filters=[{"Name": "replication-task-id", "Values": ["test"]}]
 | |
|     )
 | |
| 
 | |
|     tasks["ReplicationTasks"].should.have.length_of(1)
 | |
|     task = tasks["ReplicationTasks"][0]
 | |
|     task["ReplicationTaskIdentifier"].should.equal("test")
 | |
|     task["SourceEndpointArn"].should.equal("source-endpoint-arn")
 | |
|     task["TargetEndpointArn"].should.equal("target-endpoint-arn")
 | |
|     task["ReplicationInstanceArn"].should.equal("replication-instance-arn")
 | |
|     task["MigrationType"].should.equal("full-load")
 | |
|     task["Status"].should.equal("creating")
 | |
| 
 | |
| 
 | |
| @mock_dms
 | |
| def test_create_existing_replication_task_throws_error():
 | |
|     client = boto3.client("dms", region_name="us-east-1")
 | |
| 
 | |
|     client.create_replication_task(
 | |
|         ReplicationTaskIdentifier="test",
 | |
|         SourceEndpointArn="source-endpoint-arn",
 | |
|         TargetEndpointArn="target-endpoint-arn",
 | |
|         ReplicationInstanceArn="replication-instance-arn",
 | |
|         MigrationType="full-load",
 | |
|         TableMappings='{"rules":[]}',
 | |
|     )
 | |
| 
 | |
|     with pytest.raises(ClientError) as ex:
 | |
|         client.create_replication_task(
 | |
|             ReplicationTaskIdentifier="test",
 | |
|             SourceEndpointArn="source-endpoint-arn",
 | |
|             TargetEndpointArn="target-endpoint-arn",
 | |
|             ReplicationInstanceArn="replication-instance-arn",
 | |
|             MigrationType="full-load",
 | |
|             TableMappings='{"rules":[]}',
 | |
|         )
 | |
| 
 | |
|     ex.value.operation_name.should.equal("CreateReplicationTask")
 | |
|     ex.value.response["Error"]["Code"].should.equal("ResourceAlreadyExistsFault")
 | |
|     ex.value.response["Error"]["Message"].should.equal(
 | |
|         "The resource you are attempting to create already exists."
 | |
|     )
 | |
| 
 | |
| 
 | |
| @mock_dms
 | |
| def test_start_replication_task():
 | |
|     client = boto3.client("dms", region_name="us-east-1")
 | |
| 
 | |
|     response = client.create_replication_task(
 | |
|         ReplicationTaskIdentifier="test",
 | |
|         SourceEndpointArn="source-endpoint-arn",
 | |
|         TargetEndpointArn="target-endpoint-arn",
 | |
|         ReplicationInstanceArn="replication-instance-arn",
 | |
|         MigrationType="full-load",
 | |
|         TableMappings='{"rules":[]}',
 | |
|     )
 | |
|     task_arn = response["ReplicationTask"]["ReplicationTaskArn"]
 | |
|     client.start_replication_task(
 | |
|         ReplicationTaskArn=task_arn, StartReplicationTaskType="start-replication"
 | |
|     )
 | |
|     tasks = client.describe_replication_tasks(
 | |
|         Filters=[{"Name": "replication-task-arn", "Values": [task_arn]}]
 | |
|     )
 | |
| 
 | |
|     tasks["ReplicationTasks"][0]["Status"].should.equal("running")
 | |
| 
 | |
| 
 | |
| @mock_dms
 | |
| def test_start_replication_task_throws_resource_not_found_error():
 | |
|     client = boto3.client("dms", region_name="us-east-1")
 | |
| 
 | |
|     with pytest.raises(ClientError) as ex:
 | |
|         client.start_replication_task(
 | |
|             ReplicationTaskArn="does-not-exist",
 | |
|             StartReplicationTaskType="start-replication",
 | |
|         )
 | |
| 
 | |
|     ex.value.operation_name.should.equal("StartReplicationTask")
 | |
|     ex.value.response["Error"]["Code"].should.equal("ResourceNotFoundFault")
 | |
|     ex.value.response["Error"]["Message"].should.equal(
 | |
|         "Replication task could not be found."
 | |
|     )
 | |
| 
 | |
| 
 | |
| @mock_dms
 | |
| def test_stop_replication_task_throws_invalid_state_error():
 | |
|     client = boto3.client("dms", region_name="us-east-1")
 | |
| 
 | |
|     response = client.create_replication_task(
 | |
|         ReplicationTaskIdentifier="test",
 | |
|         SourceEndpointArn="source-endpoint-arn",
 | |
|         TargetEndpointArn="target-endpoint-arn",
 | |
|         ReplicationInstanceArn="replication-instance-arn",
 | |
|         MigrationType="full-load",
 | |
|         TableMappings='{"rules":[]}',
 | |
|     )
 | |
|     task_arn = response["ReplicationTask"]["ReplicationTaskArn"]
 | |
| 
 | |
|     with pytest.raises(ClientError) as ex:
 | |
|         client.stop_replication_task(ReplicationTaskArn=task_arn)
 | |
| 
 | |
|     ex.value.operation_name.should.equal("StopReplicationTask")
 | |
|     ex.value.response["Error"]["Code"].should.equal("InvalidResourceStateFault")
 | |
|     ex.value.response["Error"]["Message"].should.equal(
 | |
|         "Replication task is not running"
 | |
|     )
 | |
| 
 | |
| 
 | |
| @mock_dms
 | |
| def test_stop_replication_task_throws_resource_not_found_error():
 | |
|     client = boto3.client("dms", region_name="us-east-1")
 | |
| 
 | |
|     with pytest.raises(ClientError) as ex:
 | |
|         client.stop_replication_task(ReplicationTaskArn="does-not-exist")
 | |
| 
 | |
|     ex.value.operation_name.should.equal("StopReplicationTask")
 | |
|     ex.value.response["Error"]["Code"].should.equal("ResourceNotFoundFault")
 | |
|     ex.value.response["Error"]["Message"].should.equal(
 | |
|         "Replication task could not be found."
 | |
|     )
 | |
| 
 | |
| 
 | |
| @mock_dms
 | |
| def test_stop_replication_task():
 | |
|     client = boto3.client("dms", region_name="us-east-1")
 | |
| 
 | |
|     response = client.create_replication_task(
 | |
|         ReplicationTaskIdentifier="test",
 | |
|         SourceEndpointArn="source-endpoint-arn",
 | |
|         TargetEndpointArn="target-endpoint-arn",
 | |
|         ReplicationInstanceArn="replication-instance-arn",
 | |
|         MigrationType="full-load",
 | |
|         TableMappings='{"rules":[]}',
 | |
|     )
 | |
|     task_arn = response["ReplicationTask"]["ReplicationTaskArn"]
 | |
|     client.start_replication_task(
 | |
|         ReplicationTaskArn=task_arn, StartReplicationTaskType="start-replication"
 | |
|     )
 | |
|     client.stop_replication_task(ReplicationTaskArn=task_arn)
 | |
|     tasks = client.describe_replication_tasks(
 | |
|         Filters=[{"Name": "replication-task-arn", "Values": [task_arn]}]
 | |
|     )
 | |
| 
 | |
|     tasks["ReplicationTasks"][0]["Status"].should.equal("stopped")
 | |
| 
 | |
| 
 | |
| @mock_dms
 | |
| def test_delete_replication_task():
 | |
|     client = boto3.client("dms", region_name="us-east-1")
 | |
| 
 | |
|     response = client.create_replication_task(
 | |
|         ReplicationTaskIdentifier="test",
 | |
|         SourceEndpointArn="source-endpoint-arn",
 | |
|         TargetEndpointArn="target-endpoint-arn",
 | |
|         ReplicationInstanceArn="replication-instance-arn",
 | |
|         MigrationType="full-load",
 | |
|         TableMappings='{"rules":[]}',
 | |
|     )
 | |
|     task_arn = response["ReplicationTask"]["ReplicationTaskArn"]
 | |
|     client.delete_replication_task(ReplicationTaskArn=task_arn)
 | |
|     tasks = client.describe_replication_tasks(
 | |
|         Filters=[{"Name": "replication-task-arn", "Values": [task_arn]}]
 | |
|     )
 | |
| 
 | |
|     tasks["ReplicationTasks"].should.have.length_of(0)
 | |
| 
 | |
| 
 | |
| @mock_dms
 | |
| def test_delete_replication_task_throws_resource_not_found_error():
 | |
|     client = boto3.client("dms", region_name="us-east-1")
 | |
| 
 | |
|     with pytest.raises(ClientError) as ex:
 | |
|         client.delete_replication_task(ReplicationTaskArn="does-not-exist")
 | |
| 
 | |
|     ex.value.operation_name.should.equal("DeleteReplicationTask")
 | |
|     ex.value.response["Error"]["Code"].should.equal("ResourceNotFoundFault")
 | |
|     ex.value.response["Error"]["Message"].should.equal(
 | |
|         "Replication task could not be found."
 | |
|     )
 |