diff --git a/rsd_lib/resources/v2_2/system/memory.py b/rsd_lib/resources/v2_2/system/memory.py index e07bef7..e32bf6e 100644 --- a/rsd_lib/resources/v2_2/system/memory.py +++ b/rsd_lib/resources/v2_2/system/memory.py @@ -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 diff --git a/rsd_lib/tests/unit/resources/v2_2/system/test_memory.py b/rsd_lib/tests/unit/resources/v2_2/system/test_memory.py index 1afeb33..ef1162e 100644 --- a/rsd_lib/tests/unit/resources/v2_2/system/test_memory.py +++ b/rsd_lib/tests/unit/resources/v2_2/system/test_memory.py @@ -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)