Modified a case for general IPMI

Currently, the "Verify Get Device ID" testcase erroneously relies on
some hard-coded values. Changing these hard-coded values to values
obtained from the dev_id.json file on the BMC.

Signed-off-by: Tony Lee <tony.lee@quantatw.com>
Change-Id: I68b5a2aea8134d7ca739c136ab4d713e59f596c9
diff --git a/lib/ipmi_utils.py b/lib/ipmi_utils.py
index 32d32fd..1602300 100644
--- a/lib/ipmi_utils.py
+++ b/lib/ipmi_utils.py
@@ -16,6 +16,7 @@
 import tempfile
 gru.my_import_resource("ipmi_client.robot")
 from robot.libraries.BuiltIn import BuiltIn
+import json
 
 
 def get_sol_info():
@@ -529,3 +530,37 @@
     cmd_buf = "channel getciphers ipmi | sed -re 's/ Alg/_Alg/g'"
     stdout, stderr, rc = execute_ipmi_cmd(cmd_buf, "external", print_output=0)
     return vf.outbuf_to_report(stdout)
+
+
+def get_device_id_config():
+    r"""
+    Get the device id config data and return as a dictionary.
+
+    Example:
+
+    dev_id_config =  get_device_id_config()
+    print_vars(dev_id_config)
+
+    dev_id_config:
+        [manuf_id]:            7244
+        [addn_dev_support]:     141
+        [prod_id]:            16976
+        [aux]:                    0
+        [id]:                    32
+        [revision]:             129
+        [device_revision]:        1
+    """
+    stdout, stderr, rc = bsu.bmc_execute_command("cat /usr/share/ipmi-providers/dev_id.json")
+
+    result = json.loads(stdout)
+
+    # Create device revision field for the user.
+    # Reference IPMI specification v2.0 "Get Device ID Command"
+    # [7]   1 = device provides Device SDRs
+    #       0 = device does not provide Device SDRs
+    # [6:4] reserved. Return as 0.
+    # [3:0] Device Revision, binary encoded.
+
+    result['device_revision'] = result['revision'] & 0x0F
+
+    return result
diff --git a/tests/ipmi/test_general_ipmi.robot b/tests/ipmi/test_general_ipmi.robot
index 0a54b5d..8875305 100755
--- a/tests/ipmi/test_general_ipmi.robot
+++ b/tests/ipmi/test_general_ipmi.robot
@@ -10,6 +10,7 @@
 Library             ../../lib/ipmi_utils.py
 Variables           ../../data/ipmi_raw_cmd_table.py
 Library             ../../lib/gen_misc.py
+Library             ../../lib/gen_robot_valid.py
 
 Test Setup          Log to Console  ${EMPTY}
 Test Teardown       FFDC On Test Case Fail
@@ -276,10 +277,13 @@
     #     0x00
     #     0x03
 
+    # Verify Manufacturer and Product IDs, etc. directly from json file.
+    ${device_id_config}=  Get Device Id Config
     ${mc_info}=  Get MC Info
 
-    Should Be Equal  ${mc_info['device_id']}  0
-    Should Be Equal  ${mc_info['device_revision']}  0
+    Rprint Vars  device_id_config  mc_info
+    Valid Value  ${mc_info['device_id']}  [${device_id_config['id']}]
+    Valid Value  ${mc_info['device_revision']}  [${device_id_config['device_revision']}]
 
     # Get firmware revision from mc info command output i.e. 2.01
     ${ipmi_fw_major_version}  ${ipmi_fw_minor_version}=
@@ -300,15 +304,14 @@
     Should Be Equal As Strings  ${ipmi_fw_minor_version}  ${major_minor_version[1]}
     ...  msg=Minor version mismatch.
 
-    Should Be Equal  ${mc_info['ipmi_version']}  2.0
+    Valid Value  mc_info['ipmi_version']  ['2.0']
 
-    # TODO: Verify Manufacturer and Product IDs directly from json file.
-    # Reference : openbmc/openbmc-test-automation#1244
-    Should Be Equal  ${mc_info['manufacturer_id']}  42817
-    Should Be Equal  ${mc_info['product_id']}  16975 (0x424f)
+    Valid Value  ${mc_info['manufacturer_id']}  [${device_id_config['manuf_id']}]
+    ${product_id_hex} =  Convert To Hex  ${device_id_config['prod_id']}  lowercase=True
+    Valid Value  mc_info['product_id']  ['${device_id_config['prod_id']} (0x${product_id_hex})']
 
-    Should Be Equal  ${mc_info['device_available']}  yes
-    Should Be Equal  ${mc_info['provides_device_sdrs']}  yes
+    Valid Value  mc_info['device_available']  ['yes']
+    Valid Value  mc_info['provides_device_sdrs']  ['yes']
     Should Contain  ${mc_info['additional_device_support']}  Sensor Device
     Should Contain  ${mc_info['additional_device_support']}  SEL Device
     Should Contain