*** Settings ***
Documentation     This testsuite is for testing inventory
Suite Teardown    Delete All Sessions
Resource          ../lib/rest_client.robot
Resource          ../lib/utils.robot
Resource          ../lib/openbmc_ffdc.robot
Resource          ../lib/boot/boot_resource_master.robot
Library           ../lib/utilities.py
Library           String
Library           Collections
Test Teardown     FFDC On Test Case Fail

Variables         ../data/variables.py


Suite setup        setup the suite

Force Tags  chassisboot  inventory

*** Test Cases ***

minimal cpu inventory
    ${count}=     Get Total Present     cpu
    Should Be True     ${count}>${0}

minimal dimm inventory
    [Tags]  minimal_dimm_inventory

    ${count}=     Get Total Present     dimm
    Should Be True     ${count}>=${2}

minimal core inventory
    ${count}=     Get Total Present     core
    Should Be True     ${count}>${0}

minimal memory buffer inventory
    [Tags]    minimal_memory_buffer_inventory

    ${count}=     Get Total Present     membuf
    Should Be True     ${count}>${0}

minimal fan inventory
    [Tags]  minimal_fan_inventory
    ${count}=     Get Total Present     fan
    Should Be True     ${count}>${2}

minimal main planar inventory
    [Tags]    minimal_main_planar_inventory

    ${count}=     Get Total Present     motherboard
    Should Be True     ${count}>${0}

minimal system inventory
    [Tags]    minimal_system_inventory

    ${count}=     Get Total Present     system
    Should Be True     ${count}>${0}

Verify CPU VPD Properties
    Verify Properties     CPU

Verify DIMM VPD Properties
    [Tags]    Verify_DIMM_VPD_Properties

    Verify Properties     DIMM

Verify Memory Buffer VPD Properties
    Verify Properties     MEMORY_BUFFER

Verify Fan VPD Properties
    Verify Properties     FAN

Verify System VPD Properties
    [Tags]  Verify_System_VPD_Properties
    Verify Properties     SYSTEM


*** Keywords ***


Setup The Suite
    BMC Power On

    ${resp}=     Read Properties   ${INVENTORY_URI}enumerate
    Set Suite Variable     ${SYSTEM_INFO}      ${resp}
    log Dictionary      ${resp}

Get Total Present
    [Arguments]     ${type}
    ${l}=          Create List     []
    ${resp}=    Get Dictionary Keys    ${SYSTEM_INFO}
    ${list}=    Get Matches    ${resp}    regexp=^.*[0-9a-z_].${type}[0-9]*$
    : FOR   ${element}      IN      @{list}
    \       Append To List   ${l}   ${SYSTEM_INFO['${element}']['present']}

    ${sum}=        Get Count       ${l}    True
    [Return]        ${sum}

Verify Properties
    [Arguments]     ${type}

    ${list}=     Get VPD Inventory List     ${OPENBMC_MODEL}     ${type}
    : FOR     ${element}     IN      @{list}
    \     ${d}=     Get From Dictionary     ${SYSTEM_INFO}     ${element}
    \     Run Keyword If     ${d['present']} == True        Verify Present Properties     ${d}     ${type}

Verify Present Properties
    [Arguments]     ${d}     ${type}
    ${keys}=     Get Dictionary Keys     ${d}
    Log List     ${keys}
    Log List     ${INVENTORY_ITEMS['${type}']}
    Lists Should Be Equal  ${INVENTORY_ITEMS['${type}']}     ${keys}
