Path: blob/develop/tests/unit/customizations/codedeploy/test_deregister.py
2630 views
# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.1#2# Licensed under the Apache License, Version 2.0 (the "License"). You3# may not use this file except in compliance with the License. A copy of4# the License is located at5#6# http://aws.amazon.com/apache2.0/7#8# or in the "license" file accompanying this file. This file is9# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF10# ANY KIND, either express or implied. See the License for the specific11# language governing permissions and limitations under the License.1213from argparse import Namespace14from awscli.customizations.codedeploy.deregister import Deregister15from awscli.testutils import mock, unittest161718class TestDeregister(unittest.TestCase):19def setUp(self):20self.instance_name = 'instance-name'21self.tags = [{'Key': 'k1', 'Value': 'v1'}]22self.iam_user_arn = 'arn:aws:iam::012345678912:user/{0}'.format(23self.instance_name24)25self.access_key_id = 'ACCESSKEYID'26self.region = 'us-east-1'27self.policy_name = 'codedeploy-agent'28self.endpoint_url = 'https://codedeploy.aws.amazon.com'2930self.args = Namespace()31self.args.instance_name = self.instance_name32self.args.no_delete_iam_user = False3334self.globals = Namespace()35self.globals.region = self.region36self.globals.endpoint_url = self.endpoint_url37self.globals.verify_ssl = False3839self.codedeploy = mock.MagicMock()40self.codedeploy.get_on_premises_instance.return_value = {41'instanceInfo': {42'iamUserArn': self.iam_user_arn,43'tags': None44}45}4647self.iam = mock.MagicMock()48self.list_user_policies = mock.MagicMock()49self.list_user_policies.paginate.return_value = [50{'PolicyNames': [self.policy_name]}51]52self.list_access_keys = mock.MagicMock()53self.list_access_keys.paginate.return_value = [54{'AccessKeyMetadata': [{'AccessKeyId': self.access_key_id}]}55]56self.iam.get_paginator.side_effect = [57self.list_user_policies, self.list_access_keys58]5960self.session = mock.MagicMock()61self.session.create_client.side_effect = [self.codedeploy, self.iam]62self.deregister = Deregister(self.session)6364def test_deregister_throws_on_invalid_region(self):65self.globals.region = None66self.session.get_config_variable.return_value = None67with self.assertRaisesRegex(RuntimeError, 'Region not specified.'):68self.deregister._run_main(self.args, self.globals)6970def test_deregister_throws_on_invalid_instance_name(self):71self.args.instance_name = 'invalid%@^&%#&'72with self.assertRaisesRegex(73ValueError, 'Instance name contains invalid characters.'):74self.deregister._run_main(self.args, self.globals)7576def test_deregister_creates_clients(self):77self.deregister._run_main(self.args, self.globals)78self.session.create_client.assert_has_calls([79mock.call(80'codedeploy',81region_name=self.region,82endpoint_url=self.endpoint_url,83verify=self.globals.verify_ssl84),85mock.call('iam', region_name=self.region)86])8788def test_deregister_with_tags(self):89self.codedeploy.get_on_premises_instance.return_value = {90'instanceInfo': {91'iamUserArn': self.iam_user_arn,92'tags': self.tags93}94}95self.deregister._run_main(self.args, self.globals)96self.codedeploy.get_on_premises_instance.assert_called_with(97instanceName=self.instance_name98)99self.assertIn('iam_user_arn', self.args)100self.assertEqual(self.iam_user_arn, self.args.iam_user_arn)101self.assertIn('user_name', self.args)102self.assertEqual(self.instance_name, self.args.user_name)103self.assertIn('tags', self.args)104self.assertEqual(self.tags, self.args.tags)105self.codedeploy.remove_tags_from_on_premises_instances.\106assert_called_with(107tags=self.tags,108instanceNames=[self.instance_name]109)110self.codedeploy.deregister_on_premises_instance.\111assert_called_with(112instanceName=self.instance_name113)114115def test_deregister_with_no_tags(self):116self.codedeploy.get_on_premises_instance.return_value = {117'instanceInfo': {118'iamUserArn': self.iam_user_arn,119'tags': None120}121}122self.deregister._run_main(self.args, self.globals)123self.codedeploy.get_on_premises_instance.assert_called_with(124instanceName=self.instance_name125)126self.assertIn('iam_user_arn', self.args)127self.assertEqual(self.iam_user_arn, self.args.iam_user_arn)128self.assertIn('user_name', self.args)129self.assertEqual(self.instance_name, self.args.user_name)130self.assertIn('tags', self.args)131self.assertEqual(None, self.args.tags)132self.assertFalse(133self.codedeploy.remove_tags_from_on_premises_instances.called134)135self.codedeploy.deregister_on_premises_instance.\136assert_called_with(137instanceName=self.instance_name138)139140def test_deregister_with_delete_iam_user(self):141self.args.no_delete_iam_user = False142self.deregister._run_main(self.args, self.globals)143self.codedeploy.get_on_premises_instance.assert_called_with(144instanceName=self.instance_name145)146self.codedeploy.deregister_on_premises_instance.\147assert_called_with(148instanceName=self.instance_name149)150self.iam.get_paginator.assert_has_calls([151mock.call('list_user_policies'),152mock.call('list_access_keys')153])154self.list_user_policies.paginate.assert_called_with(155UserName=self.instance_name156)157self.iam.delete_user_policy.assert_called_with(158UserName=self.instance_name,159PolicyName=self.policy_name160)161self.list_access_keys.paginate.assert_called_with(162UserName=self.instance_name163)164self.iam.delete_access_key.assert_called_with(165UserName=self.instance_name,166AccessKeyId=self.access_key_id167)168self.iam.delete_user.assert_called_with(169UserName=self.instance_name170)171172def test_deregister_with_no_delete_iam_user(self):173self.args.no_delete_iam_user = True174self.deregister._run_main(self.args, self.globals)175self.codedeploy.get_on_premises_instance.assert_called_with(176instanceName=self.instance_name177)178self.codedeploy.deregister_on_premises_instance.\179assert_called_with(180instanceName=self.instance_name181)182self.assertFalse(self.iam.get_paginator.called)183self.assertFalse(self.list_user_policies.paginate.called)184self.assertFalse(self.iam.delete_user_policy.called)185self.assertFalse(self.list_access_keys.paginate.called)186self.assertFalse(self.iam.delete_access_key.called)187self.assertFalse(self.iam.delete_user.called)188189190if __name__ == "__main__":191unittest.main()192193194