*** 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
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 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}


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}


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  @{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  @{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  @{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"
    # },

    ${system_list}=  Get Endpoint Paths
    ...  ${HOST_INVENTORY_URI}system/chassis/motherboard  fan*
    Validate FRU Properties Fields  fan  @{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.


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.


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.

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.


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.


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}

    ${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 vs expected FRU set.
    [Arguments]  ${fru_type}  @{fru_list}

    # Description of arguments:
    # fru_type  FRU type name (e.g. "gpu", "fru", "fan", etc.).
    # fru_list  List of qualified FRU URLs.

    # Build the pre-defined set list from data/inventory.py derived from
    # a group of YAML files.
    # Example:
    # set(['Version', 'PartNumber', 'SerialNumber', 'FieldReplaceable',
    # 'BuildDate', 'Present', 'Manufacturer', 'PrettyName', 'Cached', 'Model'])
    ${fru_set}=  List To Set  ${inventory_dict['${fru_type}']}

    # Iterate through the FRU's url and compare the set dictionary keys
    # with the pre-define inventory data.
    :FOR  ${fru_url_path}  IN  @{fru_list}
    \  ${fru_field}=  Read Properties  ${fru_url_path}
    # ------------------------------------------------------------
    #  ${fru_field.viewkeys()} extracts the list of keys from the
    #  JSON dictionary as a set.
    # ------------------------------------------------------------
    \  Should Be Equal  ${fru_field.viewkeys()}  ${fru_set}


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}
    Initiate Host Reboot
    Wait Until Keyword Succeeds  10 min  10 sec  Is OS Booted
    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}
    [return]  ${count_inventory}
