124
132
exceptions.PodActionFail,
125
133
re.escape("Failed talking to pod: " + fake_exception_msg)):
126
134
yield pods.discover_pod(fake_driver.name, {})
137
class TestComposeMachine(MAASTestCase):
139
run_tests_with = MAASTwistedRunTest.make_factory(timeout=5)
141
def make_requested_machine(self):
142
return RequestedMachine(
143
architecture='amd64/generic',
144
cores=random.randint(1, 8),
145
cpu_speed=random.randint(1000, 3000),
146
memory=random.randint(1024, 8192),
148
RequestedMachineBlockDevice(size=random.randint(8, 16))],
150
RequestedMachineInterface()])
153
def test_unknown_pod_raises_UnknownPodType(self):
154
unknown_type = factory.make_name("unknown")
155
fake_request = self.make_requested_machine()
156
pod_id = random.randint(1, 10)
157
pod_name = factory.make_name("pod")
158
with ExpectedException(exceptions.UnknownPodType):
159
yield pods.compose_machine(
160
unknown_type, {}, fake_request, pod_id=pod_id, name=pod_name)
163
def test_handles_driver_not_returning_Deferred(self):
164
fake_driver = MagicMock()
165
fake_driver.name = factory.make_name("pod")
166
fake_driver.compose.return_value = None
167
fake_request = self.make_requested_machine()
168
pod_id = random.randint(1, 10)
169
pod_name = factory.make_name("pod")
171
PodDriverRegistry, "get_item").return_value = fake_driver
172
with ExpectedException(
173
exceptions.PodActionFail,
175
"bad pod driver '%s'; 'compose' did not "
176
"return Deferred." % fake_driver.name)):
177
yield pods.compose_machine(
178
fake_driver.name, {}, fake_request,
179
pod_id=pod_id, name=pod_name)
182
def test_handles_driver_resolving_to_None(self):
183
fake_driver = MagicMock()
184
fake_driver.name = factory.make_name("pod")
185
fake_driver.compose.return_value = succeed(None)
186
fake_request = self.make_requested_machine()
187
pod_id = random.randint(1, 10)
188
pod_name = factory.make_name("pod")
190
PodDriverRegistry, "get_item").return_value = fake_driver
191
with ExpectedException(exceptions.PodInvalidResources):
192
yield pods.compose_machine(
193
fake_driver.name, {}, fake_request,
194
pod_id=pod_id, name=pod_name)
197
def test_handles_driver_not_resolving_to_tuple(self):
198
fake_driver = MagicMock()
199
fake_driver.name = factory.make_name("pod")
200
fake_driver.compose.return_value = succeed({})
201
fake_request = self.make_requested_machine()
202
pod_id = random.randint(1, 10)
203
pod_name = factory.make_name("pod")
205
PodDriverRegistry, "get_item").return_value = fake_driver
206
with ExpectedException(
207
exceptions.PodActionFail,
209
"bad pod driver '%s'; 'compose' returned "
210
"invalid result." % fake_driver.name)):
211
yield pods.compose_machine(
212
fake_driver.name, {}, fake_request,
213
pod_id=pod_id, name=pod_name)
216
def test_handles_driver_not_resolving_to_tuple_of_discovered(self):
217
fake_driver = MagicMock()
218
fake_driver.name = factory.make_name("pod")
219
fake_driver.compose.return_value = succeed((object(), object()))
220
fake_request = self.make_requested_machine()
221
pod_id = random.randint(1, 10)
222
pod_name = factory.make_name("pod")
224
PodDriverRegistry, "get_item").return_value = fake_driver
225
with ExpectedException(
226
exceptions.PodActionFail,
228
"bad pod driver '%s'; 'compose' returned "
229
"invalid result." % fake_driver.name)):
230
yield pods.compose_machine(
231
fake_driver.name, {}, fake_request,
232
pod_id=pod_id, name=pod_name)
235
def test_handles_driver_resolving_to_tuple_of_discovered(self):
236
fake_driver = MagicMock()
237
fake_driver.name = factory.make_name("pod")
238
fake_request = self.make_requested_machine()
239
pod_id = random.randint(1, 10)
240
pod_name = factory.make_name("pod")
241
machine = DiscoveredMachine(
242
architecture='amd64/generic',
243
cores=random.randint(1, 8),
244
cpu_speed=random.randint(1000, 3000),
245
memory=random.randint(1024, 8192),
246
block_devices=[], interfaces=[])
247
hints = DiscoveredPodHints(
248
cores=random.randint(1, 8),
249
cpu_speed=random.randint(1000, 2000),
250
memory=random.randint(1024, 8192), local_storage=0)
251
fake_driver.compose.return_value = succeed((machine, hints))
253
PodDriverRegistry, "get_item").return_value = fake_driver
254
result = yield pods.compose_machine(
255
fake_driver.name, {}, fake_request, pod_id=pod_id, name=pod_name)
262
def test_handles_driver_raising_NotImplementedError(self):
263
fake_driver = MagicMock()
264
fake_driver.name = factory.make_name("pod")
265
fake_driver.compose.return_value = fail(NotImplementedError())
266
fake_request = self.make_requested_machine()
267
pod_id = random.randint(1, 10)
268
pod_name = factory.make_name("pod")
270
PodDriverRegistry, "get_item").return_value = fake_driver
271
with ExpectedException(NotImplementedError):
272
yield pods.compose_machine(
273
fake_driver.name, {}, fake_request,
274
pod_id=pod_id, name=pod_name)
277
def test_handles_driver_raising_any_Exception(self):
278
fake_driver = MagicMock()
279
fake_driver.name = factory.make_name("pod")
280
fake_exception_type = factory.make_exception_type()
281
fake_exception_msg = factory.make_name("error")
282
fake_exception = fake_exception_type(fake_exception_msg)
283
fake_driver.compose.return_value = fail(fake_exception)
284
fake_request = self.make_requested_machine()
285
pod_id = random.randint(1, 10)
286
pod_name = factory.make_name("pod")
288
PodDriverRegistry, "get_item").return_value = fake_driver
289
with ExpectedException(
290
exceptions.PodActionFail,
291
re.escape("Failed talking to pod: " + fake_exception_msg)):
292
yield pods.compose_machine(
293
fake_driver.name, {}, fake_request,
294
pod_id=pod_id, name=pod_name)