Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aws
GitHub Repository: aws/aws-cli
Path: blob/develop/tests/unit/customizations/codedeploy/test_deregister.py
2630 views
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
14
from argparse import Namespace
15
from awscli.customizations.codedeploy.deregister import Deregister
16
from awscli.testutils import mock, unittest
17
18
19
class TestDeregister(unittest.TestCase):
20
def setUp(self):
21
self.instance_name = 'instance-name'
22
self.tags = [{'Key': 'k1', 'Value': 'v1'}]
23
self.iam_user_arn = 'arn:aws:iam::012345678912:user/{0}'.format(
24
self.instance_name
25
)
26
self.access_key_id = 'ACCESSKEYID'
27
self.region = 'us-east-1'
28
self.policy_name = 'codedeploy-agent'
29
self.endpoint_url = 'https://codedeploy.aws.amazon.com'
30
31
self.args = Namespace()
32
self.args.instance_name = self.instance_name
33
self.args.no_delete_iam_user = False
34
35
self.globals = Namespace()
36
self.globals.region = self.region
37
self.globals.endpoint_url = self.endpoint_url
38
self.globals.verify_ssl = False
39
40
self.codedeploy = mock.MagicMock()
41
self.codedeploy.get_on_premises_instance.return_value = {
42
'instanceInfo': {
43
'iamUserArn': self.iam_user_arn,
44
'tags': None
45
}
46
}
47
48
self.iam = mock.MagicMock()
49
self.list_user_policies = mock.MagicMock()
50
self.list_user_policies.paginate.return_value = [
51
{'PolicyNames': [self.policy_name]}
52
]
53
self.list_access_keys = mock.MagicMock()
54
self.list_access_keys.paginate.return_value = [
55
{'AccessKeyMetadata': [{'AccessKeyId': self.access_key_id}]}
56
]
57
self.iam.get_paginator.side_effect = [
58
self.list_user_policies, self.list_access_keys
59
]
60
61
self.session = mock.MagicMock()
62
self.session.create_client.side_effect = [self.codedeploy, self.iam]
63
self.deregister = Deregister(self.session)
64
65
def test_deregister_throws_on_invalid_region(self):
66
self.globals.region = None
67
self.session.get_config_variable.return_value = None
68
with self.assertRaisesRegex(RuntimeError, 'Region not specified.'):
69
self.deregister._run_main(self.args, self.globals)
70
71
def test_deregister_throws_on_invalid_instance_name(self):
72
self.args.instance_name = 'invalid%@^&%#&'
73
with self.assertRaisesRegex(
74
ValueError, 'Instance name contains invalid characters.'):
75
self.deregister._run_main(self.args, self.globals)
76
77
def test_deregister_creates_clients(self):
78
self.deregister._run_main(self.args, self.globals)
79
self.session.create_client.assert_has_calls([
80
mock.call(
81
'codedeploy',
82
region_name=self.region,
83
endpoint_url=self.endpoint_url,
84
verify=self.globals.verify_ssl
85
),
86
mock.call('iam', region_name=self.region)
87
])
88
89
def test_deregister_with_tags(self):
90
self.codedeploy.get_on_premises_instance.return_value = {
91
'instanceInfo': {
92
'iamUserArn': self.iam_user_arn,
93
'tags': self.tags
94
}
95
}
96
self.deregister._run_main(self.args, self.globals)
97
self.codedeploy.get_on_premises_instance.assert_called_with(
98
instanceName=self.instance_name
99
)
100
self.assertIn('iam_user_arn', self.args)
101
self.assertEqual(self.iam_user_arn, self.args.iam_user_arn)
102
self.assertIn('user_name', self.args)
103
self.assertEqual(self.instance_name, self.args.user_name)
104
self.assertIn('tags', self.args)
105
self.assertEqual(self.tags, self.args.tags)
106
self.codedeploy.remove_tags_from_on_premises_instances.\
107
assert_called_with(
108
tags=self.tags,
109
instanceNames=[self.instance_name]
110
)
111
self.codedeploy.deregister_on_premises_instance.\
112
assert_called_with(
113
instanceName=self.instance_name
114
)
115
116
def test_deregister_with_no_tags(self):
117
self.codedeploy.get_on_premises_instance.return_value = {
118
'instanceInfo': {
119
'iamUserArn': self.iam_user_arn,
120
'tags': None
121
}
122
}
123
self.deregister._run_main(self.args, self.globals)
124
self.codedeploy.get_on_premises_instance.assert_called_with(
125
instanceName=self.instance_name
126
)
127
self.assertIn('iam_user_arn', self.args)
128
self.assertEqual(self.iam_user_arn, self.args.iam_user_arn)
129
self.assertIn('user_name', self.args)
130
self.assertEqual(self.instance_name, self.args.user_name)
131
self.assertIn('tags', self.args)
132
self.assertEqual(None, self.args.tags)
133
self.assertFalse(
134
self.codedeploy.remove_tags_from_on_premises_instances.called
135
)
136
self.codedeploy.deregister_on_premises_instance.\
137
assert_called_with(
138
instanceName=self.instance_name
139
)
140
141
def test_deregister_with_delete_iam_user(self):
142
self.args.no_delete_iam_user = False
143
self.deregister._run_main(self.args, self.globals)
144
self.codedeploy.get_on_premises_instance.assert_called_with(
145
instanceName=self.instance_name
146
)
147
self.codedeploy.deregister_on_premises_instance.\
148
assert_called_with(
149
instanceName=self.instance_name
150
)
151
self.iam.get_paginator.assert_has_calls([
152
mock.call('list_user_policies'),
153
mock.call('list_access_keys')
154
])
155
self.list_user_policies.paginate.assert_called_with(
156
UserName=self.instance_name
157
)
158
self.iam.delete_user_policy.assert_called_with(
159
UserName=self.instance_name,
160
PolicyName=self.policy_name
161
)
162
self.list_access_keys.paginate.assert_called_with(
163
UserName=self.instance_name
164
)
165
self.iam.delete_access_key.assert_called_with(
166
UserName=self.instance_name,
167
AccessKeyId=self.access_key_id
168
)
169
self.iam.delete_user.assert_called_with(
170
UserName=self.instance_name
171
)
172
173
def test_deregister_with_no_delete_iam_user(self):
174
self.args.no_delete_iam_user = True
175
self.deregister._run_main(self.args, self.globals)
176
self.codedeploy.get_on_premises_instance.assert_called_with(
177
instanceName=self.instance_name
178
)
179
self.codedeploy.deregister_on_premises_instance.\
180
assert_called_with(
181
instanceName=self.instance_name
182
)
183
self.assertFalse(self.iam.get_paginator.called)
184
self.assertFalse(self.list_user_policies.paginate.called)
185
self.assertFalse(self.iam.delete_user_policy.called)
186
self.assertFalse(self.list_access_keys.paginate.called)
187
self.assertFalse(self.iam.delete_access_key.called)
188
self.assertFalse(self.iam.delete_user.called)
189
190
191
if __name__ == "__main__":
192
unittest.main()
193
194