90
90
def test_meets_instance_type(self):
91
91
constraints = Constraints(instance_type='t2.micro')
92
data1 = {'root-disk': '1G', 'cpu-power': '10', 'cores': '1'}
92
data1 = {'mem': '1G', 'cpu-power': '10', 'cores': '1'}
93
93
self.assertTrue(constraints.meets_instance_type(data1))
94
data2 = {'root-disk': '8G', 'cpu-power': '20', 'cores': '1'}
94
data2 = {'mem': '8G', 'cpu-power': '20', 'cores': '1'}
95
95
self.assertFalse(constraints.meets_instance_type(data2))
96
96
data3 = dict(data1, arch='amd64')
97
97
self.assertTrue(constraints.meets_instance_type(data3))
98
data4 = {'cpu-power': '10', 'cores': '1'}
98
data4 = {'root-disk': '1G', 'cpu-power': '10', 'cores': '1'}
99
99
with self.assertRaises(JujuAssertionError):
100
100
constraints.meets_instance_type(data4)
102
102
def test_meets_instance_type_fix(self):
103
103
constraints = Constraints(instance_type='t2.micro')
104
data = {'root-disk': '1G', 'cpu-power': '10', 'cpu-cores': '1'}
104
data = {'mem': '1G', 'cpu-power': '10', 'cpu-cores': '1'}
105
105
self.assertTrue(constraints.meets_instance_type(data))
147
147
args[1]["constraints"] for args in mock.call_args_list]
148
148
return constraint_args
151
def patch_hardware(self, return_values):
152
"""Patch juju_show_machine_hardware with a series of return values."""
153
def pop_hardware(client, machine):
154
return return_values.pop(0)
155
with patch('assess_constraints.juju_show_machine_hardware',
156
autospec=True, side_effect=pop_hardware) as hardware_mock:
150
159
def test_virt_type_constraints_with_kvm(self):
151
160
assert_constraints_calls = ["virt-type=lxd", "virt-type=kvm"]
152
161
with self.prepare_deploy_mock() as (fake_client, deploy_mock):
162
171
self.assertEqual(constraints_calls, assert_constraints_calls)
165
def patch_instance_spec(self):
174
def patch_instance_spec(self, fake_provider, passing=True):
175
fake_instance_types = ['bar', 'baz']
166
176
bar_data = {'cpu-power': '20'}
177
baz_data = {'cpu-power': '30'}
168
179
def mock_get_instance_spec(instance_type):
169
180
if 'bar' == instance_type:
182
elif 'baz' == instance_type and passing:
184
elif 'baz' == instance_type:
185
return {'cpu-power': '40'}
172
187
raise ValueError('instance-type not in mock.')
173
with patch('assess_constraints.get_instance_spec', autospec=True,
174
side_effect=mock_get_instance_spec) as spec_mock:
175
with patch('assess_constraints.juju_show_machine_hardware',
176
autospec=True, return_value=bar_data):
188
with patch.dict(INSTANCE_TYPES, {fake_provider: fake_instance_types}):
189
with patch('assess_constraints.get_instance_spec', autospec=True,
190
side_effect=mock_get_instance_spec) as spec_mock:
191
with self.patch_hardware([bar_data, baz_data]):
179
194
def test_instance_type_constraints(self):
180
assert_constraints_calls = ['instance-type=bar']
181
fake_instance_types = ['bar']
182
with self.prepare_deploy_mock() as (fake_client, deploy_mock):
183
fake_provider = fake_client.env.config.get('type')
184
with patch.dict(INSTANCE_TYPES,
185
{fake_provider: fake_instance_types}):
186
with self.patch_instance_spec() as spec_mock:
195
assert_constraints_calls = ['instance-type=bar', 'instance-type=baz']
196
with self.prepare_deploy_mock() as (fake_client, deploy_mock):
197
fake_provider = fake_client.env.config.get('type')
198
with self.patch_instance_spec(fake_provider) as spec_mock:
199
assess_instance_type_constraints(fake_client)
200
constraints_calls = self.gather_constraint_args(deploy_mock)
201
self.assertEqual(constraints_calls, assert_constraints_calls)
202
self.assertEqual(spec_mock.call_args_list, [call('bar'), call('baz')])
204
def test_instance_type_constraints_fail(self):
205
with self.prepare_deploy_mock() as (fake_client, deploy_mock):
206
fake_provider = fake_client.env.config.get('type')
207
with self.patch_instance_spec(fake_provider, False):
208
with self.assertRaises(ValueError):
187
209
assess_instance_type_constraints(fake_client)
188
constraints_calls = self.gather_constraint_args(deploy_mock)
189
self.assertEqual(constraints_calls, assert_constraints_calls)
190
self.assertEqual(spec_mock.call_args_list, [call('bar')])
192
211
def test_instance_type_constraints_missing(self):
193
212
fake_client = Mock(wraps=fake_juju_client())