proliantutils/proliantutils/tests/redfish/resources/system/storage/test_common.py

152 lines
6.4 KiB
Python

# Copyright 2017 Hewlett Packard Enterprise Development LP
#
# 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.
__author__ = 'HPE'
import ddt
import mock
import sushy
import testtools
from proliantutils import exception
from proliantutils.redfish.resources.system.storage import common
@ddt.ddt
class CommonMethodsTestCase(testtools.TestCase):
def setUp(self):
super(CommonMethodsTestCase, self).setUp()
self.system_obj = mock.MagicMock()
def _mock_property(self, value):
if value is sushy.exceptions.SushyError:
mock_value = mock.PropertyMock(side_effect=value)
else:
mock_value = mock.PropertyMock(return_value=value)
return mock_value
@ddt.data((953837, 60000, 60000, 60000, 60000, 930),
(sushy.exceptions.SushyError, 1000169537536, 60000, 60000,
60000, 930),
(953837, sushy.exceptions.SushyError, 60000, 60000, 60000,
930),
(sushy.exceptions.SushyError, sushy.exceptions.SushyError,
953837, 60000, 40000, 930),
(sushy.exceptions.SushyError, sushy.exceptions.SushyError,
sushy.exceptions.SushyError, 1000169537536, 40000, 930),
(sushy.exceptions.SushyError, sushy.exceptions.SushyError,
sushy.exceptions.SushyError, sushy.exceptions.SushyError,
1000169537536, 930),
(sushy.exceptions.SushyError, sushy.exceptions.SushyError,
sushy.exceptions.SushyError, sushy.exceptions.SushyError,
sushy.exceptions.SushyError, 0),
)
@ddt.unpack
def test_get_local_gb(self, logical_max, volume_max, physical_max,
drive_max, simple_max, expected):
system_obj = self.system_obj
type(system_obj.smart_storage).logical_drives_maximum_size_mib = (
self._mock_property(logical_max))
type(system_obj.storages).volumes_maximum_size_bytes = (
self._mock_property(volume_max))
type(system_obj.smart_storage).physical_drives_maximum_size_mib = (
self._mock_property(physical_max))
type(system_obj.storages).drives_maximum_size_bytes = (
self._mock_property(drive_max))
type(system_obj.simple_storages).maximum_size_bytes = (
self._mock_property(simple_max))
actual = common.get_local_gb(system_obj)
self.assertEqual(expected, actual)
def test__get_attribute_value_of(self):
system_obj = self.system_obj
si_mock = mock.PropertyMock(return_value=1000169537536)
type(system_obj.simple_storages).maximum_size_bytes = si_mock
actual = common._get_attribute_value_of(system_obj.simple_storages,
'maximum_size_bytes')
self.assertEqual(1000169537536, actual)
def test__get_attribute_value_of_sushy_error(self):
system_obj = self.system_obj
si_mock = mock.PropertyMock(side_effect=sushy.exceptions.SushyError)
type(system_obj.simple_storages).maximum_size_bytes = si_mock
actual = common._get_attribute_value_of(system_obj.simple_storages,
'maximum_size_bytes',
default=0)
self.assertEqual(0, actual)
def test__get_attribute_value_of_fail_missing_attribute(self):
system_obj = self.system_obj
si_mock = mock.PropertyMock(
side_effect=exception.MissingAttributeError)
type(system_obj.simple_storages).maximum_size_bytes = si_mock
actual = common._get_attribute_value_of(system_obj.simple_storages,
'maximum_size_bytes')
self.assertIsNone(actual)
@ddt.data((True, False, True),
(True, True, True),
(False, True, True),
(False, False, False))
@ddt.unpack
def test_has_ssd(self, smart_value, storage_value, expected):
system_obj = self.system_obj
type(system_obj.smart_storage).has_ssd = (
self._mock_property(smart_value))
type(system_obj.storages).has_ssd = (
self._mock_property(storage_value))
actual = common.has_ssd(system_obj)
self.assertEqual(expected, actual)
@ddt.data((True, False, True),
(True, True, True),
(False, True, True),
(False, False, False))
@ddt.unpack
def test_has_rotational(self, smart_value, storage_value,
expected):
system_obj = self.system_obj
type(system_obj.smart_storage).has_rotational = (
self._mock_property(smart_value))
type(system_obj.storages).has_rotational = (
self._mock_property(storage_value))
actual = common.has_rotational(system_obj)
self.assertEqual(expected, actual)
@ddt.data((False, False),
(True, True))
@ddt.unpack
def test_has_nvme_ssd(self, storage_value, expected):
system_obj = self.system_obj
type(system_obj.storages).has_nvme_ssd = (
self._mock_property(storage_value))
actual = common.has_nvme_ssd(system_obj)
self.assertEqual(expected, actual)
@ddt.data((set([10000]), set([15000]), set([10000, 15000])),
(set([10000]), set(), set([10000])),
(set(), set([15000]), set([15000])),
(set(), set(), set()))
@ddt.unpack
def test_get_drive_rotational_speed_rpm(self, smart_value,
storage_value, expected):
system_obj = self.system_obj
type(system_obj.smart_storage).drive_rotational_speed_rpm = (
self._mock_property(smart_value))
type(system_obj.storages).drive_rotational_speed_rpm = (
self._mock_property(storage_value))
actual = common.get_drive_rotational_speed_rpm(system_obj)
self.assertEqual(expected, actual)