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

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

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

Force Tags        Inventory

***Variables***

${stack_mode}  skip
${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 that boxelder 'Present' property is present by default.
    # Example:
    # "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc":
    # {
    #     "BuildDate": "",
    #     "FieldReplaceable": 0,
    #     "Manufacturer": "IBM",
    #     "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"]}


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}
    ...  msg=MAC address configured incorrectly.


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"]["Manufacturer"]}  0000000000000000
    ...  msg=motherboard field invalid.
    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": "IBM"
    # },
    # 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_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 If 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 If 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 If 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 Inventory List After Reboot
    [Documentation]  Verify Inventory List After Reboot
    [Tags]  Verify_Inventory_List_After_Reboot

    Repeat Keyword  ${LOOP_COUNT} times  Verify Inventory List Before And After Reboot

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

    # item         minimum_count
    cpu            1
    [Template]     Minimum Inventory

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

    # item         minimum_count
    dimm           2
    [Template]     Minimum Inventory

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

    # item         minimum_count
    core           1
    [Template]     Minimum Inventory

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

    # item         minimum_count
    memory_buffer  1
    [Template]     Minimum Inventory

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

    # item         minimum_count
    fan            2
    [Template]     Minimum Inventory

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

    # item         minimum_count
    main_planar    1
    [Template]     Minimum Inventory

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

    # item         minimum_count
    system         1
    [Template]     Minimum Inventory

Verify Minimal Power Supply Inventory
    [Documentation]  Verify minimal power supply inventory.
    [Tags]  Verify_Minimal_Power_Supply_Inventory
    # Example:
    # "/xyz/openbmc_project/inventory/system/chassis/power_supply0",
    # "/xyz/openbmc_project/inventory/system/chassis/power_supply1",

    # item         minimum_count
    power_supply   1
    [Template]     Minimum Inventory

*** Keywords ***

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

    # Boot Host.
    REST Power On

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
    \  ${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}

    [Return]  ${fru_list}


Validate FRU Properties Fields
    [Documentation]  Compare valid FRUs from system vs expected FRU set.
    [Arguments]  @{fru_list}
    # Description of arguments:
    # 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']}

    # 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 If 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}

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

    Initiate Host Boot
    Wait Until Keyword Succeeds  10 min  10 sec  Is OS Starting
    ${inv_before}=  Get URL List  ${HOST_INVENTORY_URI}
    Initiate Host Reboot
    Wait Until Keyword Succeeds  10 min  10 sec  Is OS Starting
    ${inv_after}=  Get URL List  ${HOST_INVENTORY_URI}
    Lists Should Be Equal  ${inv_before}  ${inv_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}
