~gz/juju-ci-tools/maas_substrate_subnets

« back to all changes in this revision

Viewing changes to tests/test_assess_constraints.py

  • Committer: Andrew Beach
  • Date: 2016-09-20 21:15:28 UTC
  • mfrom: (1587.1.27 constraints)
  • Revision ID: andrew.beach@canonical.com-20160920211528-q8443nuvwx713s9w
Merged in fix to assess_instance_type_constraints.

Show diffs side-by-side

added added

removed removed

Lines of Context:
89
89
 
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)
101
101
 
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))
106
106
 
107
107
 
147
147
            args[1]["constraints"] for args in mock.call_args_list]
148
148
        return constraint_args
149
149
 
 
150
    @contextmanager
 
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:
 
157
            yield hardware_mock
 
158
 
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)
163
172
 
164
173
    @contextmanager
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'}
167
178
 
168
179
        def mock_get_instance_spec(instance_type):
169
180
            if 'bar' == instance_type:
170
181
                return bar_data
 
182
            elif 'baz' == instance_type and passing:
 
183
                return baz_data
 
184
            elif 'baz' == instance_type:
 
185
                return {'cpu-power': '40'}
171
186
            else:
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):
177
 
                yield spec_mock
 
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]):
 
192
                    yield spec_mock
178
193
 
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')])
 
203
 
 
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')])
191
210
 
192
211
    def test_instance_type_constraints_missing(self):
193
212
        fake_client = Mock(wraps=fake_juju_client())