python-dracclient/dracclient/tests/test_utils.py
Christopher Dearborn 72ea2323e5 Separate reboot required from commit required
This patch separates indicators for reboot required and commit required.
It does this by adding two new keys (is_reboot_required and
is_commit_required) to the dictionary returned by set/create/modify
operations while continuing to return the commit_required key for
backwards compatibility.

The commit_required key should be considered deprecated at this time and
it will be removed in a future patch.

The is_reboot_required key has an enumerated value that can have three
possible values: true, optional, and false.  This allows the return of
optional for RAID operations that can return this value.

Change-Id: I70e52868f10bfafb30bbb38b85888bc4ec8e65ae
Closes-Bug: 1732549
2018-01-22 09:36:53 -05:00

176 lines
7.1 KiB
Python

#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import re
from lxml import etree
from dracclient import exceptions
from dracclient.resources import uris
from dracclient.tests import base
from dracclient.tests import utils as test_utils
from dracclient import utils
class UtilsTestCase(base.BaseTest):
def setUp(self):
super(UtilsTestCase, self).setUp()
def test__is_attr_non_nil_True(self):
doc = etree.fromstring(
test_utils.RAIDEnumerations[
uris.DCIM_ControllerView]['ok'])
controllers = utils.find_xml(doc, 'DCIM_ControllerView',
uris.DCIM_ControllerView, find_all=True)
version = utils.find_xml(controllers[0], 'Bus',
uris.DCIM_ControllerView)
self.assertTrue(utils._is_attr_non_nil(version))
def test__is_attr_non_nil_False(self):
doc = etree.fromstring(
test_utils.RAIDEnumerations[
uris.DCIM_ControllerView]['ok'])
controllers = utils.find_xml(doc, 'DCIM_ControllerView',
uris.DCIM_ControllerView, find_all=True)
version = utils.find_xml(controllers[0], 'DriverVersion',
uris.DCIM_ControllerView)
self.assertFalse(utils._is_attr_non_nil(version))
def test_get_wsman_resource_attr(self):
doc = etree.fromstring(
test_utils.InventoryEnumerations[uris.DCIM_CPUView]['ok'])
cpus = utils.find_xml(doc, 'DCIM_CPUView', uris.DCIM_CPUView,
find_all=True)
val = utils.get_wsman_resource_attr(
cpus[0], uris.DCIM_CPUView, 'HyperThreadingEnabled',
allow_missing=False)
self.assertEqual('1', val)
def test_get_wsman_resource_attr_missing_attr(self):
expected_message = ("Attribute 'HyperThreadingEnabled' is missing "
"from the response")
doc = etree.fromstring(
test_utils.InventoryEnumerations[
uris.DCIM_CPUView]['missing_flags'])
cpus = utils.find_xml(doc, 'DCIM_CPUView', uris.DCIM_CPUView,
find_all=True)
self.assertRaisesRegexp(
exceptions.DRACMissingResponseField, re.escape(expected_message),
utils.get_wsman_resource_attr, cpus[0], uris.DCIM_CPUView,
'HyperThreadingEnabled', allow_missing=False)
def test_get_wsman_resource_attr_missing_attr_allowed(self):
doc = etree.fromstring(
test_utils.InventoryEnumerations[
uris.DCIM_CPUView]['missing_flags'])
cpus = utils.find_xml(doc, 'DCIM_CPUView', uris.DCIM_CPUView,
find_all=True)
val = utils.get_wsman_resource_attr(
cpus[0], uris.DCIM_CPUView, 'HyperThreadingEnabled',
allow_missing=True)
self.assertIsNone(val)
def test_get_wsman_resource_attr_missing_text(self):
expected_message = ("Attribute 'HyperThreadingEnabled' is not nullable"
", but no value received")
doc = etree.fromstring(
test_utils.InventoryEnumerations[
uris.DCIM_CPUView]['empty_flag'])
cpus = utils.find_xml(doc, 'DCIM_CPUView', uris.DCIM_CPUView,
find_all=True)
self.assertRaisesRegexp(
exceptions.DRACEmptyResponseField, re.escape(expected_message),
utils.get_wsman_resource_attr, cpus[0], uris.DCIM_CPUView,
'HyperThreadingEnabled', allow_missing=False)
def test_get_wsman_resource_attr_missing_text_allowed(self):
doc = etree.fromstring(
test_utils.RAIDEnumerations[
uris.DCIM_ControllerView]['ok'])
controllers = utils.find_xml(doc, 'DCIM_ControllerView',
uris.DCIM_ControllerView, find_all=True)
result = utils.get_wsman_resource_attr(
controllers[0], uris.DCIM_ControllerView, 'DriverVersion',
allow_missing=False, nullable=True)
self.assertIsNone(result)
def test_get_all_wsman_resource_attrs(self):
doc = etree.fromstring(
test_utils.RAIDEnumerations[uris.DCIM_VirtualDiskView]['ok'])
vdisks = utils.find_xml(doc, 'DCIM_VirtualDiskView',
uris.DCIM_VirtualDiskView, find_all=True)
vals = utils.get_all_wsman_resource_attrs(
vdisks[0], uris.DCIM_VirtualDiskView, 'PhysicalDiskIDs')
expected_pdisks = [
'Disk.Bay.0:Enclosure.Internal.0-1:RAID.Integrated.1-1',
'Disk.Bay.1:Enclosure.Internal.0-1:RAID.Integrated.1-1'
]
self.assertListEqual(expected_pdisks, vals)
def test_get_all_wsman_resource_attrs_missing_attr_allowed(self):
doc = etree.fromstring(
test_utils.InventoryEnumerations[
uris.DCIM_CPUView]['missing_flags'])
cpus = utils.find_xml(doc, 'DCIM_CPUView', uris.DCIM_CPUView,
find_all=True)
vals = utils.get_all_wsman_resource_attrs(
cpus[0], uris.DCIM_CPUView, 'HyperThreadingEnabled')
self.assertListEqual([], vals)
def test_get_all_wsman_resource_attrs_missing_text(self):
expected_message = ("Attribute 'HyperThreadingEnabled' is not nullable"
", but no value received")
doc = etree.fromstring(
test_utils.InventoryEnumerations[
uris.DCIM_CPUView]['empty_flag'])
cpus = utils.find_xml(doc, 'DCIM_CPUView', uris.DCIM_CPUView,
find_all=True)
self.assertRaisesRegexp(
exceptions.DRACEmptyResponseField, re.escape(expected_message),
utils.get_all_wsman_resource_attrs, cpus[0], uris.DCIM_CPUView,
'HyperThreadingEnabled')
def test_get_all_wsman_resource_attrs_missing_text_allowed(self):
doc = etree.fromstring(
test_utils.RAIDEnumerations[
uris.DCIM_ControllerView]['ok'])
controllers = utils.find_xml(doc, 'DCIM_ControllerView',
uris.DCIM_ControllerView, find_all=True)
result = utils.get_all_wsman_resource_attrs(
controllers[0], uris.DCIM_ControllerView, 'DriverVersion',
nullable=True)
self.assertEqual(result, [])
def test_build_return_dict_fail(self):
self.assertRaises(exceptions.InvalidParameterValue,
utils.build_return_dict,
doc=None,
resource_uri=None,
is_reboot_required_value='foo')