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