360 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			360 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """Unit tests for backup-supported APIs."""
 | |
| import boto3
 | |
| import pytest
 | |
| from botocore.exceptions import ClientError
 | |
| 
 | |
| from moto import mock_aws
 | |
| 
 | |
| 
 | |
| @mock_aws
 | |
| def test_create_backup_plan():
 | |
|     client = boto3.client("backup", region_name="eu-west-1")
 | |
|     response = client.create_backup_vault(
 | |
|         BackupVaultName="backupvault-foobar",
 | |
|     )
 | |
|     resp = client.create_backup_plan(
 | |
|         BackupPlan={
 | |
|             "BackupPlanName": "backupplan-foobar",
 | |
|             "Rules": [
 | |
|                 {
 | |
|                     "RuleName": "foobar",
 | |
|                     "TargetBackupVaultName": response["BackupVaultName"],
 | |
|                 },
 | |
|             ],
 | |
|         },
 | |
|     )
 | |
|     assert "BackupPlanId" in resp
 | |
|     assert "BackupPlanArn" in resp
 | |
|     assert "CreationDate" in resp
 | |
|     assert "VersionId" in resp
 | |
| 
 | |
| 
 | |
| @mock_aws
 | |
| def test_create_backup_plan_already_exists():
 | |
|     client = boto3.client("backup", region_name="eu-west-1")
 | |
|     backup_plan_name = "backup_plan_foobar"
 | |
|     rules = [
 | |
|         {
 | |
|             "RuleName": "foobar",
 | |
|             "TargetBackupVaultName": "backup-vault-foobar",
 | |
|         },
 | |
|     ]
 | |
|     client.create_backup_plan(
 | |
|         BackupPlan={"BackupPlanName": backup_plan_name, "Rules": rules}
 | |
|     )
 | |
| 
 | |
|     with pytest.raises(ClientError) as exc:
 | |
|         client.create_backup_plan(
 | |
|             BackupPlan={"BackupPlanName": backup_plan_name, "Rules": rules}
 | |
|         )
 | |
|     err = exc.value.response["Error"]
 | |
|     assert err["Code"] == "AlreadyExistsException"
 | |
| 
 | |
| 
 | |
| @mock_aws
 | |
| def test_get_backup_plan():
 | |
|     client = boto3.client("backup", region_name="eu-west-1")
 | |
|     response = client.create_backup_vault(
 | |
|         BackupVaultName="backupvault-foobar",
 | |
|     )
 | |
|     plan = client.create_backup_plan(
 | |
|         BackupPlan={
 | |
|             "BackupPlanName": "backupplan-foobar",
 | |
|             "Rules": [
 | |
|                 {
 | |
|                     "RuleName": "foobar",
 | |
|                     "TargetBackupVaultName": response["BackupVaultName"],
 | |
|                 },
 | |
|             ],
 | |
|         },
 | |
|     )
 | |
|     resp = client.get_backup_plan(
 | |
|         BackupPlanId=plan["BackupPlanId"], VersionId=plan["VersionId"]
 | |
|     )
 | |
|     assert "BackupPlan" in resp
 | |
| 
 | |
| 
 | |
| @mock_aws
 | |
| def test_get_backup_plan_invalid_id():
 | |
|     client = boto3.client("backup", region_name="eu-west-1")
 | |
| 
 | |
|     with pytest.raises(ClientError) as exc:
 | |
|         client.get_backup_plan(BackupPlanId="foobar")
 | |
|     err = exc.value.response["Error"]
 | |
|     assert err["Code"] == "ResourceNotFoundException"
 | |
| 
 | |
| 
 | |
| @mock_aws
 | |
| def test_get_backup_plan_invalid_version_id():
 | |
|     client = boto3.client("backup", region_name="eu-west-1")
 | |
| 
 | |
|     plan = client.create_backup_plan(
 | |
|         BackupPlan={
 | |
|             "BackupPlanName": "backupplan-foobar",
 | |
|             "Rules": [
 | |
|                 {
 | |
|                     "RuleName": "foobar",
 | |
|                     "TargetBackupVaultName": "Backup-vault-foobar",
 | |
|                 },
 | |
|             ],
 | |
|         },
 | |
|     )
 | |
|     with pytest.raises(ClientError) as exc:
 | |
|         client.get_backup_plan(BackupPlanId=plan["BackupPlanId"], VersionId="foobar")
 | |
|     err = exc.value.response["Error"]
 | |
|     assert err["Code"] == "ResourceNotFoundException"
 | |
| 
 | |
| 
 | |
| @mock_aws
 | |
| def test_get_backup_plan_with_multiple_rules():
 | |
|     client = boto3.client("backup", region_name="eu-west-1")
 | |
|     plan = client.create_backup_plan(
 | |
|         BackupPlan={
 | |
|             "BackupPlanName": "backupplan-foobar",
 | |
|             "Rules": [
 | |
|                 {
 | |
|                     "RuleName": "rule1",
 | |
|                     "TargetBackupVaultName": "backupvault-foobar",
 | |
|                     "ScheduleExpression": "cron(0 1 ? * * *)",
 | |
|                     "StartWindowMinutes": 60,
 | |
|                     "CompletionWindowMinutes": 120,
 | |
|                 },
 | |
|                 {
 | |
|                     "RuleName": "rule2",
 | |
|                     "TargetBackupVaultName": "backupvault-foobar",
 | |
|                 },
 | |
|             ],
 | |
|         },
 | |
|     )
 | |
|     resp = client.get_backup_plan(BackupPlanId=plan["BackupPlanId"])
 | |
|     for rule in resp["BackupPlan"]["Rules"]:
 | |
|         assert "ScheduleExpression" in rule
 | |
|         assert "StartWindowMinutes" in rule
 | |
|         assert "CompletionWindowMinutes" in rule
 | |
|         assert "RuleId" in rule
 | |
| 
 | |
| 
 | |
| @mock_aws
 | |
| def test_delete_backup_plan():
 | |
|     client = boto3.client("backup", region_name="eu-west-1")
 | |
|     response = client.create_backup_vault(
 | |
|         BackupVaultName="backupvault-foobar",
 | |
|     )
 | |
|     plan = client.create_backup_plan(
 | |
|         BackupPlan={
 | |
|             "BackupPlanName": "backupplan-foobar",
 | |
|             "Rules": [
 | |
|                 {
 | |
|                     "RuleName": "foobar",
 | |
|                     "TargetBackupVaultName": response["BackupVaultName"],
 | |
|                 },
 | |
|             ],
 | |
|         },
 | |
|     )
 | |
| 
 | |
|     resp = client.delete_backup_plan(BackupPlanId=plan["BackupPlanId"])
 | |
|     assert "BackupPlanId" in resp
 | |
|     assert "BackupPlanArn" in resp
 | |
|     assert "DeletionDate" in resp
 | |
|     assert "VersionId" in resp
 | |
| 
 | |
|     resp = client.get_backup_plan(
 | |
|         BackupPlanId=plan["BackupPlanId"], VersionId=plan["VersionId"]
 | |
|     )
 | |
|     assert "DeletionDate" in resp
 | |
| 
 | |
| 
 | |
| @mock_aws
 | |
| def test_delete_backup_plan_invalid_id():
 | |
|     client = boto3.client("backup", region_name="eu-west-1")
 | |
| 
 | |
|     with pytest.raises(ClientError) as exc:
 | |
|         client.delete_backup_plan(BackupPlanId="foobar")
 | |
|     err = exc.value.response["Error"]
 | |
|     assert err["Code"] == "ResourceNotFoundException"
 | |
| 
 | |
| 
 | |
| @mock_aws
 | |
| def test_list_backup_plans():
 | |
|     client = boto3.client("backup", region_name="eu-west-1")
 | |
|     for i in range(1, 3):
 | |
|         client.create_backup_plan(
 | |
|             BackupPlan={
 | |
|                 "BackupPlanName": f"backup-plan-{i}",
 | |
|                 "Rules": [
 | |
|                     {
 | |
|                         "RuleName": "foobar",
 | |
|                         "TargetBackupVaultName": "backupvault-foobar",
 | |
|                     },
 | |
|                 ],
 | |
|             },
 | |
|         )
 | |
|     resp = client.list_backup_plans()
 | |
|     backup_plans = resp["BackupPlansList"]
 | |
|     assert backup_plans[0]["BackupPlanName"] == "backup-plan-1"
 | |
|     assert backup_plans[1]["BackupPlanName"] == "backup-plan-2"
 | |
|     assert len(backup_plans) == 2
 | |
|     assert resp["ResponseMetadata"]["HTTPStatusCode"] == 200
 | |
| 
 | |
| 
 | |
| @mock_aws
 | |
| def test_list_backup_plans_without_include_deleted():
 | |
|     client = boto3.client("backup", region_name="eu-west-1")
 | |
| 
 | |
|     for i in range(1, 3):
 | |
|         client.create_backup_plan(
 | |
|             BackupPlan={
 | |
|                 "BackupPlanName": f"backup-plan-{i}",
 | |
|                 "Rules": [
 | |
|                     {
 | |
|                         "RuleName": "foobar",
 | |
|                         "TargetBackupVaultName": "backupvault-foobar",
 | |
|                     },
 | |
|                 ],
 | |
|             },
 | |
|         )
 | |
|     resp = client.list_backup_plans()
 | |
|     client.delete_backup_plan(BackupPlanId=resp["BackupPlansList"][0]["BackupPlanId"])
 | |
|     resp_list = client.list_backup_plans()
 | |
|     backup_plans = resp_list["BackupPlansList"]
 | |
|     assert backup_plans[0]["BackupPlanName"] == "backup-plan-2"
 | |
|     assert len(backup_plans) == 1
 | |
| 
 | |
| 
 | |
| @mock_aws
 | |
| def test_list_backup_plans_with_include_deleted():
 | |
|     client = boto3.client("backup", region_name="eu-west-1")
 | |
|     for i in range(1, 3):
 | |
|         client.create_backup_plan(
 | |
|             BackupPlan={
 | |
|                 "BackupPlanName": f"backup-plan-{i}",
 | |
|                 "Rules": [
 | |
|                     {
 | |
|                         "RuleName": "foobar",
 | |
|                         "TargetBackupVaultName": "backupvault-foobar",
 | |
|                     },
 | |
|                 ],
 | |
|             },
 | |
|         )
 | |
|     resp = client.list_backup_plans()
 | |
|     client.delete_backup_plan(BackupPlanId=resp["BackupPlansList"][0]["BackupPlanId"])
 | |
|     resp_list = client.list_backup_plans(IncludeDeleted=True)
 | |
|     backup_plans = resp_list["BackupPlansList"]
 | |
|     assert backup_plans[0]["BackupPlanName"] == "backup-plan-1"
 | |
|     assert backup_plans[1]["BackupPlanName"] == "backup-plan-2"
 | |
|     assert len(backup_plans) == 2
 | |
| 
 | |
| 
 | |
| @mock_aws
 | |
| def test_create_backup_vault():
 | |
|     client = boto3.client("backup", region_name="eu-west-1")
 | |
|     resp = client.create_backup_vault(
 | |
|         BackupVaultName="backupvault-foobar",
 | |
|         BackupVaultTags={
 | |
|             "foo": "bar",
 | |
|         },
 | |
|     )
 | |
|     assert "BackupVaultName" in resp
 | |
|     assert "BackupVaultArn" in resp
 | |
|     assert "CreationDate" in resp
 | |
| 
 | |
| 
 | |
| @mock_aws
 | |
| def test_create_backup_vault_already_exists():
 | |
|     client = boto3.client("backup", region_name="eu-west-1")
 | |
|     backup_vault_name = "backup_vault_foobar"
 | |
|     client.create_backup_vault(BackupVaultName=backup_vault_name)
 | |
| 
 | |
|     with pytest.raises(ClientError) as exc:
 | |
|         client.create_backup_vault(BackupVaultName=backup_vault_name)
 | |
|     err = exc.value.response["Error"]
 | |
|     assert err["Code"] == "AlreadyExistsException"
 | |
| 
 | |
| 
 | |
| @mock_aws
 | |
| def test_list_backup_vaults():
 | |
|     client = boto3.client("backup", region_name="eu-west-1")
 | |
|     for i in range(1, 3):
 | |
|         client.create_backup_vault(
 | |
|             BackupVaultName=f"backup-vault-{i}",
 | |
|         )
 | |
|     resp = client.list_backup_vaults()
 | |
|     backup_plans = resp["BackupVaultList"]
 | |
|     assert backup_plans[0]["BackupVaultName"] == "backup-vault-1"
 | |
|     assert backup_plans[1]["BackupVaultName"] == "backup-vault-2"
 | |
|     assert resp["ResponseMetadata"]["HTTPStatusCode"] == 200
 | |
| 
 | |
| 
 | |
| @mock_aws
 | |
| def test_list_tags_vault():
 | |
|     client = boto3.client("backup", region_name="eu-west-1")
 | |
|     vault = client.create_backup_vault(
 | |
|         BackupVaultName="backupvault-foobar",
 | |
|         BackupVaultTags={
 | |
|             "key1": "value1",
 | |
|             "key2": "value2",
 | |
|         },
 | |
|     )
 | |
|     resp = client.list_tags(ResourceArn=vault["BackupVaultArn"])
 | |
|     assert resp["Tags"] == {"key1": "value1", "key2": "value2"}
 | |
| 
 | |
| 
 | |
| @mock_aws
 | |
| def test_list_tags_plan():
 | |
|     client = boto3.client("backup", region_name="eu-west-1")
 | |
|     response = client.create_backup_vault(
 | |
|         BackupVaultName="backupvault-foobar",
 | |
|     )
 | |
|     plan = client.create_backup_plan(
 | |
|         BackupPlan={
 | |
|             "BackupPlanName": "backupplan-foobar",
 | |
|             "Rules": [
 | |
|                 {
 | |
|                     "RuleName": "foobar",
 | |
|                     "TargetBackupVaultName": response["BackupVaultName"],
 | |
|                 },
 | |
|             ],
 | |
|         },
 | |
|         BackupPlanTags={
 | |
|             "key1": "value1",
 | |
|             "key2": "value2",
 | |
|         },
 | |
|     )
 | |
|     resp = client.list_tags(ResourceArn=plan["BackupPlanArn"])
 | |
|     assert resp["Tags"] == {"key1": "value1", "key2": "value2"}
 | |
| 
 | |
| 
 | |
| @mock_aws
 | |
| def test_tag_resource():
 | |
|     client = boto3.client("backup", region_name="eu-west-1")
 | |
|     vault = client.create_backup_vault(
 | |
|         BackupVaultName="backupvault-foobar",
 | |
|         BackupVaultTags={
 | |
|             "key1": "value1",
 | |
|         },
 | |
|     )
 | |
|     resource_arn = vault["BackupVaultArn"]
 | |
|     client.tag_resource(
 | |
|         ResourceArn=resource_arn, Tags={"key2": "value2", "key3": "value3"}
 | |
|     )
 | |
|     resp = client.list_tags(ResourceArn=resource_arn)
 | |
|     assert resp["Tags"] == {"key1": "value1", "key2": "value2", "key3": "value3"}
 | |
| 
 | |
| 
 | |
| @mock_aws
 | |
| def test_untag_resource():
 | |
|     client = boto3.client("backup", region_name="eu-west-1")
 | |
|     vault = client.create_backup_vault(
 | |
|         BackupVaultName="backupvault-foobar",
 | |
|         BackupVaultTags={
 | |
|             "key1": "value1",
 | |
|         },
 | |
|     )
 | |
|     resource_arn = vault["BackupVaultArn"]
 | |
|     client.tag_resource(
 | |
|         ResourceArn=resource_arn, Tags={"key2": "value2", "key3": "value3"}
 | |
|     )
 | |
|     resp = client.untag_resource(ResourceArn=resource_arn, TagKeyList=["key2"])
 | |
|     resp = client.list_tags(ResourceArn=resource_arn)
 | |
|     assert resp["Tags"] == {"key1": "value1", "key3": "value3"}
 |