***Settings***
Documentation      Keywords for system related tools installation.
...                For HTX refer to https://github.com/open-power/HTX


Resource     utils_os.robot
Resource     ../lib/boot_utils.robot

***Keywords***

Prep OS For HTX Installation
    [Documentation]  Prepare OS for HTX tool installation.

    Boot To OS
    ${status}=  Run Keyword And Return Status  Tool Exist  htxcmdline

    Return From Keyword If  '${status}' == 'True'
    ...  HTX tool already installed.

    # Downloads the package lists from the repositories and "update"
    # them to get information on the newest versions of packages and
    # their dependencies.
    Log To Console  \n Update package list.
    Execute Command On OS  sudo apt-get update

    # Download and install Git.
    Log To Console  \n Install Git.
    Execute Command On OS  sudo apt-get -y install git


Prep OS For OPAL PRD Installation
    [Documentation]  Prepare OS for OPAL PRD tool installation.

    Boot To OS
    ${status}=  Run Keyword And Return Status  Tool Exist  opal-gard

    Return From Keyword If  '${status}' == 'True'  ${False}


    # Downloads the package lists from the repositories and "updates"
    # them to get information on the newest versions of packages and
    # their dependencies.
    Log To Console  \n Update package list.
    Execute Command On OS  sudo apt-get update


Setup HTX On OS
    [Documentation]  Download and install HTX exerciser tool from github.

    # Download HTX source code from github.
    Log To Console  \n Download HTX source code from github.
    Execute Command  sudo git clone https://www.github.com/open-power/HTX

    # Download and install pre-requisite packages before compiling HTX.
    Log To Console  \n Download pre-requisite packages before compiling HTX.
    Execute Command On OS
    ...  sudo apt-get -y install gcc make libncurses5 g++ libdapl-dev

    # To fix ncurse compile warning and errors.
    Execute Command On OS
    ...  sudo apt-get -y install libncurses5-dev libncursesw5-dev

    Execute Command On OS  sudo apt-get -y install libibverbs-dev librdmacm-dev

    # Compile HTX source code and install.
    Log To Console  \n Compile HTX source code.
    Execute Command On OS  cd HTX && sudo make all

    Log To Console  \n Installed compiled HTX binaries.
    Execute Command On OS  sudo make install


Setup Opal Prd On OS
    [Documentation]  Download and install opal prd tool.

    # Download and install PRD packages.
    Execute Command  sudo apt-get install opal-prd
    Execute Command  sudo apt-get install opal-utils

    # Reboot OS to activate installation.
    Host Reboot

    # Login to OS and verify opal prd installation working.
    Login To OS
    ${out}=  Execute Command  opal-gard list
    Should Contain  ${out}  No GARD entries to display

