*** Settings ***
Documentation      This suite is for testing Open BMC full test suite.
...                Maintains log.html output.xml  for each iteration and
...                generate combined report

Resource  ../lib/utils.robot
Resource  ../lib/connection_client.robot
Library  OperatingSystem
Library  DateTime

Suite Setup         Open Connection And Log In
Suite Teardown      Close All Connections

Force Tags  Full_Suite_Regression

*** Variables ***
${ITERATION}          10
${RESULT_DIR_NAME}    logsdir
${LOOP_TEST_COMMAND}  tests

*** Test Cases ***
Validate BMC Model
   [Documentation]  Check that OPENBMC_MODEL is correct.
   [Tags]  Validate_BMC_Model
   ${bmc_model}=  Get BMC System Model
   ${status}=  Verify BMC System Model  ${bmc_model}
   Run Keyword If  '${status}'=='False'  Fatal Error  Wrong System

Run Entire Test Suite Multiple Time
   [Documentation]  Multiple iterations of Full Suite

   Should Be True  0<${ITERATION}

   ${timestamp}=  Get Current Date  result_format=%Y%m%d%H%M%S
   ${tmp_result_dir_path}=  Catenate  ${RESULT_DIR_NAME}${timestamp}
   Set Suite Variable  ${RESULT_DIR_PATH}  ${tmp_result_dir_path}
   Log To Console  ${RESULT_DIR_PATH}
   Create Directory  ${RESULT_DIR_PATH}

   : FOR    ${INDEX}    IN RANGE    0    ${ITERATION}
    \    Log To Console  \n Iteration:   no_newline=True
    \    Log To Console  ${INDEX}
    \    Run  OPENBMC_HOST=${OPENBMC_HOST} tox -e ${OPENBMC_SYSTEMMODEL} -- ${LOOP_TEST_COMMAND}
    \    Run  sed -i 's/'${OPENBMC_HOST}'/DUMMYIP/g' output.xml
    \    Copy File  output.xml   ${RESULT_DIR_PATH}/output${INDEX}.xml
    \    Copy File  log.html   ${RESULT_DIR_PATH}/log${INDEX}.html

Create Combined Report
   [Documentation]  Using output[?].xml and create combined log.html
   [Tags]  Create_Combined_Report

   Run  rebot --name ${OPENBMC_SYSTEMMODEL}CombinedReport ${RESULT_DIR_PATH}/output*.xml

   ${combined_report_file}=  Catenate  SEPARATOR=  ${RESULT_DIR_PATH}
    ...  /log${OPENBMC_SYSTEMMODEL}CombinedIterations  ${ITERATION}Report.html
   Copy File  log.html  ${combined_report_file}

   Convert HTML To PDF  ${combined_report_file}

*** Keywords ***

Convert HTML To PDF
   [Documentation]  Convert HTML to PDF in order to support GitHub
   ...  attachment.
   [Arguments]  ${combined_report_html_file_path}
   # Description of arguments:
   # combined_report_html_file_path  Combined report file in HTML format.

   Log To Console  \n ${combined_report_html_file_path}
   ${combined_report_pdf_file_path}=
   ...  Fetch From Left  ${combined_report_html_file_path}  .
   # Compose combined_report_pdf_file_path.
   ${combined_report_pdf_file_path}=  Catenate  SEPARATOR=
   ...  ${combined_report_pdf_file_path}  .pdf
   # wkhtmltopdf tool is to convert HTML to PDF
   ${output}=  Run  which wkhtmltopdf
   Should Not Be Empty  ${output}
   ...  msg=wkhtmltopdf not installed, Install from http://wkhtmltopdf.org
   ${output}=
   ...  Run  wkhtmltopdf ./${combined_report_html_file_path} ./${combined_report_pdf_file_path}
   Should Not Be Empty  ${output}
   OperatingSystem.File Should Exist  ${combined_report_pdf_file_path}


