PageRenderTime 53ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/unit/customizations/codedeploy/test_deregister.py

https://gitlab.com/github-cloud-corp/aws-cli
Python | 193 lines | 164 code | 17 blank | 12 comment | 3 complexity | e00f62d4c7e42cb293166b516756dc0a MD5 | raw file
  1. # Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License"). You
  4. # may not use this file except in compliance with the License. A copy of
  5. # the License is located at
  6. #
  7. # http://aws.amazon.com/apache2.0/
  8. #
  9. # or in the "license" file accompanying this file. This file is
  10. # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
  11. # ANY KIND, either express or implied. See the License for the specific
  12. # language governing permissions and limitations under the License.
  13. from argparse import Namespace
  14. from mock import MagicMock, call
  15. from awscli.customizations.codedeploy.deregister import Deregister
  16. from awscli.testutils import unittest
  17. class TestDeregister(unittest.TestCase):
  18. def setUp(self):
  19. self.instance_name = 'instance-name'
  20. self.tags = [{'Key': 'k1', 'Value': 'v1'}]
  21. self.iam_user_arn = 'arn:aws:iam::012345678912:user/{0}'.format(
  22. self.instance_name
  23. )
  24. self.access_key_id = 'ACCESSKEYID'
  25. self.region = 'us-east-1'
  26. self.policy_name = 'codedeploy-agent'
  27. self.endpoint_url = 'https://codedeploy.aws.amazon.com'
  28. self.args = Namespace()
  29. self.args.instance_name = self.instance_name
  30. self.args.no_delete_iam_user = False
  31. self.globals = Namespace()
  32. self.globals.region = self.region
  33. self.globals.endpoint_url = self.endpoint_url
  34. self.globals.verify_ssl = False
  35. self.codedeploy = MagicMock()
  36. self.codedeploy.get_on_premises_instance.return_value = {
  37. 'instanceInfo': {
  38. 'iamUserArn': self.iam_user_arn,
  39. 'tags': None
  40. }
  41. }
  42. self.iam = MagicMock()
  43. self.list_user_policies = MagicMock()
  44. self.list_user_policies.paginate.return_value = [
  45. {'PolicyNames': [self.policy_name]}
  46. ]
  47. self.list_access_keys = MagicMock()
  48. self.list_access_keys.paginate.return_value = [
  49. {'AccessKeyMetadata': [{'AccessKeyId': self.access_key_id}]}
  50. ]
  51. self.iam.get_paginator.side_effect = [
  52. self.list_user_policies, self.list_access_keys
  53. ]
  54. self.session = MagicMock()
  55. self.session.create_client.side_effect = [self.codedeploy, self.iam]
  56. self.deregister = Deregister(self.session)
  57. def test_deregister_throws_on_invalid_region(self):
  58. self.globals.region = None
  59. self.session.get_config_variable.return_value = None
  60. with self.assertRaisesRegexp(RuntimeError, 'Region not specified.'):
  61. self.deregister._run_main(self.args, self.globals)
  62. def test_deregister_throws_on_invalid_instance_name(self):
  63. self.args.instance_name = 'invalid%@^&%#&'
  64. with self.assertRaisesRegexp(
  65. ValueError, 'Instance name contains invalid characters.'):
  66. self.deregister._run_main(self.args, self.globals)
  67. def test_deregister_creates_clients(self):
  68. self.deregister._run_main(self.args, self.globals)
  69. self.session.create_client.assert_has_calls([
  70. call(
  71. 'codedeploy',
  72. region_name=self.region,
  73. endpoint_url=self.endpoint_url,
  74. verify=self.globals.verify_ssl
  75. ),
  76. call('iam', region_name=self.region)
  77. ])
  78. def test_deregister_with_tags(self):
  79. self.codedeploy.get_on_premises_instance.return_value = {
  80. 'instanceInfo': {
  81. 'iamUserArn': self.iam_user_arn,
  82. 'tags': self.tags
  83. }
  84. }
  85. self.deregister._run_main(self.args, self.globals)
  86. self.codedeploy.get_on_premises_instance.assert_called_with(
  87. instanceName=self.instance_name
  88. )
  89. self.assertIn('iam_user_arn', self.args)
  90. self.assertEquals(self.iam_user_arn, self.args.iam_user_arn)
  91. self.assertIn('user_name', self.args)
  92. self.assertEquals(self.instance_name, self.args.user_name)
  93. self.assertIn('tags', self.args)
  94. self.assertEquals(self.tags, self.args.tags)
  95. self.codedeploy.remove_tags_from_on_premises_instances.\
  96. assert_called_with(
  97. tags=self.tags,
  98. instanceNames=[self.instance_name]
  99. )
  100. self.codedeploy.deregister_on_premises_instance.\
  101. assert_called_with(
  102. instanceName=self.instance_name
  103. )
  104. def test_deregister_with_no_tags(self):
  105. self.codedeploy.get_on_premises_instance.return_value = {
  106. 'instanceInfo': {
  107. 'iamUserArn': self.iam_user_arn,
  108. 'tags': None
  109. }
  110. }
  111. self.deregister._run_main(self.args, self.globals)
  112. self.codedeploy.get_on_premises_instance.assert_called_with(
  113. instanceName=self.instance_name
  114. )
  115. self.assertIn('iam_user_arn', self.args)
  116. self.assertEquals(self.iam_user_arn, self.args.iam_user_arn)
  117. self.assertIn('user_name', self.args)
  118. self.assertEquals(self.instance_name, self.args.user_name)
  119. self.assertIn('tags', self.args)
  120. self.assertEquals(None, self.args.tags)
  121. self.assertFalse(
  122. self.codedeploy.remove_tags_from_on_premises_instances.called
  123. )
  124. self.codedeploy.deregister_on_premises_instance.\
  125. assert_called_with(
  126. instanceName=self.instance_name
  127. )
  128. def test_deregister_with_delete_iam_user(self):
  129. self.args.no_delete_iam_user = False
  130. self.deregister._run_main(self.args, self.globals)
  131. self.codedeploy.get_on_premises_instance.assert_called_with(
  132. instanceName=self.instance_name
  133. )
  134. self.codedeploy.deregister_on_premises_instance.\
  135. assert_called_with(
  136. instanceName=self.instance_name
  137. )
  138. self.iam.get_paginator.assert_has_calls([
  139. call('list_user_policies'),
  140. call('list_access_keys')
  141. ])
  142. self.list_user_policies.paginate.assert_called_with(
  143. UserName=self.instance_name
  144. )
  145. self.iam.delete_user_policy.assert_called_with(
  146. UserName=self.instance_name,
  147. PolicyName=self.policy_name
  148. )
  149. self.list_access_keys.paginate.assert_called_with(
  150. UserName=self.instance_name
  151. )
  152. self.iam.delete_access_key.assert_called_with(
  153. UserName=self.instance_name,
  154. AccessKeyId=self.access_key_id
  155. )
  156. self.iam.delete_user.assert_called_with(
  157. UserName=self.instance_name
  158. )
  159. def test_deregister_with_no_delete_iam_user(self):
  160. self.args.no_delete_iam_user = True
  161. self.deregister._run_main(self.args, self.globals)
  162. self.codedeploy.get_on_premises_instance.assert_called_with(
  163. instanceName=self.instance_name
  164. )
  165. self.codedeploy.deregister_on_premises_instance.\
  166. assert_called_with(
  167. instanceName=self.instance_name
  168. )
  169. self.assertFalse(self.iam.get_paginator.called)
  170. self.assertFalse(self.list_user_policies.paginate.called)
  171. self.assertFalse(self.iam.delete_user_policy.called)
  172. self.assertFalse(self.list_access_keys.paginate.called)
  173. self.assertFalse(self.iam.delete_access_key.called)
  174. self.assertFalse(self.iam.delete_user.called)
  175. if __name__ == "__main__":
  176. unittest.main()