Add missing attribute in Memory in RSD 2.2

Change-Id: If9e628b052256063b958db1fc9933fa8d4372bc3
This commit is contained in:
Lin Yang 2019-05-24 15:56:06 -07:00
parent 19e4762e1c
commit 633e41d038
2 changed files with 92 additions and 91 deletions

View File

@ -13,7 +13,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from sushy.resources import base
from sushy import utils
from rsd_lib.resources.v2_1.system import memory
@ -21,28 +20,22 @@ from rsd_lib.resources.v2_2.system import memory_metrics
class Memory(memory.Memory):
max_tdp_milliwatts = base.Field('MaxTDPMilliWatts')
def _get_metrics_path(self):
"""Helper function to find the memory metrics path"""
return utils.get_sub_resource_path_by(self, 'Metrics')
@property
@utils.cache_it
def metrics(self):
"""Property to provide reference to `Metrics` instance
"""Property to provide reference to `MemoryMetrics` instance
It is calculated once the first time it is queried. On refresh,
this property is reset.
It is calculated once when it is queried for the first time. On
refresh, this property is reset.
"""
return memory_metrics.MemoryMetrics(
self._conn, self._get_metrics_path(),
redfish_version=self.redfish_version)
self._conn,
utils.get_sub_resource_path_by(self, "Metrics"),
redfish_version=self.redfish_version,
)
class MemoryCollection(memory.MemoryCollection):
@property
def _resource_type(self):
return Memory

View File

@ -17,156 +17,164 @@ import json
import mock
import testtools
from sushy import exceptions
from rsd_lib.resources.v2_2.system import memory
from rsd_lib.resources.v2_2.system import memory_metrics
class MemoryTestCase(testtools.TestCase):
def setUp(self):
super(MemoryTestCase, self).setUp()
self.conn = mock.Mock()
with open('rsd_lib/tests/unit/json_samples/v2_2/memory.json',
'r') as f:
with open(
"rsd_lib/tests/unit/json_samples/v2_2/memory.json", "r"
) as f:
self.conn.get.return_value.json.return_value = json.loads(f.read())
self.memory_inst = memory.Memory(
self.conn, '/redfish/v1/Systems/System1/Memory/Dimm1',
redfish_version='1.1.0')
self.conn,
"/redfish/v1/Systems/System1/Memory/Dimm1",
redfish_version="1.1.0",
)
def test__parse_attributes(self):
self.memory_inst._parse_attributes()
self.assertEqual('1.1.0', self.memory_inst.redfish_version)
self.assertEqual('DIMM', self.memory_inst.name)
self.assertEqual('Dimm1', self.memory_inst.identity)
self.assertEqual('DRAM', self.memory_inst.memory_type)
self.assertEqual('DDR4', self.memory_inst.memory_device_type)
self.assertEqual('LRDIMM', self.memory_inst.base_module_type)
self.assertEqual(['DRAM'], self.memory_inst.memory_media)
self.assertEqual("1.1.0", self.memory_inst.redfish_version)
self.assertEqual("DIMM", self.memory_inst.name)
self.assertEqual("Dimm1", self.memory_inst.identity)
self.assertEqual("DRAM", self.memory_inst.memory_type)
self.assertEqual("DDR4", self.memory_inst.memory_device_type)
self.assertEqual("LRDIMM", self.memory_inst.base_module_type)
self.assertEqual(["DRAM"], self.memory_inst.memory_media)
self.assertEqual(16384, self.memory_inst.capacity_mib)
self.assertEqual(64, self.memory_inst.data_width_bits)
self.assertEqual(72, self.memory_inst.bus_width_bits)
self.assertEqual('Contoso', self.memory_inst.manufacturer)
self.assertEqual('1A2B3B', self.memory_inst.serial_number)
self.assertEqual('1A2B3D', self.memory_inst.part_number)
self.assertEqual([2133, 2400, 2667],
self.memory_inst.allowed_speeds_mhz)
self.assertEqual('RevAbc', self.memory_inst.firmware_revision)
self.assertEqual('ApiAbc', self.memory_inst.firmware_api_version)
self.assertEqual(['Volatile'], self.memory_inst.function_classes)
self.assertEqual('vendorX', self.memory_inst.vendor_id)
self.assertEqual('deviceX', self.memory_inst.device_id)
self.assertEqual("Contoso", self.memory_inst.manufacturer)
self.assertEqual("1A2B3B", self.memory_inst.serial_number)
self.assertEqual("1A2B3D", self.memory_inst.part_number)
self.assertEqual(
[2133, 2400, 2667], self.memory_inst.allowed_speeds_mhz
)
self.assertEqual("RevAbc", self.memory_inst.firmware_revision)
self.assertEqual("ApiAbc", self.memory_inst.firmware_api_version)
self.assertEqual(["Volatile"], self.memory_inst.function_classes)
self.assertEqual("vendorX", self.memory_inst.vendor_id)
self.assertEqual("deviceX", self.memory_inst.device_id)
self.assertEqual(1, self.memory_inst.rank_count)
self.assertEqual('PROC 1 DIMM 1', self.memory_inst.device_locator)
self.assertEqual('MultiBitECC', self.memory_inst.error_correction)
self.assertEqual("PROC 1 DIMM 1", self.memory_inst.device_locator)
self.assertEqual("MultiBitECC", self.memory_inst.error_correction)
self.assertEqual(2400, self.memory_inst.operating_speed_mhz)
self.assertEqual(['Volatile'], self.memory_inst.operating_memory_modes)
self.assertEqual(["Volatile"], self.memory_inst.operating_memory_modes)
self.assertEqual(1, self.memory_inst.memory_location.socket)
self.assertEqual(1, self.memory_inst.memory_location.memory_controller)
self.assertEqual(1, self.memory_inst.memory_location.channel)
self.assertEqual(1, self.memory_inst.memory_location.slot)
self.assertEqual('Enabled', self.memory_inst.status.state)
self.assertEqual('OK', self.memory_inst.status.health)
self.assertEqual('OK', self.memory_inst.status.health_rollup)
self.assertEqual([5000], self.memory_inst.max_tdp_milliwatts)
def test__get_metrics_path(self):
self.assertEqual('/redfish/v1/Systems/System1/Memory/Dimm1/Metrics',
self.memory_inst._get_metrics_path())
def test__get_metrics_path_missing_attr(self):
self.memory_inst._json.pop('Metrics')
with self.assertRaisesRegex(
exceptions.MissingAttributeError, 'attribute Metrics'):
self.memory_inst._get_metrics_path()
self.assertEqual("Enabled", self.memory_inst.status.state)
self.assertEqual("OK", self.memory_inst.status.health)
self.assertEqual("OK", self.memory_inst.status.health_rollup)
self.assertEqual([5000], self.memory_inst.max_tdp_milli_watts)
def test_metrics(self):
# | GIVEN |
self.conn.get.return_value.json.reset_mock()
with open('rsd_lib/tests/unit/json_samples/v2_2/'
'memory_metrics.json', 'r') as f:
with open(
"rsd_lib/tests/unit/json_samples/v2_2/" "memory_metrics.json", "r"
) as f:
self.conn.get.return_value.json.return_value = json.loads(f.read())
# | WHEN |
actual_metrics = self.memory_inst.metrics
# | THEN |
self.assertIsInstance(actual_metrics,
memory_metrics.MemoryMetrics)
self.assertIsInstance(actual_metrics, memory_metrics.MemoryMetrics)
self.conn.get.return_value.json.assert_called_once_with()
# reset mock
self.conn.get.return_value.json.reset_mock()
# | WHEN & THEN |
# tests for same object on invoking subsequently
self.assertIs(actual_metrics,
self.memory_inst.metrics)
self.assertIs(actual_metrics, self.memory_inst.metrics)
self.conn.get.return_value.json.assert_not_called()
def test_metrics_on_refresh(self):
# | GIVEN |
with open('rsd_lib/tests/unit/json_samples/v2_2/'
'memory_metrics.json', 'r') as f:
with open(
"rsd_lib/tests/unit/json_samples/v2_2/" "memory_metrics.json", "r"
) as f:
self.conn.get.return_value.json.return_value = json.loads(f.read())
# | WHEN & THEN |
self.assertIsInstance(self.memory_inst.metrics,
memory_metrics.MemoryMetrics)
self.assertIsInstance(
self.memory_inst.metrics, memory_metrics.MemoryMetrics
)
# On refreshing the processor instance...
with open('rsd_lib/tests/unit/json_samples/v2_2/memory.json',
'r') as f:
with open(
"rsd_lib/tests/unit/json_samples/v2_2/memory.json", "r"
) as f:
self.conn.get.return_value.json.return_value = json.loads(f.read())
self.memory_inst.invalidate()
self.memory_inst.refresh(force=False)
# | GIVEN |
with open('rsd_lib/tests/unit/json_samples/v2_2/'
'memory_metrics.json', 'r') as f:
with open(
"rsd_lib/tests/unit/json_samples/v2_2/" "memory_metrics.json", "r"
) as f:
self.conn.get.return_value.json.return_value = json.loads(f.read())
# | WHEN & THEN |
self.assertIsInstance(self.memory_inst.metrics,
memory_metrics.MemoryMetrics)
self.assertIsInstance(
self.memory_inst.metrics, memory_metrics.MemoryMetrics
)
class MemoryCollectionTestCase(testtools.TestCase):
def setUp(self):
super(MemoryCollectionTestCase, self).setUp()
self.conn = mock.Mock()
with open('rsd_lib/tests/unit/json_samples/v2_2/'
'memory_collection.json', 'r') as f:
with open(
"rsd_lib/tests/unit/json_samples/v2_2/" "memory_collection.json",
"r",
) as f:
self.conn.get.return_value.json.return_value = json.loads(f.read())
self.sys_memory_col = memory.MemoryCollection(
self.conn, '/redfish/v1/Systems/System1/Memory',
redfish_version='1.1.0')
self.conn,
"/redfish/v1/Systems/System1/Memory",
redfish_version="1.1.0",
)
def test__parse_attributes(self):
self.sys_memory_col._parse_attributes()
self.assertEqual('1.1.0', self.sys_memory_col.redfish_version)
self.assertEqual(('/redfish/v1/Systems/System1/Memory/Dimm1',
'/redfish/v1/Systems/System1/Memory/Dimm2'),
self.sys_memory_col.members_identities)
self.assertEqual("1.1.0", self.sys_memory_col.redfish_version)
self.assertEqual(
(
"/redfish/v1/Systems/System1/Memory/Dimm1",
"/redfish/v1/Systems/System1/Memory/Dimm2",
),
self.sys_memory_col.members_identities,
)
@mock.patch.object(memory, 'Memory', autospec=True)
@mock.patch.object(memory, "Memory", autospec=True)
def test_get_member(self, mock_memory):
self.sys_memory_col.get_member(
'/redfish/v1/Systems/System1/Memory/Dimm1')
"/redfish/v1/Systems/System1/Memory/Dimm1"
)
mock_memory.assert_called_once_with(
self.sys_memory_col._conn,
'/redfish/v1/Systems/System1/Memory/Dimm1',
redfish_version=self.sys_memory_col.redfish_version)
"/redfish/v1/Systems/System1/Memory/Dimm1",
redfish_version=self.sys_memory_col.redfish_version,
)
@mock.patch.object(memory, 'Memory', autospec=True)
@mock.patch.object(memory, "Memory", autospec=True)
def test_get_members(self, mock_memory):
members = self.sys_memory_col.get_members()
calls = [
mock.call(self.sys_memory_col._conn,
'/redfish/v1/Systems/System1/Memory/Dimm1',
redfish_version=self.sys_memory_col.redfish_version),
mock.call(self.sys_memory_col._conn,
'/redfish/v1/Systems/System1/Memory/Dimm2',
redfish_version=self.sys_memory_col.redfish_version)
mock.call(
self.sys_memory_col._conn,
"/redfish/v1/Systems/System1/Memory/Dimm1",
redfish_version=self.sys_memory_col.redfish_version,
),
mock.call(
self.sys_memory_col._conn,
"/redfish/v1/Systems/System1/Memory/Dimm2",
redfish_version=self.sys_memory_col.redfish_version,
),
]
mock_memory.assert_has_calls(calls)
self.assertIsInstance(members, list)