Add missing attribute in Memory in RSD 2.2
Change-Id: If9e628b052256063b958db1fc9933fa8d4372bc3
This commit is contained in:
parent
19e4762e1c
commit
633e41d038
@ -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
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user