Beispiel #1
0
    def test_power_on_powers_on_blade(self):
        driver = MicrosoftOCSPowerDriver()
        context = make_context()
        system_id = factory.make_name("system_id")
        mock_power_query = self.patch(driver, "power_query")
        mock_power_query.return_value = "on"
        mock_power_off = self.patch(driver, "power_off")
        mock_set_next_boot_device = self.patch(driver, "set_next_boot_device")
        mock_get = self.patch(driver, "get")
        driver.power_on(system_id, context)

        self.expectThat(
            mock_power_query, MockCalledOnceWith(system_id, context)
        )
        self.expectThat(mock_power_off, MockCalledOnceWith(system_id, context))
        self.expectThat(
            mock_set_next_boot_device,
            MockCallsMatch(
                call(context, persistent=True), call(context, pxe=True)
            ),
        )
        self.expectThat(
            mock_get,
            MockCalledOnceWith(
                "SetBladeOn", context, ["bladeid=%s" % context["blade_id"]]
            ),
        )
Beispiel #2
0
 def test_power_off_powers_off_blade(self):
     driver = MicrosoftOCSPowerDriver()
     context = make_context()
     system_id = factory.make_name('system_id')
     mock_get = self.patch(driver, "get")
     driver.power_off(system_id, context)
     self.assertThat(
         mock_get, MockCalledOnceWith(
             'SetBladeOff', context, ["bladeid=%s" % context['blade_id']]))
Beispiel #3
0
 def test_extract_from_response_finds_element_content(self):
     driver = MicrosoftOCSPowerDriver()
     response = dedent("""
         <a xmlns='%s' xmlns:i='%s'>
             <b/>
             <c/>
             <d>Test</d>
         </a>
     """ % (XMLNS, XMLNS_I))
     element_tag = "d"
     expected = "Test"
     output = driver.extract_from_response(response, element_tag)
     self.assertThat(output, Equals(expected))
Beispiel #4
0
 def test_set_next_boot_device_sets_device(self):
     driver = MicrosoftOCSPowerDriver()
     context = make_context()
     bootType = '2'
     boot_uefi = 'false'
     boot_persistent = 'false'
     params = [
         "bladeid=%s" % context['blade_id'], "bootType=%s" % bootType,
         "uefi=%s" % boot_uefi, "persistent=%s" % boot_persistent
     ]
     mock_get = self.patch(driver, "get")
     driver.set_next_boot_device(context, pxe=True)
     self.assertThat(
         mock_get, MockCalledOnceWith('SetNextBoot', context, params))
Beispiel #5
0
 def test_power_query_returns_power_state(self, power_state):
     def get_msftocs_state(power_state):
         if power_state == MicrosoftOCSState.OFF:
             return 'off'
         elif power_state == MicrosoftOCSState.ON:
             return 'on'
     driver = MicrosoftOCSPowerDriver()
     context = make_context()
     system_id = factory.make_name('system_id')
     mock_extract_from_response = self.patch(
         driver, "extract_from_response")
     mock_extract_from_response.return_value = power_state
     self.patch(driver, "get")
     output = driver.power_query(system_id, context)
     self.assertThat(output, Equals(get_msftocs_state(power_state)))
Beispiel #6
0
 def test_get_crashes_on_url_error(self):
     driver = MicrosoftOCSPowerDriver()
     context = make_context()
     command = factory.make_string()
     mock_urlopen = self.patch(urllib.request, "urlopen")
     mock_urlopen.side_effect = urllib.error.URLError("URL Error")
     self.assertRaises(PowerConnError, driver.get, command, context)
Beispiel #7
0
 def test_get_gets_response(self):
     driver = MicrosoftOCSPowerDriver()
     context = make_context()
     command = factory.make_string()
     params = [factory.make_string() for _ in range(3)]
     expected = dedent("""
         <ChassisInfoResponse xmlns='%s' xmlns:i='%s'>
             <bladeCollections>
                 <BladeInfo>
                 </BladeInfo>
             </bladeCollections>
         </ChassisInfoResponse>
     """ % (XMLNS, XMLNS_I))
     response = StringIO(expected)
     self.patch(urllib.request, "urlopen", Mock(return_value=response))
     output = driver.get(command, context, params)
     self.assertEquals(output, expected)
Beispiel #8
0
 def test_power_off_crashes_for_connection_error(self):
     driver = MicrosoftOCSPowerDriver()
     context = make_context()
     system_id = factory.make_name("system_id")
     mock_get = self.patch(driver, "get")
     mock_get.side_effect = PowerConnError("Connection Error")
     self.assertRaises(PowerActionError, driver.power_off, system_id,
                       context)
Beispiel #9
0
    def test_get_blades_gets_blades(self):
        driver = MicrosoftOCSPowerDriver()
        context = make_context()
        response = dedent(
            """
            <ChassisInfoResponse xmlns='%s' xmlns:i='%s'>
                <bladeCollections>
                    <BladeInfo>
                        <completionCode>Success</completionCode>
                        <apiVersion>1</apiVersion>
                        <statusDescription/>
                        <bladeNumber>11</bladeNumber>
                        <bladeGuid></bladeGuid>
                        <bladeName>BLADE11</bladeName>
                        <powerState>ON</powerState>
                        <bladeMacAddress>
                            <NicInfo>
                                <completionCode>Success</completionCode>
                                <apiVersion>1</apiVersion>
                                <statusDescription/>
                                <deviceId>1</deviceId>
                                <macAddress>F4:52:14:D6:70:98</macAddress>
                            </NicInfo>
                            <NicInfo>
                                <completionCode>Success</completionCode>
                                <apiVersion>1</apiVersion>
                                <statusDescription></statusDescription>
                                <deviceId>2</deviceId>
                                <macAddress/>
                            </NicInfo>
                        </bladeMacAddress>
                    </BladeInfo>
                </bladeCollections>
            </ChassisInfoResponse>
        """
            % (XMLNS, XMLNS_I)
        )
        mock_get = self.patch(driver, "get", Mock(return_value=response))
        expected = {"11": ["F4:52:14:D6:70:98"]}
        output = driver.get_blades(context)

        self.expectThat(output, Equals(expected))
        self.expectThat(
            mock_get, MockCalledOnceWith("GetChassisInfo", context)
        )
Beispiel #10
0
 def test_power_query_crashes_when_unable_to_find_match(self):
     driver = MicrosoftOCSPowerDriver()
     context = make_context()
     system_id = factory.make_name("system_id")
     mock_extract_from_response = self.patch(driver,
                                             "extract_from_response")
     mock_extract_from_response.return_value = "Rubbish"
     self.patch(driver, "get")
     self.assertRaises(PowerFatalError, driver.power_query, system_id,
                       context)
Beispiel #11
0
 def test_power_on_crashes_for_connection_error(self):
     driver = MicrosoftOCSPowerDriver()
     context = make_context()
     system_id = factory.make_name("system_id")
     self.patch(driver, "power_query", Mock(return_value="off"))
     self.patch(driver, "set_next_boot_device")
     mock_get = self.patch(driver, "get")
     mock_get.side_effect = PowerConnError("Connection Error")
     self.assertRaises(PowerActionError, driver.power_on, system_id,
                       context)
Beispiel #12
0
 def test_power_query_crashes_for_connection_error(self):
     driver = MicrosoftOCSPowerDriver()
     context = make_context()
     system_id = factory.make_name("system_id")
     mock_extract_from_response = self.patch(driver,
                                             "extract_from_response")
     mock_extract_from_response.side_effect = PowerConnError(
         "Connection Error")
     self.patch(driver, "get")
     self.assertRaises(PowerActionError, driver.power_query, system_id,
                       context)
Beispiel #13
0
 def test_missing_packages(self):
     # there's nothing to check for, just confirm it returns []
     driver = MicrosoftOCSPowerDriver()
     missing = driver.detect_missing_packages()
     self.assertItemsEqual([], missing)
Beispiel #14
0
        validate(schemas, JSON_POWER_DRIVERS_SCHEMA)
        return schemas


# Register all the power drivers.
power_drivers = [
    AMTPowerDriver(),
    APCPowerDriver(),
    DLIPowerDriver(),
    HMCPowerDriver(),
    IPMIPowerDriver(),
    LXDPowerDriver(),
    ManualPowerDriver(),
    MoonshotIPMIPowerDriver(),
    MSCMPowerDriver(),
    MicrosoftOCSPowerDriver(),
    NovaPowerDriver(),
    OpenBMCPowerDriver(),
    RECSPowerDriver(),
    RedfishPowerDriver(),
    SeaMicroPowerDriver(),
    UCSMPowerDriver(),
    VirshPowerDriver(),
    VMwarePowerDriver(),
    WedgePowerDriver(),
]
for driver in power_drivers:
    PowerDriverRegistry.register_item(driver.name, driver)


# Pod drivers are also power drivers.