~gmb/maas/dont-powercheck-broken-nodes-bug-1402243

« back to all changes in this revision

Viewing changes to src/provisioningserver/rpc/tests/test_power.py

  • Committer: MaaS Lander
  • Author(s): Andres Rodriguez, Blake Rouse
  • Date: 2014-12-06 17:18:49 UTC
  • mfrom: (3402.1.3 maas)
  • Revision ID: maas_lander-20141206171849-ab1q3fm6na51gc9o
[r=andreserl][bug=1384424][author=andreserl] Support the ability to query the power status of sm15k using RESTAPI v2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
323
323
        self.assertThat(markNodeBroken, MockNotCalled())
324
324
 
325
325
    @inlineCallbacks
 
326
    def test_change_power_state_doesnt_retry_if_query_returns_unknown(self):
 
327
        system_id = factory.make_name('system_id')
 
328
        hostname = factory.make_name('hostname')
 
329
        power_type = random.choice(power.QUERY_POWER_TYPES)
 
330
        power_change = random.choice(['on', 'off'])
 
331
        context = {
 
332
            factory.make_name('context-key'): factory.make_name('context-val')
 
333
        }
 
334
        self.patch(power, 'pause')
 
335
        power.power_action_registry[system_id] = power_change
 
336
        # Patch the power action utility so that it says the node is
 
337
        # in the required power state.
 
338
        power_action, execute = patch_power_action(
 
339
            self, return_value="unknown")
 
340
        markNodeBroken = yield self.patch_rpc_methods()
 
341
 
 
342
        yield power.change_power_state(
 
343
            system_id, hostname, power_type, power_change, context)
 
344
        self.assertThat(
 
345
            execute,
 
346
            MockCallsMatch(
 
347
                # One call to change the power state.
 
348
                call(power_change=power_change, **context),
 
349
                # One call to query the power state.
 
350
                call(power_change='query', **context),
 
351
            ),
 
352
        )
 
353
        # The node hasn't been marked broken.
 
354
        self.assertThat(markNodeBroken, MockNotCalled())
 
355
 
 
356
    @inlineCallbacks
326
357
    def test_change_power_state_marks_the_node_broken_if_failure(self):
327
358
        system_id = factory.make_name('system_id')
328
359
        hostname = factory.make_name('hostname')
548
579
        self.assertThat(
549
580
            power_state_update, MockCalledOnceWith(system_id, power_state))
550
581
 
 
582
    def test_get_power_state_changes_power_state_if_unknown(self):
 
583
        system_id = factory.make_name('system_id')
 
584
        hostname = factory.make_name('hostname')
 
585
        power_state = "unknown"
 
586
        power_type = random.choice(power.QUERY_POWER_TYPES)
 
587
        context = {
 
588
            factory.make_name('context-key'): factory.make_name('context-val')
 
589
        }
 
590
        self.patch(power, 'pause')
 
591
        power_state_update = self.patch_autospec(power, 'power_state_update')
 
592
 
 
593
        # Simulate success.
 
594
        power_action, execute = patch_power_action(
 
595
            self, return_value=power_state)
 
596
        _, _, io = self.patch_rpc_methods()
 
597
 
 
598
        d = power.get_power_state(
 
599
            system_id, hostname, power_type, context)
 
600
        io.flush()
 
601
        self.assertEqual(power_state, extract_result(d))
 
602
        self.assertThat(
 
603
            power_state_update, MockCalledOnceWith(system_id, power_state))
 
604
 
551
605
    def test_get_power_state_pauses_inbetween_retries(self):
552
606
        system_id = factory.make_name('system_id')
553
607
        hostname = factory.make_name('hostname')