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"]] ), )
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']]))
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))
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))
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)))
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)
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)
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)
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) )
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)
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)
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)
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)
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.