Add missing attribute in Processor in RSD 2.2

Change-Id: I966e007a4b7362d2f86147de89a9e34aa0e1f151
This commit is contained in:
Lin Yang 2019-05-29 11:55:57 -07:00
parent b72d928986
commit bf06a290b4
4 changed files with 276 additions and 193 deletions

View File

@ -22,77 +22,90 @@ from rsd_lib.resources.v2_2.system import processor_metrics
from rsd_lib import utils as rsd_lib_utils from rsd_lib import utils as rsd_lib_utils
class OnPackageMemoryField(base.ListField): class ProcessorMemoryCollectionField(base.ListField):
"""ProcessorMemory field
memory_type = base.Field('Type') On die processor memory
"""Type of memory""" """
capacity_mb = base.Field('CapacityMB', adapter=rsd_lib_utils.num_or_none) type = base.Field("Type")
"""Memory capacity""" """Type of memory."""
speed_mhz = base.Field('SpeedMHz', adapter=rsd_lib_utils.num_or_none) capacity_mb = base.Field("CapacityMB", adapter=rsd_lib_utils.num_or_none)
"""Memory speed""" """Memory capacity."""
speed_mhz = base.Field("SpeedMHz", adapter=rsd_lib_utils.num_or_none)
"""Memory speed."""
class FpgaField(base.CompositeField): class FPGAField(base.CompositeField):
"""FPGA field
fpga_type = base.Field('Type') FPGA properties
"""Type of FPGA""" """
bit_stream_version = base.Field('BitStreamVersion') type = base.Field("Type")
"""Version of BitStream loaded on FPGA""" """FPGA type."""
hssi_configuration = base.Field('HSSIConfiguration') bit_stream_version = base.Field("BitStreamVersion")
"""High Speed Serial Interface configuration""" """Version of BitStream loaded on FPGA."""
hssi_sideband = base.Field('HSSISideband') hssi_configuration = base.Field("HSSIConfiguration")
"""High Speed Serial Interface sideband interface type""" """High Speed Serial Interface configuration."""
hssi_sideband = base.Field("HSSISideband")
"""High Speed Serial Interface sideband interface type."""
reconfiguration_slots = base.Field( reconfiguration_slots = base.Field(
'ReconfigurationSlots', adapter=rsd_lib_utils.num_or_none) "ReconfigurationSlots", adapter=rsd_lib_utils.num_or_none
"""Number of supported reconfiguration slots""" )
"""Number of supported reconfiguration slots."""
class IntelRackScaleField(processor.IntelRackScaleField): class IntelRackScaleField(processor.IntelRackScaleField):
on_package_memory = OnPackageMemoryField('OnPackageMemory') brand = base.Field("Brand")
"""An array of references to the endpoints that connect to this processor """This indicates processor brand"""
capabilities = base.Field("Capabilities")
"""This indicates array of processor capabilities"""
on_package_memory = ProcessorMemoryCollectionField("OnPackageMemory")
"""An array of references to the endpoints that connect to this processor.
""" """
thermal_design_power_watt = base.Field( thermal_design_power_watt = base.Field(
'ThermalDesignPowerWatt', adapter=rsd_lib_utils.num_or_none) "ThermalDesignPowerWatt", adapter=rsd_lib_utils.num_or_none
"""Thermal Design Power (TDP) of this processor""" )
"""Thermal Design Power (TDP) of this processor."""
metrics = base.Field( fpga = FPGAField("FPGA")
'Metrics', adapter=rsd_lib_utils.get_resource_identity) """FPGA specific properties for FPGA ProcessorType."""
"""A reference to the Metrics associated with this Processor"""
extended_identification_registers = rsd_lib_base.DynamicField( extended_identification_registers = rsd_lib_base.DynamicField(
'ExtendedIdentificationRegisters') "ExtendedIdentificationRegisters"
)
"""Extended contents of the Identification Registers (CPUID) for this """Extended contents of the Identification Registers (CPUID) for this
processor processor
""" """
fpga = FpgaField('FPGA') metrics = base.Field(
"""FPGA specific properties for FPGA ProcessorType""" "Metrics", adapter=rsd_lib_utils.get_resource_identity
)
"""A reference to the Metrics associated with this Processor"""
class OemField(base.CompositeField): class OemField(base.CompositeField):
intel_rackscale = IntelRackScaleField('Intel_RackScale') intel_rackscale = IntelRackScaleField("Intel_RackScale")
"""Intel Rack Scale Design extensions ('Intel_RackScale' object)""" """Intel Rack Scale Design extensions ('Intel_RackScale' object)"""
class Processor(processor.Processor): class Processor(processor.Processor):
oem = OemField('Oem') oem = OemField("Oem")
"""Oem extension object""" """Oem extension object"""
def _get_metrics_path(self):
"""Helper function to find the System process metrics path"""
return utils.get_sub_resource_path_by(
self, ['Oem', 'Intel_RackScale', 'Metrics'])
@property @property
@utils.cache_it @utils.cache_it
def metrics(self): def metrics(self):
@ -102,12 +115,15 @@ class Processor(processor.Processor):
this property is reset. this property is reset.
""" """
return processor_metrics.ProcessorMetrics( return processor_metrics.ProcessorMetrics(
self._conn, self._get_metrics_path(), self._conn,
redfish_version=self.redfish_version) utils.get_sub_resource_path_by(
self, ["Oem", "Intel_RackScale", "Metrics"]
),
redfish_version=self.redfish_version,
)
class ProcessorCollection(processor.ProcessorCollection): class ProcessorCollection(processor.ProcessorCollection):
@property @property
def _resource_type(self): def _resource_type(self):
return Processor return Processor

View File

@ -15,34 +15,41 @@
from sushy.resources import base from sushy.resources import base
from rsd_lib import base as rsd_lib_base
from rsd_lib import utils as rsd_lib_utils from rsd_lib import utils as rsd_lib_utils
class ProcessorMetrics(base.ResourceBase): class ProcessorMetrics(rsd_lib_base.ResourceBase):
name = base.Field('Name') """ProcessorMetrics resource class
"""The metrics name"""
description = base.Field('Description') ProcessorMetrics contains usage and health statistics for a Processor
"""The metrics description""" (all Cores) .
"""
identity = base.Field('Id') bandwidth_percent = base.Field(
"""The metrics identity""" "BandwidthPercent", adapter=rsd_lib_utils.num_or_none
)
"""CPU Bandwidth in [%]"""
average_frequency_mhz = base.Field('AverageFrequencyMHz', average_frequency_mhz = base.Field(
adapter=rsd_lib_utils.num_or_none) "AverageFrequencyMHz", adapter=rsd_lib_utils.num_or_none
"""The processor average frequency mhz""" )
"""Average frequency [MHz]"""
throttling_celsius = base.Field('ThrottlingCelsius', throttling_celsius = base.Field(
adapter=rsd_lib_utils.num_or_none) "ThrottlingCelsius", adapter=rsd_lib_utils.num_or_none
"""The processor throttling celsius""" )
"""CPU Margin to throttle (temperature offset in degree Celsius)"""
temperature_celsius = base.Field('TemperatureCelsius', temperature_celsius = base.Field(
adapter=rsd_lib_utils.num_or_none) "TemperatureCelsius", adapter=rsd_lib_utils.num_or_none
"""The processor temperature celsius""" )
"""Temperature of the Processor resource"""
consumed_power_watt = base.Field('ConsumedPowerWatt', consumed_power_watt = base.Field(
adapter=rsd_lib_utils.num_or_none) "ConsumedPowerWatt", adapter=rsd_lib_utils.num_or_none
"""The processor consumed power watt""" )
"""Power consumed by Processor resource"""
health = base.Field('Health') health = base.Field("Health")
"""The detail health information""" """CPU Health as a discrete sensor reading"""

View File

@ -17,266 +17,317 @@ import json
import mock import mock
import testtools import testtools
from sushy import exceptions
from rsd_lib.resources.v2_2.system import processor from rsd_lib.resources.v2_2.system import processor
from rsd_lib.resources.v2_2.system import processor_metrics from rsd_lib.resources.v2_2.system import processor_metrics
class ProcessorTestCase(testtools.TestCase): class ProcessorTestCase(testtools.TestCase):
def setUp(self): def setUp(self):
super(ProcessorTestCase, self).setUp() super(ProcessorTestCase, self).setUp()
self.conn = mock.Mock() self.conn = mock.Mock()
with open('rsd_lib/tests/unit/json_samples/v2_2/processor.json', with open(
'r') as f: "rsd_lib/tests/unit/json_samples/v2_2/processor.json", "r"
) as f:
self.conn.get.return_value.json.return_value = json.loads(f.read()) self.conn.get.return_value.json.return_value = json.loads(f.read())
self.processor_inst = processor.Processor( self.processor_inst = processor.Processor(
self.conn, '/redfish/v1/Systems/System1/Processors/CPU1', self.conn,
redfish_version='1.1.0') "/redfish/v1/Systems/System1/Processors/CPU1",
redfish_version="1.1.0",
)
def test__parse_attributes(self): def test__parse_attributes(self):
self.processor_inst._parse_attributes() self.processor_inst._parse_attributes()
self.assertEqual('1.1.0', self.processor_inst.redfish_version) self.assertEqual("1.1.0", self.processor_inst.redfish_version)
self.assertEqual('CPU1', self.processor_inst.identity) self.assertEqual("CPU1", self.processor_inst.identity)
self.assertEqual('Processor', self.processor_inst.name) self.assertEqual("Processor", self.processor_inst.name)
self.assertEqual(None, self.processor_inst.description) self.assertEqual(None, self.processor_inst.description)
self.assertEqual('CPU 1', self.processor_inst.socket) self.assertEqual("CPU 1", self.processor_inst.socket)
self.assertEqual('CPU', self.processor_inst.processor_type) self.assertEqual("CPU", self.processor_inst.processor_type)
self.assertEqual('x86', self.processor_inst.processor_architecture) self.assertEqual("x86", self.processor_inst.processor_architecture)
self.assertEqual('x86-64', self.processor_inst.instruction_set) self.assertEqual("x86-64", self.processor_inst.instruction_set)
self.assertEqual('Intel(R) Corporation', self.assertEqual(
self.processor_inst.manufacturer) "Intel(R) Corporation", self.processor_inst.manufacturer
self.assertEqual('Multi-Core Intel(R) Xeon(R) processor 7xxx Series', )
self.processor_inst.model) self.assertEqual(
"Multi-Core Intel(R) Xeon(R) processor 7xxx Series",
self.processor_inst.model,
)
self.assertEqual(3700, self.processor_inst.max_speed_mhz) self.assertEqual(3700, self.processor_inst.max_speed_mhz)
self.assertEqual( self.assertEqual(
'0x42', self.processor_inst.processor_id.effective_family) "0x42", self.processor_inst.processor_id.effective_family
)
self.assertEqual( self.assertEqual(
'0x61', self.processor_inst.processor_id.effective_model) "0x61", self.processor_inst.processor_id.effective_model
)
self.assertEqual( self.assertEqual(
'0x34AC34DC8901274A', "0x34AC34DC8901274A",
self.processor_inst.processor_id.identification_registers) self.processor_inst.processor_id.identification_registers,
)
self.assertEqual( self.assertEqual(
'0x429943', self.processor_inst.processor_id.microcode_info) "0x429943", self.processor_inst.processor_id.microcode_info
self.assertEqual('0x1', self.processor_inst.processor_id.step) )
self.assertEqual("0x1", self.processor_inst.processor_id.step)
self.assertEqual( self.assertEqual(
'GenuineIntel', self.processor_inst.processor_id.vendor_id) "GenuineIntel", self.processor_inst.processor_id.vendor_id
self.assertEqual('OK', self.processor_inst.status.health) )
self.assertEqual('OK', self.processor_inst.status.health_rollup) self.assertEqual("OK", self.processor_inst.status.health)
self.assertEqual('Enabled', self.processor_inst.status.state) self.assertEqual("OK", self.processor_inst.status.health_rollup)
self.assertEqual("Enabled", self.processor_inst.status.state)
self.assertEqual(8, self.processor_inst.total_cores) self.assertEqual(8, self.processor_inst.total_cores)
self.assertEqual(16, self.processor_inst.total_threads) self.assertEqual(16, self.processor_inst.total_threads)
self.assertEqual('E5', self.processor_inst.oem.intel_rackscale.brand) self.assertEqual("E5", self.processor_inst.oem.intel_rackscale.brand)
self.assertEqual( self.assertEqual(
['sse', 'sse2', 'sse3'], ["sse", "sse2", "sse3"],
self.processor_inst.oem.intel_rackscale.capabilities) self.processor_inst.oem.intel_rackscale.capabilities,
)
self.assertEqual( self.assertEqual(
'L2Cache', "L2Cache",
self.processor_inst.oem.intel_rackscale.on_package_memory[0]. self.processor_inst.oem.intel_rackscale.on_package_memory[0].type,
memory_type) )
self.assertEqual( self.assertEqual(
2, 2,
self.processor_inst.oem.intel_rackscale.on_package_memory[0]. self.processor_inst.oem.intel_rackscale.on_package_memory[
capacity_mb) 0
].capacity_mb,
)
self.assertEqual( self.assertEqual(
None, None,
self.processor_inst.oem.intel_rackscale.on_package_memory[0]. self.processor_inst.oem.intel_rackscale.on_package_memory[
speed_mhz) 0
].speed_mhz,
)
self.assertEqual( self.assertEqual(
'L3Cache', "L3Cache",
self.processor_inst.oem.intel_rackscale.on_package_memory[1]. self.processor_inst.oem.intel_rackscale.on_package_memory[1].type,
memory_type) )
self.assertEqual( self.assertEqual(
20, 20,
self.processor_inst.oem.intel_rackscale.on_package_memory[1]. self.processor_inst.oem.intel_rackscale.on_package_memory[
capacity_mb) 1
].capacity_mb,
)
self.assertEqual( self.assertEqual(
None, None,
self.processor_inst.oem.intel_rackscale.on_package_memory[1]. self.processor_inst.oem.intel_rackscale.on_package_memory[
speed_mhz) 1
].speed_mhz,
)
self.assertEqual( self.assertEqual(
160, 160,
self.processor_inst.oem.intel_rackscale.thermal_design_power_watt) self.processor_inst.oem.intel_rackscale.thermal_design_power_watt,
)
self.assertEqual( self.assertEqual(
'/redfish/v1/Systems/System1/Processors/CPU1/Metrics', "/redfish/v1/Systems/System1/Processors/CPU1/Metrics",
self.processor_inst.oem.intel_rackscale.metrics) self.processor_inst.oem.intel_rackscale.metrics,
)
self.assertEqual( self.assertEqual(
"0x0429943FFFFFFFFF", "0x0429943FFFFFFFFF",
self.processor_inst.oem.intel_rackscale. self.processor_inst.oem.intel_rackscale.
extended_identification_registers.eax_00h) extended_identification_registers.eax_00h,
)
self.assertEqual( self.assertEqual(
"0x0429943FFFFFFFFF", "0x0429943FFFFFFFFF",
self.processor_inst.oem.intel_rackscale. self.processor_inst.oem.intel_rackscale.
extended_identification_registers.eax_01h) extended_identification_registers.eax_01h,
)
self.assertEqual( self.assertEqual(
"0x0429943FFFFFFFFF", "0x0429943FFFFFFFFF",
self.processor_inst.oem.intel_rackscale. self.processor_inst.oem.intel_rackscale.
extended_identification_registers.eax_02h) extended_identification_registers.eax_02h,
)
self.assertEqual( self.assertEqual(
"0x0429943FFFFFFFFF", "0x0429943FFFFFFFFF",
self.processor_inst.oem.intel_rackscale. self.processor_inst.oem.intel_rackscale.
extended_identification_registers.eax_03h) extended_identification_registers.eax_03h,
)
self.assertEqual( self.assertEqual(
"0x0429943FFFFFFFFF", "0x0429943FFFFFFFFF",
self.processor_inst.oem.intel_rackscale. self.processor_inst.oem.intel_rackscale.
extended_identification_registers.eax_04h) extended_identification_registers.eax_04h,
)
self.assertEqual( self.assertEqual(
"0x0429943FFFFFFFFF", "0x0429943FFFFFFFFF",
self.processor_inst.oem.intel_rackscale. self.processor_inst.oem.intel_rackscale.
extended_identification_registers.eax_05h) extended_identification_registers.eax_05h,
)
self.assertEqual( self.assertEqual(
"0x0429943FFFFFFFFF", "0x0429943FFFFFFFFF",
self.processor_inst.oem.intel_rackscale. self.processor_inst.oem.intel_rackscale.
extended_identification_registers.eax_07h) extended_identification_registers.eax_07h,
)
self.assertEqual( self.assertEqual(
"0x0429943FFFFFFFFF", "0x0429943FFFFFFFFF",
self.processor_inst.oem.intel_rackscale. self.processor_inst.oem.intel_rackscale.
extended_identification_registers.eax_80000000h) extended_identification_registers.eax_80000000h,
)
self.assertEqual( self.assertEqual(
"0x0429943FFFFFFFFF", "0x0429943FFFFFFFFF",
self.processor_inst.oem.intel_rackscale. self.processor_inst.oem.intel_rackscale.
extended_identification_registers.eax_80000001h) extended_identification_registers.eax_80000001h,
)
self.assertEqual( self.assertEqual(
"0x0429943FFFFFFFFF", "0x0429943FFFFFFFFF",
self.processor_inst.oem.intel_rackscale. self.processor_inst.oem.intel_rackscale.
extended_identification_registers.eax_80000002h) extended_identification_registers.eax_80000002h,
)
self.assertEqual( self.assertEqual(
"0x0429943FFFFFFFFF", "0x0429943FFFFFFFFF",
self.processor_inst.oem.intel_rackscale. self.processor_inst.oem.intel_rackscale.
extended_identification_registers.eax_80000003h) extended_identification_registers.eax_80000003h,
)
self.assertEqual( self.assertEqual(
"0x0429943FFFFFFFFF", "0x0429943FFFFFFFFF",
self.processor_inst.oem.intel_rackscale. self.processor_inst.oem.intel_rackscale.
extended_identification_registers.eax_80000004h) extended_identification_registers.eax_80000004h,
)
self.assertEqual( self.assertEqual(
"0x0429943FFFFFFFFF", "0x0429943FFFFFFFFF",
self.processor_inst.oem.intel_rackscale. self.processor_inst.oem.intel_rackscale.
extended_identification_registers.eax_80000005h) extended_identification_registers.eax_80000005h,
)
self.assertEqual( self.assertEqual(
"0x0429943FFFFFFFFF", "0x0429943FFFFFFFFF",
self.processor_inst.oem.intel_rackscale. self.processor_inst.oem.intel_rackscale.
extended_identification_registers.eax_80000006h) extended_identification_registers.eax_80000006h,
)
self.assertEqual( self.assertEqual(
"0x0429943FFFFFFFFF", "0x0429943FFFFFFFFF",
self.processor_inst.oem.intel_rackscale. self.processor_inst.oem.intel_rackscale.
extended_identification_registers.eax_80000007h) extended_identification_registers.eax_80000007h,
)
self.assertEqual( self.assertEqual(
"0x0429943FFFFFFFFF", "0x0429943FFFFFFFFF",
self.processor_inst.oem.intel_rackscale. self.processor_inst.oem.intel_rackscale.
extended_identification_registers.eax_80000008h) extended_identification_registers.eax_80000008h,
)
self.assertEqual( self.assertEqual(
'Integrated', "Integrated", self.processor_inst.oem.intel_rackscale.fpga.type
self.processor_inst.oem.intel_rackscale.fpga.fpga_type) )
self.assertEqual( self.assertEqual(
'Blue1', "Blue1",
self.processor_inst.oem.intel_rackscale.fpga.bit_stream_version) self.processor_inst.oem.intel_rackscale.fpga.bit_stream_version,
)
self.assertEqual( self.assertEqual(
'4x10G', "4x10G",
self.processor_inst.oem.intel_rackscale.fpga.hssi_configuration) self.processor_inst.oem.intel_rackscale.fpga.hssi_configuration,
)
self.assertEqual( self.assertEqual(
'I2C', self.processor_inst.oem.intel_rackscale.fpga.hssi_sideband) "I2C", self.processor_inst.oem.intel_rackscale.fpga.hssi_sideband
)
self.assertEqual( self.assertEqual(
1, 1,
self.processor_inst.oem.intel_rackscale.fpga.reconfiguration_slots) self.processor_inst.oem.intel_rackscale.fpga.reconfiguration_slots,
)
def test__get_metrics_path(self):
self.assertEqual('/redfish/v1/Systems/System1/Processors/CPU1/Metrics',
self.processor_inst._get_metrics_path())
def test__get_metrics_path_missing_attr(self):
self.processor_inst._json.get('Oem').get('Intel_RackScale')\
.pop('Metrics')
with self.assertRaisesRegex(exceptions.MissingAttributeError,
'attribute Oem/Intel_RackScale/Metrics'):
self.processor_inst._get_metrics_path()
def test_metrics(self): def test_metrics(self):
# | GIVEN | # | GIVEN |
self.conn.get.return_value.json.reset_mock() self.conn.get.return_value.json.reset_mock()
with open('rsd_lib/tests/unit/json_samples/v2_2/' with open(
'processor_metrics.json', 'r') as f: "rsd_lib/tests/unit/json_samples/v2_2/" "processor_metrics.json",
"r",
) as f:
self.conn.get.return_value.json.return_value = json.loads(f.read()) self.conn.get.return_value.json.return_value = json.loads(f.read())
# | WHEN | # | WHEN |
actual_metrics = self.processor_inst.metrics actual_metrics = self.processor_inst.metrics
# | THEN | # | THEN |
self.assertIsInstance(actual_metrics, self.assertIsInstance(
processor_metrics.ProcessorMetrics) actual_metrics, processor_metrics.ProcessorMetrics
)
self.conn.get.return_value.json.assert_called_once_with() self.conn.get.return_value.json.assert_called_once_with()
# reset mock # reset mock
self.conn.get.return_value.json.reset_mock() self.conn.get.return_value.json.reset_mock()
# | WHEN & THEN | # | WHEN & THEN |
# tests for same object on invoking subsequently # tests for same object on invoking subsequently
self.assertIs(actual_metrics, self.assertIs(actual_metrics, self.processor_inst.metrics)
self.processor_inst.metrics)
self.conn.get.return_value.json.assert_not_called() self.conn.get.return_value.json.assert_not_called()
def test_metrics_on_refresh(self): def test_metrics_on_refresh(self):
# | GIVEN | # | GIVEN |
with open('rsd_lib/tests/unit/json_samples/v2_2/' with open(
'processor_metrics.json', 'r') as f: "rsd_lib/tests/unit/json_samples/v2_2/" "processor_metrics.json",
"r",
) as f:
self.conn.get.return_value.json.return_value = json.loads(f.read()) self.conn.get.return_value.json.return_value = json.loads(f.read())
# | WHEN & THEN | # | WHEN & THEN |
self.assertIsInstance(self.processor_inst.metrics, self.assertIsInstance(
processor_metrics.ProcessorMetrics) self.processor_inst.metrics, processor_metrics.ProcessorMetrics
)
# On refreshing the processor instance... # On refreshing the processor instance...
with open('rsd_lib/tests/unit/json_samples/v2_2/processor.json', with open(
'r') as f: "rsd_lib/tests/unit/json_samples/v2_2/processor.json", "r"
) as f:
self.conn.get.return_value.json.return_value = json.loads(f.read()) self.conn.get.return_value.json.return_value = json.loads(f.read())
self.processor_inst.invalidate() self.processor_inst.invalidate()
self.processor_inst.refresh(force=False) self.processor_inst.refresh(force=False)
# | GIVEN | # | GIVEN |
with open('rsd_lib/tests/unit/json_samples/v2_2/' with open(
'processor_metrics.json', 'r') as f: "rsd_lib/tests/unit/json_samples/v2_2/" "processor_metrics.json",
"r",
) as f:
self.conn.get.return_value.json.return_value = json.loads(f.read()) self.conn.get.return_value.json.return_value = json.loads(f.read())
# | WHEN & THEN | # | WHEN & THEN |
self.assertIsInstance(self.processor_inst.metrics, self.assertIsInstance(
processor_metrics.ProcessorMetrics) self.processor_inst.metrics, processor_metrics.ProcessorMetrics
)
class ProcessorCollectionTestCase(testtools.TestCase): class ProcessorCollectionTestCase(testtools.TestCase):
def setUp(self): def setUp(self):
super(ProcessorCollectionTestCase, self).setUp() super(ProcessorCollectionTestCase, self).setUp()
self.conn = mock.Mock() self.conn = mock.Mock()
with open('rsd_lib/tests/unit/json_samples/v2_2/' with open(
'processor_collection.json', 'r') as f: "rsd_lib/tests/unit/json_samples/v2_2/"
"processor_collection.json",
"r",
) as f:
self.conn.get.return_value.json.return_value = json.loads(f.read()) self.conn.get.return_value.json.return_value = json.loads(f.read())
self.processor_col = processor.ProcessorCollection( self.processor_col = processor.ProcessorCollection(
self.conn, '/redfish/v1/Systems/System1/Processors', self.conn,
redfish_version='1.1.0') "/redfish/v1/Systems/System1/Processors",
redfish_version="1.1.0",
)
def test__parse_attributes(self): def test__parse_attributes(self):
self.processor_col._parse_attributes() self.processor_col._parse_attributes()
self.assertEqual('1.1.0', self.processor_col.redfish_version) self.assertEqual("1.1.0", self.processor_col.redfish_version)
self.assertEqual(('/redfish/v1/Systems/System1/Processors/CPU1', self.assertEqual(
'/redfish/v1/Systems/System1/Processors/CPU2'), (
self.processor_col.members_identities) "/redfish/v1/Systems/System1/Processors/CPU1",
"/redfish/v1/Systems/System1/Processors/CPU2",
),
self.processor_col.members_identities,
)
@mock.patch.object(processor, 'Processor', autospec=True) @mock.patch.object(processor, "Processor", autospec=True)
def test_get_member(self, mock_system): def test_get_member(self, mock_system):
self.processor_col.get_member( self.processor_col.get_member(
'/redfish/v1/Systems/System1/Processors/CPU1') "/redfish/v1/Systems/System1/Processors/CPU1"
)
mock_system.assert_called_once_with( mock_system.assert_called_once_with(
self.processor_col._conn, self.processor_col._conn,
'/redfish/v1/Systems/System1/Processors/CPU1', "/redfish/v1/Systems/System1/Processors/CPU1",
redfish_version=self.processor_col.redfish_version) redfish_version=self.processor_col.redfish_version,
)
@mock.patch.object(processor, 'Processor', autospec=True) @mock.patch.object(processor, "Processor", autospec=True)
def test_get_members(self, mock_system): def test_get_members(self, mock_system):
members = self.processor_col.get_members() members = self.processor_col.get_members()
calls = [ calls = [
mock.call(self.processor_col._conn, mock.call(
'/redfish/v1/Systems/System1/Processors/CPU1', self.processor_col._conn,
redfish_version=self.processor_col.redfish_version), "/redfish/v1/Systems/System1/Processors/CPU1",
mock.call(self.processor_col._conn, redfish_version=self.processor_col.redfish_version,
'/redfish/v1/Systems/System1/Processors/CPU2', ),
redfish_version=self.processor_col.redfish_version) mock.call(
self.processor_col._conn,
"/redfish/v1/Systems/System1/Processors/CPU2",
redfish_version=self.processor_col.redfish_version,
),
] ]
mock_system.assert_has_calls(calls) mock_system.assert_has_calls(calls)
self.assertIsInstance(members, list) self.assertIsInstance(members, list)

View File

@ -22,31 +22,40 @@ from rsd_lib.resources.v2_2.system import processor_metrics
class ProcessorMetricsTestCase(testtools.TestCase): class ProcessorMetricsTestCase(testtools.TestCase):
def setUp(self): def setUp(self):
super(ProcessorMetricsTestCase, self).setUp() super(ProcessorMetricsTestCase, self).setUp()
self.conn = mock.Mock() self.conn = mock.Mock()
with open('rsd_lib/tests/unit/json_samples/v2_2/' with open(
'processor_metrics.json', 'r') as f: "rsd_lib/tests/unit/json_samples/v2_2/" "processor_metrics.json",
"r",
) as f:
self.conn.get.return_value.json.return_value = json.loads(f.read()) self.conn.get.return_value.json.return_value = json.loads(f.read())
self.processor_metrics_inst = processor_metrics.ProcessorMetrics( self.processor_metrics_inst = processor_metrics.ProcessorMetrics(
self.conn, '/redfish/v1/Systems/System1/Metrics', self.conn,
redfish_version='1.1.0') "/redfish/v1/Systems/System1/Metrics",
redfish_version="1.1.0",
)
def test__parse_attributes(self): def test__parse_attributes(self):
self.processor_metrics_inst._parse_attributes() self.processor_metrics_inst._parse_attributes()
self.assertEqual('1.1.0', self.processor_metrics_inst.redfish_version) self.assertEqual("1.1.0", self.processor_metrics_inst.redfish_version)
self.assertEqual('ProcessorMetrics for CPU1',
self.processor_metrics_inst.name)
self.assertEqual('description-as-string',
self.processor_metrics_inst.description)
self.assertEqual('Metrics for CPU1',
self.processor_metrics_inst.identity)
self.assertEqual( self.assertEqual(
3014, self.processor_metrics_inst.average_frequency_mhz) "ProcessorMetrics for CPU1", self.processor_metrics_inst.name
)
self.assertEqual(
"description-as-string", self.processor_metrics_inst.description
)
self.assertEqual(
"Metrics for CPU1", self.processor_metrics_inst.identity
)
self.assertEqual(
3014, self.processor_metrics_inst.average_frequency_mhz
)
self.assertEqual(19, self.processor_metrics_inst.throttling_celsius) self.assertEqual(19, self.processor_metrics_inst.throttling_celsius)
self.assertEqual(73, self.processor_metrics_inst.temperature_celsius) self.assertEqual(73, self.processor_metrics_inst.temperature_celsius)
self.assertEqual(153, self.processor_metrics_inst.consumed_power_watt) self.assertEqual(153, self.processor_metrics_inst.consumed_power_watt)
self.assertEqual(["FRB1 BIST Failure", "Processor Throttled"], self.assertEqual(
self.processor_metrics_inst.health) ["FRB1 BIST Failure", "Processor Throttled"],
self.processor_metrics_inst.health,
)