| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  | import boto3 | 
					
						
							|  |  |  | import json | 
					
						
							| 
									
										
										
										
											2021-10-18 19:44:29 +00:00
										 |  |  | import sure  # noqa # pylint: disable=unused-import | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | from moto import mock_resourcegroups | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-29 18:22:09 -01:00
										 |  |  | def create_group(client): | 
					
						
							|  |  |  |     return client.create_group( | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  |         Name="test_resource_group", | 
					
						
							|  |  |  |         Description="description", | 
					
						
							|  |  |  |         ResourceQuery={ | 
					
						
							|  |  |  |             "Type": "TAG_FILTERS_1_0", | 
					
						
							|  |  |  |             "Query": json.dumps( | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     "ResourceTypeFilters": ["AWS::AllSupported"], | 
					
						
							|  |  |  |                     "TagFilters": [ | 
					
						
							|  |  |  |                         {"Key": "resources_tag_key", "Values": ["resources_tag_value"]} | 
					
						
							|  |  |  |                     ], | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2019-10-31 08:44:26 -07:00
										 |  |  |         Tags={"resource_group_tag_key": "resource_group_tag_value"}, | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  |     ) | 
					
						
							| 
									
										
										
										
											2022-11-29 18:22:09 -01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_resourcegroups | 
					
						
							|  |  |  | def test_create_group(): | 
					
						
							|  |  |  |     resource_groups = boto3.client("resource-groups", region_name="us-east-1") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     response = create_group(client=resource_groups) | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  |     response["Group"]["Name"].should.contain("test_resource_group") | 
					
						
							|  |  |  |     response["ResourceQuery"]["Type"].should.contain("TAG_FILTERS_1_0") | 
					
						
							| 
									
										
										
										
											2019-10-31 08:44:26 -07:00
										 |  |  |     response["Tags"]["resource_group_tag_key"].should.contain( | 
					
						
							|  |  |  |         "resource_group_tag_value" | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_resourcegroups | 
					
						
							|  |  |  | def test_delete_group(): | 
					
						
							|  |  |  |     resource_groups = boto3.client("resource-groups", region_name="us-east-1") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-29 18:22:09 -01:00
										 |  |  |     create_group(client=resource_groups) | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     response = resource_groups.delete_group(GroupName="test_resource_group") | 
					
						
							|  |  |  |     response["Group"]["Name"].should.contain("test_resource_group") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     response = resource_groups.list_groups() | 
					
						
							|  |  |  |     response["GroupIdentifiers"].should.have.length_of(0) | 
					
						
							|  |  |  |     response["Groups"].should.have.length_of(0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_resourcegroups | 
					
						
							|  |  |  | def test_get_group(): | 
					
						
							|  |  |  |     resource_groups = boto3.client("resource-groups", region_name="us-east-1") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-29 18:22:09 -01:00
										 |  |  |     create_group(client=resource_groups) | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     response = resource_groups.get_group(GroupName="test_resource_group") | 
					
						
							|  |  |  |     response["Group"]["Description"].should.contain("description") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_resourcegroups | 
					
						
							|  |  |  | def test_get_group_query(): | 
					
						
							|  |  |  |     resource_groups = boto3.client("resource-groups", region_name="us-east-1") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-29 18:22:09 -01:00
										 |  |  |     group_arn = create_group(resource_groups)["Group"]["GroupArn"] | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     response = resource_groups.get_group_query(GroupName="test_resource_group") | 
					
						
							|  |  |  |     response["GroupQuery"]["ResourceQuery"]["Type"].should.contain("TAG_FILTERS_1_0") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-29 18:22:09 -01:00
										 |  |  |     response_get = resource_groups.get_group_query(Group=group_arn) | 
					
						
							| 
									
										
										
										
											2021-05-19 01:28:21 +05:30
										 |  |  |     response_get["GroupQuery"]["ResourceQuery"]["Type"].should.contain( | 
					
						
							|  |  |  |         "TAG_FILTERS_1_0" | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | @mock_resourcegroups | 
					
						
							|  |  |  | def test_get_tags(): | 
					
						
							|  |  |  |     resource_groups = boto3.client("resource-groups", region_name="us-east-1") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-29 18:22:09 -01:00
										 |  |  |     group_arn = create_group(resource_groups)["Group"]["GroupArn"] | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-29 18:22:09 -01:00
										 |  |  |     response = resource_groups.get_tags(Arn=group_arn) | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  |     response["Tags"].should.have.length_of(1) | 
					
						
							| 
									
										
										
										
											2019-10-31 08:44:26 -07:00
										 |  |  |     response["Tags"]["resource_group_tag_key"].should.contain( | 
					
						
							|  |  |  |         "resource_group_tag_value" | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_resourcegroups | 
					
						
							|  |  |  | def test_list_groups(): | 
					
						
							|  |  |  |     resource_groups = boto3.client("resource-groups", region_name="us-east-1") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-29 18:22:09 -01:00
										 |  |  |     create_group(resource_groups) | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     response = resource_groups.list_groups() | 
					
						
							|  |  |  |     response["GroupIdentifiers"].should.have.length_of(1) | 
					
						
							|  |  |  |     response["Groups"].should.have.length_of(1) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_resourcegroups | 
					
						
							|  |  |  | def test_tag(): | 
					
						
							|  |  |  |     resource_groups = boto3.client("resource-groups", region_name="us-east-1") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-29 18:22:09 -01:00
										 |  |  |     group_arn = create_group(resource_groups)["Group"]["GroupArn"] | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     response = resource_groups.tag( | 
					
						
							| 
									
										
										
										
											2022-11-29 18:22:09 -01:00
										 |  |  |         Arn=group_arn, | 
					
						
							| 
									
										
										
										
											2019-10-31 08:44:26 -07:00
										 |  |  |         Tags={"resource_group_tag_key_2": "resource_group_tag_value_2"}, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     response["Tags"]["resource_group_tag_key_2"].should.contain( | 
					
						
							|  |  |  |         "resource_group_tag_value_2" | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-29 18:22:09 -01:00
										 |  |  |     response = resource_groups.get_tags(Arn=group_arn) | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  |     response["Tags"].should.have.length_of(2) | 
					
						
							| 
									
										
										
										
											2019-10-31 08:44:26 -07:00
										 |  |  |     response["Tags"]["resource_group_tag_key_2"].should.contain( | 
					
						
							|  |  |  |         "resource_group_tag_value_2" | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_resourcegroups | 
					
						
							|  |  |  | def test_untag(): | 
					
						
							|  |  |  |     resource_groups = boto3.client("resource-groups", region_name="us-east-1") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-29 18:22:09 -01:00
										 |  |  |     group_arn = create_group(resource_groups)["Group"]["GroupArn"] | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-29 18:22:09 -01:00
										 |  |  |     response = resource_groups.untag(Arn=group_arn, Keys=["resource_group_tag_key"]) | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  |     response["Keys"].should.contain("resource_group_tag_key") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-29 18:22:09 -01:00
										 |  |  |     response = resource_groups.get_tags(Arn=group_arn) | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  |     response["Tags"].should.have.length_of(0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_resourcegroups | 
					
						
							|  |  |  | def test_update_group(): | 
					
						
							|  |  |  |     resource_groups = boto3.client("resource-groups", region_name="us-east-1") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-29 18:22:09 -01:00
										 |  |  |     create_group(client=resource_groups) | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     response = resource_groups.update_group( | 
					
						
							| 
									
										
										
										
											2019-10-31 08:44:26 -07:00
										 |  |  |         GroupName="test_resource_group", Description="description_2" | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  |     ) | 
					
						
							|  |  |  |     response["Group"]["Description"].should.contain("description_2") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     response = resource_groups.get_group(GroupName="test_resource_group") | 
					
						
							|  |  |  |     response["Group"]["Description"].should.contain("description_2") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-14 12:10:17 +05:30
										 |  |  | @mock_resourcegroups | 
					
						
							|  |  |  | def test_get_group_configuration(): | 
					
						
							|  |  |  |     resource_groups = boto3.client("resource-groups", region_name="us-east-1") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-29 18:22:09 -01:00
										 |  |  |     group = create_group(client=resource_groups) | 
					
						
							| 
									
										
										
										
											2021-05-14 12:10:17 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |     configuration = [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             "Type": "AWS::ResourceGroups::Generic", | 
					
						
							|  |  |  |             "Parameters": [ | 
					
						
							|  |  |  |                 {"Name": "allowed-resource-types", "Values": ["AWS::EC2::Host"]}, | 
					
						
							|  |  |  |                 {"Name": "deletion-protection", "Values": ["UNLESS_EMPTY"]}, | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resource_groups.put_group_configuration( | 
					
						
							|  |  |  |         Group=group["Group"]["Name"], Configuration=configuration | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     configuration_resp = resource_groups.get_group_configuration( | 
					
						
							|  |  |  |         Group=group["Group"]["Name"] | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     assert ( | 
					
						
							|  |  |  |         configuration_resp.get("GroupConfiguration").get("Configuration") | 
					
						
							|  |  |  |         == configuration | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_resourcegroups | 
					
						
							|  |  |  | def test_create_group_with_configuration(): | 
					
						
							|  |  |  |     resource_groups = boto3.client("resource-groups", region_name="us-east-1") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     configuration = [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             "Type": "AWS::ResourceGroups::Generic", | 
					
						
							|  |  |  |             "Parameters": [ | 
					
						
							|  |  |  |                 {"Name": "allowed-resource-types", "Values": ["AWS::EC2::Host"]}, | 
					
						
							|  |  |  |                 {"Name": "deletion-protection", "Values": ["UNLESS_EMPTY"]}, | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  |     response = resource_groups.create_group( | 
					
						
							|  |  |  |         Name="test_resource_group_new", | 
					
						
							|  |  |  |         Description="description", | 
					
						
							|  |  |  |         ResourceQuery={ | 
					
						
							|  |  |  |             "Type": "TAG_FILTERS_1_0", | 
					
						
							|  |  |  |             "Query": json.dumps( | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     "ResourceTypeFilters": ["AWS::AllSupported"], | 
					
						
							|  |  |  |                     "TagFilters": [ | 
					
						
							|  |  |  |                         {"Key": "resources_tag_key", "Values": ["resources_tag_value"]} | 
					
						
							|  |  |  |                     ], | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         Configuration=configuration, | 
					
						
							|  |  |  |         Tags={"resource_group_tag_key": "resource_group_tag_value"}, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     response["Group"]["Name"].should.contain("test_resource_group_new") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     assert response["GroupConfiguration"]["Configuration"] == configuration | 
					
						
							|  |  |  |     response["Tags"]["resource_group_tag_key"].should.contain( | 
					
						
							|  |  |  |         "resource_group_tag_value" | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  | @mock_resourcegroups | 
					
						
							|  |  |  | def test_update_group_query(): | 
					
						
							|  |  |  |     resource_groups = boto3.client("resource-groups", region_name="us-east-1") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-29 18:22:09 -01:00
										 |  |  |     group_arn = create_group(resource_groups)["Group"]["GroupArn"] | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     response = resource_groups.update_group_query( | 
					
						
							|  |  |  |         GroupName="test_resource_group", | 
					
						
							|  |  |  |         ResourceQuery={ | 
					
						
							|  |  |  |             "Type": "CLOUDFORMATION_STACK_1_0", | 
					
						
							|  |  |  |             "Query": json.dumps( | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     "ResourceTypeFilters": ["AWS::AllSupported"], | 
					
						
							|  |  |  |                     "StackIdentifier": ( | 
					
						
							|  |  |  |                         "arn:aws:cloudformation:eu-west-1:012345678912:stack/" | 
					
						
							|  |  |  |                         "test_stack/c223eca0-e744-11e8-8910-500c41f59083" | 
					
						
							| 
									
										
										
										
											2019-10-31 08:44:26 -07:00
										 |  |  |                     ), | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  |                 } | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2019-10-31 08:44:26 -07:00
										 |  |  |     response["GroupQuery"]["ResourceQuery"]["Type"].should.contain( | 
					
						
							|  |  |  |         "CLOUDFORMATION_STACK_1_0" | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2019-05-25 11:10:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     response = resource_groups.get_group_query(GroupName="test_resource_group") | 
					
						
							| 
									
										
										
										
											2019-10-31 08:44:26 -07:00
										 |  |  |     response["GroupQuery"]["ResourceQuery"]["Type"].should.contain( | 
					
						
							|  |  |  |         "CLOUDFORMATION_STACK_1_0" | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2021-05-19 01:28:21 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |     response = resource_groups.update_group_query( | 
					
						
							| 
									
										
										
										
											2022-11-29 18:22:09 -01:00
										 |  |  |         Group=group_arn, | 
					
						
							| 
									
										
										
										
											2021-05-19 01:28:21 +05:30
										 |  |  |         ResourceQuery={ | 
					
						
							|  |  |  |             "Type": "TAG_FILTERS_1_0", | 
					
						
							|  |  |  |             "Query": json.dumps( | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     "ResourceTypeFilters": ["AWS::AllSupported"], | 
					
						
							|  |  |  |                     "TagFilters": [ | 
					
						
							|  |  |  |                         {"Key": "resources_tag_key", "Values": ["resources_tag_value"]} | 
					
						
							|  |  |  |                     ], | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     response["GroupQuery"]["ResourceQuery"]["Type"].should.contain("TAG_FILTERS_1_0") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-29 18:22:09 -01:00
										 |  |  |     response = resource_groups.get_group_query(Group=group_arn) | 
					
						
							| 
									
										
										
										
											2021-05-19 01:28:21 +05:30
										 |  |  |     response["GroupQuery"]["ResourceQuery"]["Type"].should.contain("TAG_FILTERS_1_0") |