*** Settings ***
Library       OperatingSystem
Library       RequestsLibrary
Library       json

*** Variables ***
${MESSAGE}    {"ping": "ok"}
${BASIC}    Basic
${Music_AUTHVALUE}    Y29uZHVjdG9yOmMwbmR1Y3Qwcg==
${HAS_AUTHVALUE}    YWRtaW4xOnBsYW4uMTU=
${Music_Auth}    ${BASIC} ${Music_AUTHVALUE}
${HAS_Auth}    ${BASIC} ${HAS_AUTHVALUE}
${RESP_STATUS}     "error"
${RESP_MESSAGE_WRONG_VERSION}    "conductor_template_version must be one of: 2016-11-01"
${RESP_MESSAGE_WITHOUT_DEMANDS}    Undefined Demand

#global variables
${generatedPlanId}
${generatedAID}
${resultStatus}

*** Test Cases ***
Check Cassandra Docker Container
    [Documentation]    It checks cassandra docker container is running
    ${rc}    ${output}=    Run and Return RC and Output    docker ps
    Log To Console              *********************
    Log To Console              retrurn_code = ${rc}
    Log To Console              output = ${output}
    Should Be Equal As Integers    ${rc}    0
    Should Contain    ${output}    music-db

Check Zookeeper Docker Container
    [Documentation]    It checks zookeeper docker container is running
    ${rc}    ${output}=    Run and Return RC and Output    docker ps
    Log To Console              *********************
    Log To Console              retrurn_code = ${rc}
    Log To Console              output = ${output}
    Should Be Equal As Integers    ${rc}    0
    Should Contain    ${output}    music-zk

Check Tomcat Docker Container
    [Documentation]    It checks tomcat docker container is running
    ${rc}    ${output}=    Run and Return RC and Output    docker ps
    Log To Console              *********************
    Log To Console              retrurn_code = ${rc}
    Log To Console              output = ${output}
    Should Be Equal As Integers    ${rc}    0
    Should Contain    ${output}    music-tomcat

Check Music War Docker Container
    [Documentation]    It checks music.war docker container is running
    ${rc}    ${output}=    Run and Return RC and Output    docker ps
    Log To Console              *********************
    Log To Console              retrurn_code = ${rc}
    Log To Console              output = ${output}
    Should Be Equal As Integers    ${rc}    0
    Should Contain    ${output}    music-war

Get Music Version
    [Documentation]    It sends a REST GET request to retrieve the Music.war version
    Create Session   musicaas            ${MUSIC_HOSTNAME}:${MUSIC_PORT}
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Get Request        musicaas   /MUSIC/rest/v2/version     headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    Log To Console              body = ${resp.text}
    Should Be Equal As Integers    ${resp.status_code}    200

Check ConductorApi Docker Container
    [Documentation]    It checks conductor-api docker container is running
    ${rc}    ${output}=    Run and Return RC and Output    docker ps
    Log To Console              *********************
    Log To Console              retrurn_code = ${rc}
    Log To Console              output = ${output}
    Should Be Equal As Integers    ${rc}    0
    Should Contain    ${output}    cond-api

Check ConductorController Docker Container
    [Documentation]    It checks conductor-controller docker container is running
    ${rc}    ${output}=    Run and Return RC and Output    docker ps
    Log To Console              *********************
    Log To Console              retrurn_code = ${rc}
    Log To Console              output = ${output}
    Should Be Equal As Integers    ${rc}    0
    Should Contain    ${output}    cond-cont

Check ConductorSolver Docker Container
    [Documentation]    It checks conductor-solver docker container is running
    ${rc}    ${output}=    Run and Return RC and Output    docker ps
    Log To Console              *********************
    Log To Console              retrurn_code = ${rc}
    Log To Console              output = ${output}
    Should Be Equal As Integers    ${rc}    0
    Should Contain    ${output}    cond-solv

Check ConductorReservation Docker Container
    [Documentation]    It checks conductor-reservation docker container is running
    ${rc}    ${output}=    Run and Return RC and Output    docker ps
    Log To Console              *********************
    Log To Console              retrurn_code = ${rc}
    Log To Console              output = ${output}
    Should Be Equal As Integers    ${rc}    0
    Should Contain    ${output}    cond-resv

Check ConductorData Docker Container
    [Documentation]    It checks conductor-data docker container is running
    ${rc}    ${output}=    Run and Return RC and Output    docker ps
    Log To Console              *********************
    Log To Console              retrurn_code = ${rc}
    Log To Console              output = ${output}
    Should Be Equal As Integers    ${rc}    0
    Should Contain    ${output}    cond-data

Get Root Url
    [Documentation]    It sends a REST GET request to root url
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Get Request        optf-cond   /     headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    Log To Console              body = ${resp.text}
    Should Be Equal As Integers    ${resp.status_code}    200
    Sleep    10s    Wait For 10 seconds

Conductor AddHealthcheck Row Into Music
    [Documentation]    It sends a REST PUT request to Music to inject healthcheck plan
    Create Session   musicaas            ${MUSIC_HOSTNAME}:${MUSIC_PORT}
    ${data}=         Get Binary File     ${CURDIR}${/}data${/}healthcheck.json
    &{headers}=      Create Dictionary    ns=conductor    Authorization=${Music_Auth}    userId=conductor    password=c0nduct0r   Content-Type=application/json  Accept=application/json
    ${resp}=         Put Request        musicaas   /MUSIC/rest/v2/keyspaces/conductor/tables/plans/rows?id=healthcheck    data=${data}    headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    Log To Console              body = ${resp.text}
    ${response_json}    json.loads    ${resp.content}
    Should Be Equal As Integers    ${resp.status_code}    200
    Sleep    5s    Wait Injection effectiveness

Healthcheck
    [Documentation]    It sends a REST GET request to healthcheck url
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Get Request        optf-cond   /v1/plans/healthcheck     headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    Log To Console              body = ${resp.text}
    Should Be Equal As Integers    ${resp.status_code}    200

SendPlanWithWrongVersion
    [Documentation]    It sends a POST request to conductor
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_wrong_version.json
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    Log To Console              body = ${resp.text}
    ${response_json}    json.loads    ${resp.content}
    ${generatedPlanId}=    Convert To String      ${response_json['id']}
    Set Global Variable     ${generatedPlanId}
    Log To Console              generatedPlanId = ${generatedPlanId}
    Should Be Equal As Integers    ${resp.status_code}    201
    Sleep    10s    Wait Plan Resolution

GetPlanWithWrongVersion
    [Documentation]    It sends a REST GET request to capture error
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    ${response_json}    json.loads    ${resp.content}
    ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
    Set Global Variable     ${resultStatus}
    Log To Console              resultStatus = ${resultStatus}
    Log To Console              body = ${resp.text}
    Should Be Equal As Integers    ${resp.status_code}    200
    Should Be Equal    error    ${resultStatus}

SendPlanWithoutDemandSection
    [Documentation]    It sends a POST request to conductor
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_without_demand_section.json
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    Log To Console              body = ${resp.text}
    ${response_json}    json.loads    ${resp.content}
    ${generatedPlanId}=    Convert To String      ${response_json['id']}
    Set Global Variable     ${generatedPlanId}
    Log To Console              generatedPlanId = ${generatedPlanId}
    Should Be Equal As Integers    ${resp.status_code}    201
    Sleep    10s    Wait Plan Resolution

GetPlanWithoutDemandSection
    [Documentation]    It sends a REST GET request to capture error
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    ${response_json}    json.loads    ${resp.content}
    ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
    Set Global Variable     ${resultStatus}
    Log To Console              resultStatus = ${resultStatus}
    Log To Console              body = ${resp.text}
    Should Be Equal As Integers    ${resp.status_code}    200
    Should Be Equal    error    ${resultStatus}

SendPlanWithWrongConstraint
    [Documentation]    It sends a POST request to conductor
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_wrong_distance_constraint.json
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    Log To Console              body = ${resp.text}
    ${response_json}    json.loads    ${resp.content}
    ${generatedPlanId}=    Convert To String      ${response_json['id']}
    Set Global Variable     ${generatedPlanId}
    Log To Console              generatedPlanId = ${generatedPlanId}
    Should Be Equal As Integers    ${resp.status_code}    201
    Sleep    10s    Wait Plan Resolution

GetPlanWithWrongConstraint
    [Documentation]    It sends a REST GET request to capture error
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    ${response_json}    json.loads    ${resp.content}
    ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
    Set Global Variable     ${resultStatus}
    Log To Console              resultStatus = ${resultStatus}
    Log To Console              body = ${resp.text}
    Should Be Equal As Integers    ${resp.status_code}    200
    Should Be Equal    error    ${resultStatus}


SendPlanWithLatiAndLongi
    [Documentation]    It sends a POST request to conductor
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_lati_and_longi.json
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    Log To Console              body = ${resp.text}
    ${response_json}    json.loads    ${resp.content}
    ${generatedPlanId}=    Convert To String      ${response_json['id']}
    Set Global Variable     ${generatedPlanId}
    Log To Console              generatedPlanId = ${generatedPlanId}
    Should Be Equal As Integers    ${resp.status_code}    201
    Sleep    60s    Wait Plan Resolution

GetPlanWithLatiAndLongi
    [Documentation]    It sends a REST GET request to capture recommendations
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    ${response_json}    json.loads    ${resp.content}
    ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
    Set Global Variable     ${resultStatus}
    Log To Console              resultStatus = ${resultStatus}
    Log To Console              body = ${resp.text}
    Should Be Equal As Integers    ${resp.status_code}    200
    Should Be Equal    done    ${resultStatus}

SendPlanWithShortDistanceConstraint
    [Documentation]    It sends a POST request to conductor
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_short_distance_constraint.json
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    Log To Console              body = ${resp.text}
    ${response_json}    json.loads    ${resp.content}
    ${generatedPlanId}=    Convert To String      ${response_json['id']}
    Set Global Variable     ${generatedPlanId}
    Log To Console              generatedPlanId = ${generatedPlanId}
    Should Be Equal As Integers    ${resp.status_code}    201
    Sleep    60s    Wait Plan Resolution

GetPlanWithShortDistanceConstraint
    [Documentation]    It sends a REST GET request to capture recommendations
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    ${response_json}    json.loads    ${resp.content}
    ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
    Set Global Variable     ${resultStatus}
    Log To Console              resultStatus = ${resultStatus}
    Log To Console              body = ${resp.text}
    Should Be Equal As Integers    ${resp.status_code}    200
    Should Be Equal    not found    ${resultStatus}

SendPlanWithVimFit
    [Documentation]    It sends a POST request to conductor
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_vim_fit.json
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    Log To Console              body = ${resp.text}
    ${response_json}    json.loads    ${resp.content}
    ${generatedPlanId}=    Convert To String      ${response_json['id']}
    Set Global Variable     ${generatedPlanId}
    Log To Console              generatedPlanId = ${generatedPlanId}
    Should Be Equal As Integers    ${resp.status_code}    201
    Sleep    60s    Wait Plan Resolution

GetPlanWithVimFit
    [Documentation]    It sends a REST GET request to capture recommendations
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    ${response_json}    json.loads    ${resp.content}
    ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
    Set Global Variable     ${resultStatus}
    Log To Console              resultStatus = ${resultStatus}
    Log To Console              body = ${resp.text}
    Should Be Equal As Integers    ${resp.status_code}    200
    Should Be Equal    done    ${resultStatus}

SendPlanWithHpa
    [Documentation]    It sends a POST request to conductor
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_hpa.json
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    Log To Console              body = ${resp.text}
    ${response_json}    json.loads    ${resp.content}
    ${generatedPlanId}=    Convert To String      ${response_json['id']}
    Set Global Variable     ${generatedPlanId}
    Log To Console              generatedPlanId = ${generatedPlanId}
    Should Be Equal As Integers    ${resp.status_code}    201
    Sleep    60s    Wait Plan Resolution

GetPlanWithHpa
    [Documentation]    It sends a REST GET request to capture recommendations
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    ${response_json}    json.loads    ${resp.content}
    ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
    Set Global Variable     ${resultStatus}
    Log To Console              resultStatus = ${resultStatus}
    Log To Console              body = ${resp.text}
    Should Be Equal As Integers    ${resp.status_code}    200
    Should Be Equal    done    ${resultStatus}

SendPlanWithHpaSimple
    [Documentation]    It sends a POST request to conductor
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_hpa_simple.json
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    Log To Console              body = ${resp.text}
    ${response_json}    json.loads    ${resp.content}
    ${generatedPlanId}=    Convert To String      ${response_json['id']}
    Set Global Variable     ${generatedPlanId}
    Log To Console              generatedPlanId = ${generatedPlanId}
    Should Be Equal As Integers    ${resp.status_code}    201
    Sleep    60s    Wait Plan Resolution

GetPlanWithHpaSimple
    [Documentation]    It sends a REST GET request to capture recommendations
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    ${response_json}    json.loads    ${resp.content}
    ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
    Set Global Variable     ${resultStatus}
    Log To Console              resultStatus = ${resultStatus}
    Log To Console              body = ${resp.text}
    Should Be Equal As Integers    ${resp.status_code}    200
    Should Be Equal    done    ${resultStatus}

SendPlanWithHpaMandatory
    [Documentation]    It sends a POST request to conductor
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_hpa_requirements_mandatory.json
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    Log To Console              body = ${resp.text}
    ${response_json}    json.loads    ${resp.content}
    ${generatedPlanId}=    Convert To String      ${response_json['id']}
    Set Global Variable     ${generatedPlanId}
    Log To Console              generatedPlanId = ${generatedPlanId}
    Should Be Equal As Integers    ${resp.status_code}    201
    Sleep    60s    Wait Plan Resolution

GetPlanWithHpaMandatory
    [Documentation]    It sends a REST GET request to capture recommendations
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    ${response_json}    json.loads    ${resp.content}
    ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
    Set Global Variable     ${resultStatus}
    Log To Console              resultStatus = ${resultStatus}
    Log To Console              body = ${resp.text}
    Should Be Equal As Integers    ${resp.status_code}    200
    Should Be Equal    done    ${resultStatus}

SendPlanWithHpaOptionals
    [Documentation]    It sends a POST request to conductor
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_hpa_requirements_optionals.json
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    Log To Console              body = ${resp.text}
    ${response_json}    json.loads    ${resp.content}
    ${generatedPlanId}=    Convert To String      ${response_json['id']}
    Set Global Variable     ${generatedPlanId}
    Log To Console              generatedPlanId = ${generatedPlanId}
    Should Be Equal As Integers    ${resp.status_code}    201
    Sleep    60s    Wait Plan Resolution

GetPlanWithHpaOptionals
    [Documentation]    It sends a REST GET request to capture recommendations
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    ${response_json}    json.loads    ${resp.content}
    ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
    Set Global Variable     ${resultStatus}
    Log To Console              resultStatus = ${resultStatus}
    Log To Console              body = ${resp.text}
    Should Be Equal As Integers    ${resp.status_code}    200
    Should Be Equal    done    ${resultStatus}

SendPlanWithHpaUnmatched
    [Documentation]    It sends a POST request to conductor
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_hpa_unmatched.json
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    Log To Console              body = ${resp.text}
    ${response_json}    json.loads    ${resp.content}
    ${generatedPlanId}=    Convert To String      ${response_json['id']}
    Set Global Variable     ${generatedPlanId}
    Log To Console              generatedPlanId = ${generatedPlanId}
    Should Be Equal As Integers    ${resp.status_code}    201
    Sleep    60s    Wait Plan Resolution

GetPlanWithHpaUnmatched
    [Documentation]    It sends a REST GET request to capture recommendations
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    ${response_json}    json.loads    ${resp.content}
    ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
    Set Global Variable     ${resultStatus}
    Log To Console              resultStatus = ${resultStatus}
    Log To Console              body = ${resp.text}
    Should Be Equal As Integers    ${resp.status_code}    200
    Should Be Equal    not found    ${resultStatus}

# HPA Score Multi objective Optimization
SendPlanWithHpaScoreMultiObj
    [Documentation]    It sends a POST request to conductor
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_hpa_score_multi_objective.json
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    Log To Console              body = ${resp.text}
    ${response_json}    json.loads    ${resp.content}
    ${generatedPlanId}=    Convert To String      ${response_json['id']}
    Set Global Variable     ${generatedPlanId}
    Log To Console              generatedPlanId = ${generatedPlanId}
    Should Be Equal As Integers    ${resp.status_code}    201
    Sleep    60s    Wait Plan Resolution

GetPlanWithHpaScoreMultiObj
    [Documentation]    It sends a REST GET request to capture recommendations
    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
    &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
    ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
    Log To Console              *********************
    Log To Console              response = ${resp}
    ${response_json}    json.loads    ${resp.content}
    ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
    ${vim-id}=    Convert To String      ${response_json['plans'][0]['recommendations'][0]['vG']['candidate']['vim-id']}
    # ${hpa_score}=    Convert To String      ${response_json['plans'][0]['recommendations']['vG']['hpa_score']}
    Set Global Variable     ${resultStatus}
    Log To Console              resultStatus = ${resultStatus}
    Log To Console              body = ${resp.text}
    Should Be Equal As Integers    ${resp.status_code}    200
    Should Be Equal    done    ${resultStatus}
    Should Be Equal    HPA-cloud_cloud-region-1    ${vim-id}


*** Keywords ***