*** Settings ***
Documentation     System inventory related test.

Resource          ../lib/rest_client.robot
Resource          ../lib/utils.robot
Resource          ../lib/state_manager.robot
Resource          ../lib/openbmc_ffdc.robot
Resource          ../lib/list_utils.robot
Resource          ../lib/boot_utils.robot
Resource          ../lib/fan_utils.robot
Library           ../lib/utilities.py
Library            Collections

Variables         ../data/variables.py
Variables         ../data/inventory.py

Suite Setup       Suite Setup Execution
Test Teardown     FFDC On Test Case Fail

Force Tags        Inventory

***Variables***

${LOOP_COUNT}  ${1}

*** Test Cases ***

Verify System Inventory Path
    [Documentation]  Check if system inventory path exist.
    [Tags]  Verify_System_Inventory_Path
    # When the host is booted, system inventory path should exist.
    # Example: /xyz/openbmc_project/inventory/system
    Get Inventory  system


Verify Boxelder Present Property
    [Documentation]  Boxelder should be present by default.
    [Tags]  Verify_Boxelder_Present_Property
    # Example:
    # "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc":
    # {
    #     "BuildDate": "",
    #     "FieldReplaceable": 0,
    #     "Manufacturer": "<Manufacturer Name>",
    #     "Model": "",
    #     "PartNumber": "01DH051",
    #     "Present": 1,
    #     "PrettyName": "BMC PLANAR  ",
    #     "SerialNumber": "000000000000"
    # },
    ${json_data}=  Get Inventory  system/chassis/motherboard/boxelder/bmc
    Should Be True  ${json_data["data"]["Present"]}
    Should Not Be Equal As Strings
    ...  ${json_data["data"]["SerialNumber"]}  000000000000
    ...  msg=BMC planar serial number invalid.


Verify UUID Entry
    [Documentation]  UUID entry should exist in BMC planar property.
    [Tags]  Verify_UUID_Entry
    # Example:
    # "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc":
    # {
    #     "BuildDate": "",
    #     "FieldReplaceable": 0,
    #     "Manufacturer": "<Manufacturer Name>",
    #     "Model": "",
    #     "PartNumber": "01DH051",
    #     "Present": 1,
    #     "PrettyName": "BMC PLANAR  ",
    #     "SerialNumber": "000000000000"
    #     "UUID": ""
    # },
    ${resp}=  OpenBMC Get Request
    ...  ${HOST_INVENTORY_URI}system/chassis/motherboard/boxelder/bmc/attr/UUID
    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}


Verify Boxelder MAC Address Property Is Populated
    [Documentation]  Boxelder should be present by default.
    [Tags]  Verify_Boxelder_MAC_Address_Property_Is_Populated
    # Example:
    # /xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc/ethernet
    # {
    #     "FieldReplaceable": 0,
    #     "MACAddress": "00:00:00:00:00:00",
    #     "Present": 1,
    #     "PrettyName": ""
    # }

    ${json_data}=  Get Inventory
    ...  system/chassis/motherboard/boxelder/bmc/ethernet
    Should Be True  ${json_data["data"]["Present"]}
    Should Not Be Equal As Strings
    ...  ${json_data["data"]["MACAddress"]}  00:00:00:00:00:00

    # eth0      Link encap:Ethernet  HWaddr 70:E2:84:14:23:F9
    ${mac_addr}  ${stderr}  ${rc}=  BMC Execute Command
    ...  /sbin/ifconfig -a | grep eth0 | grep HWaddr | awk -F'HWaddr ' '{print $2}'
    ...  return_stderr=True
    Should Be Empty  ${stderr}
    Should Be Equal As Strings  ${json_data["data"]["MACAddress"]}
    ...  ${mac_addr.strip()}  msg=MAC address configured incorrectly.
    ...  ignore_case=True


Verify Chassis Motherboard Properties
    [Documentation]  Check if chassis motherboard properties are
    ...              populated valid.
    [Tags]  Verify_Chassis_Motherboard_Properties
    # When the host is booted, the following properties should
    # be populated Manufacturer, PartNumber, SerialNumber and
    # it should not be zero's.
    # Example:
    #   "data": {
    # "/xyz/openbmc_project/inventory/system/chassis/motherboard": {
    #  "BuildDate": "",
    #  "Manufacturer": "0000000000000000",
    #  "Model": "",
    #  "PartNumber": "0000000",
    #  "Present": 0,
    #  "PrettyName": "SYSTEM PLANAR   ",
    #  "SerialNumber": "000000000000"
    # }
    ${properties}=  Get Inventory  system/chassis/motherboard
    Should Not Be Equal As Strings
    ...  ${properties["data"]["PartNumber"]}  0000000
    ...  msg=motherboard part number invalid.
    Should Not Be Equal As Strings
    ...  ${properties["data"]["SerialNumber"]}  000000000000
    ...  msg=motherboard serial number invalid.

Verify CPU Present
    [Documentation]  Check if the FRU "Present" is set for CPU's.
    [Tags]  Verify_CPU_Present
    # System inventory cpu list:
    # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0
    # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1
    # Example:
    #    "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0": {
    #    "FieldReplaceable": 1,
    #    "BuildDate": "",
    #    "Cached": 0,
    #    "SerialNumber": "YA3933741574",
    #    "Version": "10",
    #    "Model": "",
    #    "PrettyName": "PROCESSOR MODULE",
    #    "PartNumber": "01HL322",
    #    "Present": 1,
    #    "Manufacturer": "<Manufacturer Name>"
    # },
    # The CPU properties "Present" should be boolean 1.

    ${cpu_list}=  Get Endpoint Paths  ${HOST_INVENTORY_URI}system  cpu
    FOR  ${cpu_uri}  IN  @{cpu_list}
      ${present}=  Read Attribute  ${cpu_uri}  Present
      Should Be True  ${present}
    END

Verify DIMM Present
    [Documentation]  Check if the FRU "Present" is set for DIMM's.
    [Tags]  Verify_DIMM_Present
    # Example:
    #   "/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0": {
    #    "FieldReplaceable": 1,
    #    "BuildDate": "",
    #    "Cached": 0,
    #    "SerialNumber": "0x0300cf4f",
    #    "Version": "0x00",
    #    "Model": "M393A1G40EB1-CRC    ",
    #    "PrettyName": "0x0c",
    #    "PartNumber": "",
    #    "Present": 1,
    #    "Manufacturer": "0xce80"
    # },

    # The DIMM properties "Present" should be boolean 1.

    ${dimm_list}=  Get Endpoint Paths  ${HOST_INVENTORY_URI}system  dimm
    FOR  ${dimm_uri}  IN  @{dimm_list}
      ${present}=  Read Attribute  ${dimm_uri}  Present
      Should Be True  ${present}
    END

Verify FRU Properties
    [Documentation]  Verify the FRU properties fields.
    [Tags]  Verify_FRU_Properties
    # Example:
    # A FRU would have "FieldReplaceable" set to boolean 1 and should have
    # the following entries
    #  "fru": [
    #    "FieldReplaceable"
    #    "BuildDate",
    #    "Cached"
    #    "SerialNumber",
    #    "Version",
    #    "Model",
    #    "PrettyName",
    #    "PartNumber",
    #    "Present",
    #    "Manufacturer",
    # ]
    # and FRU which doesn't have one of this fields is an error.
    #   "/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0": {
    #    "FieldReplaceable": 1,
    #    "BuildDate": "",
    #    "Cached": 0,
    #    "SerialNumber": "0x0300cf4f",
    #    "Version": "0x00",
    #    "Model": "M393A1G40EB1-CRC    ",
    #    "PrettyName": "0x0c",
    #    "PartNumber": "",
    #    "Present": 1,
    #    "Manufacturer": "0xce80"
    # },

    ${system_list}=  Get Endpoint Paths  ${HOST_INVENTORY_URI}system  *
    ${fru_list}=  Qualified FRU List  @{system_list}
    Validate FRU Properties Fields  fru  EQU  @{fru_list}


Verify GPU Properties
    [Documentation]  Verify the GPU properties fields.
    [Tags]  Verify_GPU_Properties
    # Example:
    # A GPU property should have the following entries:
    # "gpu":[
    #    "FieldReplaceable",
    #    "PrettyName",
    #    "Present",
    #    "Functional"
    # ]
    # GPU inventory:
    # "/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card2": {
    #    "FieldReplaceable": 1,
    #    "Functional": 1,
    #    "Present": 1,
    #    "PrettyName": ""
    # },


    ${system_list}=  Get Endpoint Paths
    ...  ${HOST_INVENTORY_URI}system/chassis/motherboard  gv*
    Validate FRU Properties Fields  gpu  EQU  @{system_list}


Verify Core Properties
    [Documentation]  Verify the core property fields.
    [Tags]  Verify_Core_Properties
    # Example:
    # A core property should have the following entries:
    # "core":[
    #    "PrettyName",
    #    "Present",
    #    "Functional"
    # ]
    # core inventory:
    # "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1/core0": {
    #    "Functional": 1,
    #    "Present": 1,
    #    "PrettyName": ""
    # },

    ${system_list}=  Get Endpoint Paths
    ...  ${HOST_INVENTORY_URI}system/chassis/motherboard  core*
    Validate FRU Properties Fields  core  EQU  @{system_list}


Verify Fan Properties
    [Documentation]  Verify the fan property fields.
    [Tags]  Verify_Fan_Properties
    # Example:
    # A fan property should have the following entries:
    # "core":[
    #    "PrettyName",
    #    "Present",
    #    "MeetsMinimumShipLevel",
    #    "Functional"
    # ]
    # fan inventory:
    # "/xyz/openbmc_project/inventory/system/chassis/motherboard/fan0": {
    #    "Functional": 1,
    #    "MeetsMinimumShipLevel": 1,
    #    "Present": 1,
    #    "PrettyName": "fan0"
    # },

    ${water_cooled}=  Is Water Cooled

    ${system_list}=  Get Endpoint Paths
    ...  ${HOST_INVENTORY_URI}system/chassis/motherboard  fan*

    Printn
    Rprint Vars  water_cooled  system_list

    Run Keyword If  ${water_cooled}
    ...  Validate FRU Properties Fields  fan_wc  SUBSET  @{system_list}
    ...  ELSE
    ...  Validate FRU Properties Fields  fan  EQU  @{system_list}


Verify Core Functional State
    [Documentation]  Verify that "Present" core property is set if "Functional"
    ...              core property is set.
    [Tags]  Verify_Core_Functional_State
    # Example:
    #  "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core5":{
    #    "Functional": 1,
    #    "Present": 1,
    #    "PrettyName": ""
    # },
    ${core_list}=  Get Endpoint Paths  ${HOST_INVENTORY_URI}system  core
    FOR  ${core_uri}  IN  @{core_list}
      ${status}=  Run Keyword And Return Status
      ...  Check URL Property Is Functional  ${core_uri}
      Continue For Loop If  '${status}' == '${False}'
      ${present}=  Read Attribute  ${core_uri}  Present
      Should Be True  ${present}
      ...  msg=${core_uri} is functional but not present.
    END


Verify DIMM Functional State
    [Documentation]  Verify that "Present" DIMM property is set if "Functional"
    ...              DIMM property is set.
    [Tags]  Verify_DIMM_Functional_State
    # Example:
    #   "/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0": {
    #    "BuildDate": "",
    #    "Cached": 0,
    #    "FieldReplaceable": 1,
    #    "Functional": 1,
    #    "Manufacturer": "0xce80",
    #    "Model": "M393A1G40EB1-CRC    ",
    #    "PartNumber": "",
    #    "Present": 1,
    #    "PrettyName": "0x0c",
    #    "SerialNumber": "0x0300cf4f",
    #    "Version": "0x00"
    # },

    ${dimm_list}=  Get Endpoint Paths  ${HOST_INVENTORY_URI}system  dimm
    FOR  ${dimm_uri}  IN  @{dimm_list}
      ${status}=  Run Keyword And Return Status
      ...  Check URL Property Is Functional  ${dimm_uri}
      Continue For Loop If  '${status}' == '${False}'
      ${present}=  Read Attribute  ${dimm_uri}  Present
      Should Be True  ${present}
      ...  msg=${dimm_uri} is functional but not present.
    END


Verify Fan Functional State
    [Documentation]  Verify that "Present" fan property is set if "Functional"
    ...              fan property is set.
    [Tags]  Verify_Fan_Functional_State
    # Example:
    # "/xyz/openbmc_project/inventory/system/chassis/motherboard/fan0": {
    #     "Functional": 1,
    #     "Present": 1,
    #     "PrettyName": "fan0"
    # },

    ${fan_list}=  Get Endpoint Paths  ${HOST_INVENTORY_URI}system  fan*
    Should Not Be Empty  ${fan_list}
    FOR  ${fan_uri}  IN  @{fan_list}
      ${status}=  Run Keyword And Return Status
      ...  Check URL Property Is Functional  ${fan_uri}
      Continue For Loop If  '${status}' == '${False}'
      ${present}=  Read Attribute  ${fan_uri}  Present
      Should Be True  ${present}
      ...  msg=${fan_uri} is functional but "Present" is not set.
    END


Verify CPU Functional State
    [Documentation]  Verify that "Present" CPU property is set if "Functional"
    ...              CPU property is set.
    [Tags]  Verify_CPU_Functional_State

    # Example of cpu* endpoint data:
    # "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0": {
    #     "Functional": 1,
    #     "Present": 1,
    #     "PrettyName": "cpu0"
    # },

    ${cpu_list}=  Get Endpoint Paths  ${HOST_INVENTORY_URI}system  cpu*
    Should Not Be Empty  ${cpu_list}
    FOR  ${cpu_uri}  IN  @{cpu_list}
      ${status}=  Run Keyword And Return Status
      ...  Check URL Property Is Functional  ${cpu_uri}
      Continue For Loop If  '${status}' == '${False}'
      ${present}=  Read Attribute  ${cpu_uri}  Present
      Should Be True  ${present}
      ...  msg=${cpu_uri} is functional but "Present" is not set.
    END


Verify GPU Functional State
    [Documentation]  Verify that "Functional" GPU property is set if "Present"
    ...              GPU property is set
    [Tags]  Verify_GPU_Functional_State

    # Example of gv* endpoint data:
    # "/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card4": {
    #     "Functional": 1,
    #     "Present": 1,
    #     "PrettyName": ""
    # },


    ${gpu_list}=  Get Endpoint Paths
    ...  ${HOST_INVENTORY_URI}system/chassis/motherboard  gv*
    Should Not Be Empty  ${gpu_list}
    FOR  ${gpu_uri}  IN  @{gpu_list}
      ${status}=  Run Keyword And Return Status
      ...  Check URL Property Is Functional  ${gpu_uri}
      Continue For Loop If  '${status}' == '${False}'
      ${present}=  Read Attribute  ${gpu_uri}  Present
      Should Be True  ${present}
      ...  msg=${gpu_uri} is functional but "Present" is not set.
    END

Check Air Or Water Cooled
    [Documentation]  Check if this system is Air or water cooled.
    [Tags]  Check_Air_Or_Water_Cooled
    # Example:
    # "/xyz/openbmc_project/inventory/system/chassis": {
    #    "AirCooled": 1,
    #    "WaterCooled": 0
    # },

    ${air_cooled}=  Read Attribute
    ...  /xyz/openbmc_project/inventory/system/chassis  AirCooled
    Log  AirCooled:${air_cooled}

    ${water_cooled}=  Read Attribute
    ...  /xyz/openbmc_project/inventory/system/chassis  WaterCooled
    Log  WaterCooled:${water_cooled}

    Run Keyword If  ${air_cooled}==${0} and ${water_cooled}==${0}
    ...  Fail  Neither AirCooled or WaterCooled.

Verify Minimal CPU Inventory
    [Documentation]  Verify minimal CPU inventory.
    [Tags]  Verify_Minimal_CPU_Inventory
    [Template]     Minimum Inventory

    # item         minimum_count
    cpu            1

Verify Minimal DIMM Inventory
    [Documentation]  Verify minimal DIMM inventory.
    [Tags]  Verify_Minimal_DIMM_Inventory
    [Template]     Minimum Inventory

    # item         minimum_count
    dimm           2

Verify Minimal Core Inventory
    [Documentation]  Verify minimal core inventory.
    [Tags]  Verify_Minimal_Core_Inventory
    [Template]     Minimum Inventory

    # item         minimum_count
    core           1

Verify Minimal Memory Buffer Inventory
    [Documentation]  Verify minimal memory buffer inventory.
    [Tags]  Verify_Minimal_Memory_Buffer_Inventory
    [Template]     Minimum Inventory

    # item         minimum_count
    memory_buffer  1

Verify Minimal Fan Inventory
    [Documentation]  Verify minimal fan inventory.
    [Tags]  Verify_Minimal_Fan_Inventory
    [Template]     Minimum Inventory

    # item         minimum_count
    fan            2

Verify Minimal Main Planar Inventory
    [Documentation]  Verify minimal main planar inventory.
    [Tags]  Verify_Minimal_Main_Planar_Inventory
    [Template]     Minimum Inventory

    # item         minimum_count
    main_planar    1

Verify Minimal System Inventory
    [Documentation]  Verify minimal system inventory.
    [Tags]  Verify_Minimal_System_Inventory
    [Template]     Minimum Inventory

    # item         minimum_count
    system         1

Verify Minimal Power Supply Inventory
    [Documentation]  Verify minimal power supply inventory.
    [Tags]  Verify_Minimal_Power_Supply_Inventory
    [Template]     Minimum Inventory
    # Example:
    # "/xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply0",
    # "/xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply1",

    # item         minimum_count
    powersupply    1


Verify Inventory List After Reboot
    [Documentation]  Verify inventory list after reboot.
    [Tags]  Verify_Inventory_List_After_Reboot

    Repeat Keyword  ${LOOP_COUNT} times  Choose Boot Option  reboot


Verify Inventory List After Reset
    [Documentation]  Verify inventory list after reset.
    [Tags]  Verify_Inventory_List_After_Reset

    Repeat Keyword  ${LOOP_COUNT} times  Choose Boot Option  reset

*** Keywords ***

Suite Setup Execution
    [Documentation]  Do the initial suite setup.

    Smart Power Off
    REST Power On
    Delete All Error Logs

Get Inventory
    [Documentation]  Get the properties of an endpoint.
    [Arguments]  ${endpoint}
    # Description of arguments:
    # endpoint  string for which url path ending.
    #           Example: "system" is the endpoint for url
    #           /xyz/openbmc_project/inventory/system
    ${resp}=  OpenBMC Get Request  ${HOST_INVENTORY_URI}${endpoint}
    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}
    ${jsondata}=  To JSON  ${resp.content}
    [Return]  ${jsondata}


Qualified FRU List
    [Documentation]  Build the list of valid FRUs.
    [Arguments]  @{system_list}
    # Description of arguments:
    # system_list  List of system inventory URLs.
    # Example:
    # /xyz/openbmc_project/inventory/system/chassis/motherboard
    # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0
    # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1
    # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0
    # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm1
    # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm2
    # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm3
    # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm4
    # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm5
    # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm6
    # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm7

    ${fru_list}=  Create List
    FOR  ${fru_uri}  IN  @{system_list}
      ${resp}=  OpenBMC Get Request  ${fru_uri}/attr/FieldReplaceable
      ...  quiet=${1}
      ${jsondata}=  To JSON  ${resp.content}
      ${status}=  Run Keyword And Return Status
      ...  Should Be True  ${jsondata['data']} == ${1}
      Run Keyword If  '${status}' == '${True}'
      ...  Append To List  ${fru_list}  ${fru_uri}
    END

    ${fru_valid_list}=  Filter GPU FRU Entries  ${fru_list}

    [Return]  ${fru_valid_list}


Filter GPU FRU Entries
    [Documentation]  Remove GPU entries from FRU list and return the result.
    [Arguments]  ${fru_list}

    # Description of arguments:
    # fru_list  List of FRU system inventory URIs.
    # Example FRUs list:
    # [u'/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0',
    #  u'/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1',
    #  u'/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0',
    #  u'/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm1',
    #  u'/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card0',
    #  u'/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card1',
    #  u'/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card3',
    #  u'/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card4']

    # Example of the matched GPU FRUs entries:
    # [u'/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card0',
    #  u'/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card1',
    #  u'/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card3',
    #  u'/xyz/openbmc_project/inventory/system/chassis/motherboard/gv100card4']

    ${gpu_matches}=  Get Matches  ${fru_list}  *gv*

    Remove Values From List  ${fru_list}  @{gpu_matches}
    [Return]  ${fru_list}


Validate FRU Properties Fields
    [Documentation]  Compare valid FRUs from system to expected FRU set.
    [Arguments]  ${fru_type}  ${comparison_type}  @{fru_list}

    # Description of argument(s):
    # fru_type         FRU type name (e.g. "gpu", "fru", "fan", etc.).
    # comparison_type  A string indicating the comparison method.
    #                  "EQU" for equality,  "SUBSET" for subset comparison.
    # fru_list         List of FRU URLs.

    # Get the pre-defined fru_type attributes from the inventory dictionary
    # for the fru_type.  Example:
    # set(['Version', 'PartNumber', 'SerialNumber', 'FieldReplaceable',
    # 'BuildDate', 'Present', 'Manufacturer', 'PrettyName', 'Cached', 'Model'])
    ${fru_set}=  List To Set  ${inventory_dict['${fru_type}']}

    Rprint Vars  fru_set

    # Iterate through the url of the FRU and compare its attributes with
    # the pre-defined fru_type attributes.
    FOR  ${fru_url_path}  IN  @{fru_list}
      ${fru_field}=  Read Properties  ${fru_url_path}
      ${fru_keys}=  List To Set  ${fru_field.viewkeys()}
      Rprint Vars  fru_keys
      Run Keyword If  '${comparison_type}' == 'EQU'
      ...  Should Be Equal  ${fru_keys}  ${fru_set}
      ...  ELSE
      ...  Should Be True  $fru_set.issubset($fru_keys)
    END


Check URL Property Is Functional
    [Documentation]  Verify that the given url property is functional.
    [Arguments]  ${url_path}
    # Description of arguments:
    # url_path  Full url path of the inventory object.
    #           Example: DIMM / core property url's
    # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0
    # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core0
    ${state}=  Read Attribute  ${url_path}  Functional
    Should Be True  ${state}

Choose Boot Option
    [Documentation]  Choose BMC reset or host reboot.
    [Arguments]  ${option}

    Run Keyword If  '${option}' == 'reboot'
    ...    Verify Inventory List Before And After Reboot
    ...  ELSE
    ...    Verify Inventory List Before And After Reset


Verify Inventory List Before And After Reboot
    [Documentation]  Verify inventory list before and after reboot.

    REST Power On  stack_mode=skip  quiet=1
    Delete All Error Logs
    ${inventory_before}=  Get URL List  ${HOST_INVENTORY_URI}
    Host Reboot
    Delete All Error Logs
    ${inventory_after}=  Get URL List  ${HOST_INVENTORY_URI}
    Lists Should Be Equal  ${inventory_before}  ${inventory_after}


Verify Inventory List Before And After Reset
    [Documentation]  Verify inventory list before and after BMC reset.

    REST Power On  stack_mode=skip  quiet=1
    Delete All Error Logs
    ${inventory_before}=  Get URL List  ${HOST_INVENTORY_URI}
    OBMC Reboot (run)
    Delete All Error Logs
    ${inventory_after}=  Get URL List  ${HOST_INVENTORY_URI}
    Lists Should Be Equal  ${inventory_before}  ${inventory_after}


Minimum Inventory
    [Documentation]  Check for minimum inventory.
    [Arguments]  ${item}  ${minimum_count}

    # Description of argument(s):
    # item  Inventory name (example: "fan/cpu/dimm/etc").
    # minimum_count  The minimum number of the given item.

    ${count}=  Get Number Hardware Items  ${item}
    Should Be True  ${count}>=${minimum_count}

Get Number Hardware Items
    [Documentation]  Get the count of the total present currently on inventory.
    [Arguments]  ${item}

    # Description of argument(s):
    # item  Inventory name (example: "fan/cpu/dimm/etc").

    ${count_inventory}  Set Variable  ${0}
    ${list}=  Get Endpoint Paths  ${HOST_INVENTORY_URI}system/
    ...  ${item}

    FOR  ${element}  IN  @{list}
      ${present}=  Read Properties  ${element}
      ${count_inventory}=  Set Variable if  ${present['Present']} == 1
      ...  ${count_inventory+1}  ${count_inventory}
    END
    [return]  ${count_inventory}
