18d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi#!/usr/bin/env python 28d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 38d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoifrom tests.unit import unittest 48d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoifrom tests.unit import AWSMockServiceTestCase 58d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 68d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoifrom boto.ec2.connection import EC2Connection 78d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoifrom boto.ec2.ec2object import TaggedEC2Object 88d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 98d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 108d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi KandoiCREATE_TAGS_RESPONSE = br"""<?xml version="1.0" encoding="UTF-8"?> 118d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi<CreateTagsResponse xmlns="http://ec2.amazonaws.com/doc/2014-05-01/"> 128d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi <requestId>7a62c49f-347e-4fc4-9331-6e8eEXAMPLE</requestId> 138d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi <return>true</return> 148d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi</CreateTagsResponse> 158d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi""" 168d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 178d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 188d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi KandoiDELETE_TAGS_RESPONSE = br"""<?xml version="1.0" encoding="UTF-8"?> 198d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi<DeleteTagsResponse xmlns="http://ec2.amazonaws.com/doc/2014-05-01/"> 208d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi <requestId>7a62c49f-347e-4fc4-9331-6e8eEXAMPLE</requestId> 218d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi <return>true</return> 228d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi</DeleteTagsResponse> 238d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi""" 248d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 258d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 268d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiclass TestAddTags(AWSMockServiceTestCase): 278d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi connection_class = EC2Connection 288d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 298d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def default_body(self): 308d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi return CREATE_TAGS_RESPONSE 318d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 328d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def test_add_tag(self): 338d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.set_http_response(status_code=200) 348d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object = TaggedEC2Object(self.service_connection) 358d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.id = "i-abcd1234" 368d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.tags["already_present_key"] = "already_present_value" 378d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 388d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.add_tag("new_key", "new_value") 398d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 408d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.assert_request_parameters({ 418d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'ResourceId.1': 'i-abcd1234', 428d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Action': 'CreateTags', 438d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Tag.1.Key': 'new_key', 448d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Tag.1.Value': 'new_value'}, 458d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi ignore_params_values=['AWSAccessKeyId', 'SignatureMethod', 468d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'SignatureVersion', 'Timestamp', 478d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Version']) 488d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 498d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.assertEqual(taggedEC2Object.tags, { 508d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi "already_present_key": "already_present_value", 518d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi "new_key": "new_value"}) 528d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 538d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def test_add_tags(self): 548d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.set_http_response(status_code=200) 558d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object = TaggedEC2Object(self.service_connection) 568d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.id = "i-abcd1234" 578d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.tags["already_present_key"] = "already_present_value" 588d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 598d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.add_tags({"key1": "value1", "key2": "value2"}) 608d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 618d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.assert_request_parameters({ 628d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'ResourceId.1': 'i-abcd1234', 638d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Action': 'CreateTags', 648d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Tag.1.Key': 'key1', 658d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Tag.1.Value': 'value1', 668d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Tag.2.Key': 'key2', 678d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Tag.2.Value': 'value2'}, 688d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi ignore_params_values=['AWSAccessKeyId', 'SignatureMethod', 698d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'SignatureVersion', 'Timestamp', 708d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Version']) 718d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 728d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.assertEqual(taggedEC2Object.tags, { 738d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi "already_present_key": "already_present_value", 748d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi "key1": "value1", 758d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi "key2": "value2"}) 768d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 778d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 788d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiclass TestRemoveTags(AWSMockServiceTestCase): 798d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi connection_class = EC2Connection 808d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 818d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def default_body(self): 828d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi return DELETE_TAGS_RESPONSE 838d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 848d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def test_remove_tag(self): 858d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.set_http_response(status_code=200) 868d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object = TaggedEC2Object(self.service_connection) 878d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.id = "i-abcd1234" 888d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.tags["key1"] = "value1" 898d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.tags["key2"] = "value2" 908d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 918d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.remove_tag("key1", "value1") 928d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 938d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.assert_request_parameters({ 948d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'ResourceId.1': 'i-abcd1234', 958d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Action': 'DeleteTags', 968d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Tag.1.Key': 'key1', 978d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Tag.1.Value': 'value1'}, 988d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi ignore_params_values=['AWSAccessKeyId', 'SignatureMethod', 998d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'SignatureVersion', 'Timestamp', 1008d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Version']) 1018d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1028d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.assertEqual(taggedEC2Object.tags, {"key2": "value2"}) 1038d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1048d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def test_remove_tag_no_value(self): 1058d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.set_http_response(status_code=200) 1068d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object = TaggedEC2Object(self.service_connection) 1078d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.id = "i-abcd1234" 1088d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.tags["key1"] = "value1" 1098d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.tags["key2"] = "value2" 1108d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1118d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.remove_tag("key1") 1128d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1138d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.assert_request_parameters({ 1148d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'ResourceId.1': 'i-abcd1234', 1158d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Action': 'DeleteTags', 1168d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Tag.1.Key': 'key1'}, 1178d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi ignore_params_values=['AWSAccessKeyId', 'SignatureMethod', 1188d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'SignatureVersion', 'Timestamp', 1198d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Version']) 1208d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1218d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.assertEqual(taggedEC2Object.tags, {"key2": "value2"}) 1228d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1238d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def test_remove_tag_empty_value(self): 1248d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.set_http_response(status_code=200) 1258d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object = TaggedEC2Object(self.service_connection) 1268d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.id = "i-abcd1234" 1278d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.tags["key1"] = "value1" 1288d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.tags["key2"] = "value2" 1298d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1308d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.remove_tag("key1", "") 1318d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1328d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.assert_request_parameters({ 1338d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'ResourceId.1': 'i-abcd1234', 1348d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Action': 'DeleteTags', 1358d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Tag.1.Key': 'key1', 1368d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Tag.1.Value': ''}, 1378d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi ignore_params_values=['AWSAccessKeyId', 'SignatureMethod', 1388d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'SignatureVersion', 'Timestamp', 1398d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Version']) 1408d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1418d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.assertEqual(taggedEC2Object.tags, 1428d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi {"key1": "value1", "key2": "value2"}) 1438d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1448d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def test_remove_tags(self): 1458d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.set_http_response(status_code=200) 1468d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object = TaggedEC2Object(self.service_connection) 1478d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.id = "i-abcd1234" 1488d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.tags["key1"] = "value1" 1498d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.tags["key2"] = "value2" 1508d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1518d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.remove_tags({"key1": "value1", "key2": "value2"}) 1528d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1538d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.assert_request_parameters({ 1548d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'ResourceId.1': 'i-abcd1234', 1558d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Action': 'DeleteTags', 1568d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Tag.1.Key': 'key1', 1578d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Tag.1.Value': 'value1', 1588d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Tag.2.Key': 'key2', 1598d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Tag.2.Value': 'value2'}, 1608d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi ignore_params_values=['AWSAccessKeyId', 'SignatureMethod', 1618d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'SignatureVersion', 'Timestamp', 1628d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Version']) 1638d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1648d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.assertEqual(taggedEC2Object.tags, {}) 1658d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1668d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def test_remove_tags_wrong_values(self): 1678d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.set_http_response(status_code=200) 1688d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object = TaggedEC2Object(self.service_connection) 1698d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.id = "i-abcd1234" 1708d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.tags["key1"] = "value1" 1718d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.tags["key2"] = "value2" 1728d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1738d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.remove_tags({"key1": "value1", "key2": "value3"}) 1748d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1758d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.assert_request_parameters({ 1768d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'ResourceId.1': 'i-abcd1234', 1778d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Action': 'DeleteTags', 1788d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Tag.1.Key': 'key1', 1798d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Tag.1.Value': 'value1', 1808d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Tag.2.Key': 'key2', 1818d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Tag.2.Value': 'value3'}, 1828d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi ignore_params_values=['AWSAccessKeyId', 'SignatureMethod', 1838d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'SignatureVersion', 'Timestamp', 1848d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Version']) 1858d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1868d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.assertEqual(taggedEC2Object.tags, {"key2": "value2"}) 1878d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1888d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def test_remove_tags_none_values(self): 1898d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.set_http_response(status_code=200) 1908d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object = TaggedEC2Object(self.service_connection) 1918d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.id = "i-abcd1234" 1928d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.tags["key1"] = "value1" 1938d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.tags["key2"] = "value2" 1948d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1958d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi taggedEC2Object.remove_tags({"key1": "value1", "key2": None}) 1968d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1978d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.assert_request_parameters({ 1988d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'ResourceId.1': 'i-abcd1234', 1998d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Action': 'DeleteTags', 2008d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Tag.1.Key': 'key1', 2018d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Tag.1.Value': 'value1', 2028d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Tag.2.Key': 'key2'}, 2038d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi ignore_params_values=['AWSAccessKeyId', 'SignatureMethod', 2048d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'SignatureVersion', 'Timestamp', 2058d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 'Version']) 2068d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 2078d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.assertEqual(taggedEC2Object.tags, {}) 2088d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 2098d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 2108d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiif __name__ == '__main__': 2118d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi unittest.main() 212