72ea2323e5
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
176 lines
7.1 KiB
Python
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')
|