| 
									
										
										
										
											2021-05-06 19:33:48 +02:00
										 |  |  | from botocore.exceptions import ClientError | 
					
						
							|  |  |  | import boto3 | 
					
						
							|  |  |  | import pytest | 
					
						
							| 
									
										
										
										
											2023-06-16 16:12:23 +02:00
										 |  |  | import json | 
					
						
							| 
									
										
										
										
											2021-05-06 19:33:48 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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":[]}', | 
					
						
							| 
									
										
										
										
											2023-06-16 16:12:23 +02:00
										 |  |  |         ReplicationTaskSettings='{"Logging":{} }', | 
					
						
							| 
									
										
										
										
											2021-05-06 19:33:48 +02:00
										 |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     tasks = client.describe_replication_tasks( | 
					
						
							|  |  |  |         Filters=[{"Name": "replication-task-id", "Values": ["test"]}] | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-23 15:12:32 +00:00
										 |  |  |     assert len(tasks["ReplicationTasks"]) == 1 | 
					
						
							| 
									
										
										
										
											2021-05-06 19:33:48 +02:00
										 |  |  |     task = tasks["ReplicationTasks"][0] | 
					
						
							| 
									
										
										
										
											2023-06-23 15:12:32 +00:00
										 |  |  |     assert task["ReplicationTaskIdentifier"] == "test" | 
					
						
							|  |  |  |     assert task["SourceEndpointArn"] == "source-endpoint-arn" | 
					
						
							|  |  |  |     assert task["TargetEndpointArn"] == "target-endpoint-arn" | 
					
						
							|  |  |  |     assert task["ReplicationInstanceArn"] == "replication-instance-arn" | 
					
						
							|  |  |  |     assert task["MigrationType"] == "full-load" | 
					
						
							|  |  |  |     assert task["Status"] == "creating" | 
					
						
							|  |  |  |     assert task["TableMappings"] == '{"rules":[]}' | 
					
						
							|  |  |  |     assert isinstance(json.loads(task["TableMappings"]), dict) | 
					
						
							| 
									
										
										
										
											2023-06-16 16:12:23 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-23 15:12:32 +00:00
										 |  |  |     assert task["ReplicationTaskSettings"] == '{"Logging":{} }' | 
					
						
							|  |  |  |     assert isinstance(json.loads(task["ReplicationTaskSettings"]), dict) | 
					
						
							| 
									
										
										
										
											2021-05-06 19:33:48 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @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":[]}', | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-23 15:12:32 +00:00
										 |  |  |     assert ex.value.operation_name == "CreateReplicationTask" | 
					
						
							|  |  |  |     assert ex.value.response["Error"]["Code"] == "ResourceAlreadyExistsFault" | 
					
						
							|  |  |  |     assert ( | 
					
						
							|  |  |  |         ex.value.response["Error"]["Message"] | 
					
						
							|  |  |  |         == "The resource you are attempting to create already exists." | 
					
						
							| 
									
										
										
										
											2021-05-06 19:33:48 +02:00
										 |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @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]}] | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-23 15:12:32 +00:00
										 |  |  |     assert tasks["ReplicationTasks"][0]["Status"] == "running" | 
					
						
							| 
									
										
										
										
											2021-05-06 19:33:48 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @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", | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-23 15:12:32 +00:00
										 |  |  |     assert ex.value.operation_name == "StartReplicationTask" | 
					
						
							|  |  |  |     assert ex.value.response["Error"]["Code"] == "ResourceNotFoundFault" | 
					
						
							|  |  |  |     assert ( | 
					
						
							|  |  |  |         ex.value.response["Error"]["Message"] == "Replication task could not be found." | 
					
						
							| 
									
										
										
										
											2021-05-06 19:33:48 +02:00
										 |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @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) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-23 15:12:32 +00:00
										 |  |  |     assert ex.value.operation_name == "StopReplicationTask" | 
					
						
							|  |  |  |     assert ex.value.response["Error"]["Code"] == "InvalidResourceStateFault" | 
					
						
							|  |  |  |     assert ex.value.response["Error"]["Message"] == "Replication task is not running" | 
					
						
							| 
									
										
										
										
											2021-05-06 19:33:48 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @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") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-23 15:12:32 +00:00
										 |  |  |     assert ex.value.operation_name == "StopReplicationTask" | 
					
						
							|  |  |  |     assert ex.value.response["Error"]["Code"] == "ResourceNotFoundFault" | 
					
						
							|  |  |  |     assert ( | 
					
						
							|  |  |  |         ex.value.response["Error"]["Message"] == "Replication task could not be found." | 
					
						
							| 
									
										
										
										
											2021-05-06 19:33:48 +02:00
										 |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @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]}] | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-23 15:12:32 +00:00
										 |  |  |     assert tasks["ReplicationTasks"][0]["Status"] == "stopped" | 
					
						
							| 
									
										
										
										
											2021-05-06 19:33:48 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @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]}] | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-23 15:12:32 +00:00
										 |  |  |     assert len(tasks["ReplicationTasks"]) == 0 | 
					
						
							| 
									
										
										
										
											2021-05-06 19:33:48 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @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") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-23 15:12:32 +00:00
										 |  |  |     assert ex.value.operation_name == "DeleteReplicationTask" | 
					
						
							|  |  |  |     assert ex.value.response["Error"]["Code"] == "ResourceNotFoundFault" | 
					
						
							|  |  |  |     assert ( | 
					
						
							|  |  |  |         ex.value.response["Error"]["Message"] == "Replication task could not be found." | 
					
						
							| 
									
										
										
										
											2021-05-06 19:33:48 +02:00
										 |  |  |     ) |