|
13 | 13 | # under the License. |
14 | 14 | # |
15 | 15 |
|
| 16 | +import mock |
| 17 | +from mock import call |
| 18 | + |
| 19 | +from osc_lib import exceptions |
| 20 | +from osc_lib import utils |
| 21 | + |
16 | 22 | from openstackclient.compute.v2 import aggregate |
17 | 23 | from openstackclient.tests.compute.v2 import fakes as compute_fakes |
18 | 24 | from openstackclient.tests import utils as tests_utils |
@@ -135,25 +141,74 @@ def test_aggregate_create_with_property(self): |
135 | 141 |
|
136 | 142 | class TestAggregateDelete(TestAggregate): |
137 | 143 |
|
| 144 | + fake_ags = compute_fakes.FakeAggregate.create_aggregates(count=2) |
| 145 | + |
138 | 146 | def setUp(self): |
139 | 147 | super(TestAggregateDelete, self).setUp() |
140 | 148 |
|
141 | | - self.aggregate_mock.get.return_value = self.fake_ag |
| 149 | + self.aggregate_mock.get = ( |
| 150 | + compute_fakes.FakeAggregate.get_aggregates(self.fake_ags)) |
142 | 151 | self.cmd = aggregate.DeleteAggregate(self.app, None) |
143 | 152 |
|
144 | 153 | def test_aggregate_delete(self): |
145 | 154 | arglist = [ |
146 | | - 'ag1', |
| 155 | + self.fake_ags[0].id |
147 | 156 | ] |
148 | 157 | verifylist = [ |
149 | | - ('aggregate', 'ag1'), |
| 158 | + ('aggregate', [self.fake_ags[0].id]), |
150 | 159 | ] |
151 | 160 | parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
152 | 161 | result = self.cmd.take_action(parsed_args) |
153 | | - self.aggregate_mock.get.assert_called_once_with(parsed_args.aggregate) |
154 | | - self.aggregate_mock.delete.assert_called_once_with(self.fake_ag.id) |
| 162 | + self.aggregate_mock.get.assert_called_once_with(self.fake_ags[0].id) |
| 163 | + self.aggregate_mock.delete.assert_called_once_with(self.fake_ags[0].id) |
155 | 164 | self.assertIsNone(result) |
156 | 165 |
|
| 166 | + def test_delete_multiple_aggregates(self): |
| 167 | + arglist = [] |
| 168 | + for a in self.fake_ags: |
| 169 | + arglist.append(a.id) |
| 170 | + verifylist = [ |
| 171 | + ('aggregate', arglist), |
| 172 | + ] |
| 173 | + |
| 174 | + parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
| 175 | + result = self.cmd.take_action(parsed_args) |
| 176 | + |
| 177 | + calls = [] |
| 178 | + for a in self.fake_ags: |
| 179 | + calls.append(call(a.id)) |
| 180 | + self.aggregate_mock.delete.assert_has_calls(calls) |
| 181 | + self.assertIsNone(result) |
| 182 | + |
| 183 | + def test_delete_multiple_agggregates_with_exception(self): |
| 184 | + arglist = [ |
| 185 | + self.fake_ags[0].id, |
| 186 | + 'unexist_aggregate', |
| 187 | + ] |
| 188 | + verifylist = [ |
| 189 | + ('aggregate', arglist), |
| 190 | + ] |
| 191 | + |
| 192 | + parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
| 193 | + |
| 194 | + find_mock_result = [self.fake_ags[0], exceptions.CommandError] |
| 195 | + with mock.patch.object(utils, 'find_resource', |
| 196 | + side_effect=find_mock_result) as find_mock: |
| 197 | + try: |
| 198 | + self.cmd.take_action(parsed_args) |
| 199 | + self.fail('CommandError should be raised.') |
| 200 | + except exceptions.CommandError as e: |
| 201 | + self.assertEqual('1 of 2 aggregates failed to delete.', |
| 202 | + str(e)) |
| 203 | + |
| 204 | + find_mock.assert_any_call(self.aggregate_mock, self.fake_ags[0].id) |
| 205 | + find_mock.assert_any_call(self.aggregate_mock, 'unexist_aggregate') |
| 206 | + |
| 207 | + self.assertEqual(2, find_mock.call_count) |
| 208 | + self.aggregate_mock.delete.assert_called_once_with( |
| 209 | + self.fake_ags[0].id |
| 210 | + ) |
| 211 | + |
157 | 212 |
|
158 | 213 | class TestAggregateList(TestAggregate): |
159 | 214 |
|
|
0 commit comments