*** settings ***
Resource    ../../common.robot
Library     Collections
Library     RequestsLibrary
Library     OperatingSystem
Library     json
Library     HttpLibrary.HTTP

*** Variables ***
${catalog_port}            8806
${cataloghealthcheck_url}         /api/catalog/v1/health_check
${vnfpkgmhealthcheck_url}         /api/vnfpkgm/v1/health_check
${nsdhealthcheck_url}         /api/nsd/v1/health_check
${parserhealthcheck_url}         /api/parser/v1/health_check
${service_packages_url}         /api/parser/v1/service_packages
${vnfpackages_url}         /api/catalog/v1/vnfpackages
${nspackages_url}         /api/catalog/v1/nspackages
${jobs_url}         /api/catalog/v1/jobs

#json files
${ns_packages_json}    ${SCRIPTS}/../tests/vfc/nfvo-catalog/jsons/ns_packages.json
${vnfpackages_catalog_json}    ${SCRIPTS}/../tests/vfc/nfvo-catalog/jsons/vnf_packages.json

#global variables
${jobId}

*** Test Cases ***
Check Health Catalog
    Log   Check Health Catalog
    [Documentation]    check health for catalog by MSB
    Check Health    ${cataloghealthcheck_url}

Check Health Vnfpkgm
    Log   Check Health Vnfpkgm
    [Documentation]    check health for Vnfpkgm by MSB
    Check Health    ${vnfpkgmhealthcheck_url}

Check Health Nsd
    Log   Check Health Nsd
    [Documentation]    check health for Nsd by MSB
    Check Health    ${nsdhealthcheck_url}

Check Health Parser
    Log   Check Health Parser
    [Documentation]    check health for Parser by MSB
    Check Health    ${parserhealthcheck_url}

Check distribute catalog NS pacakages
    Log    Check distribute catalog NS pacakages
    [Documentation]    check distribute catalog NS pacakages
    Check distribute package    ${ns_packages_json}    ${nspackages_url}

Check query catalog all NS package
    Log    Query catalog all NS package
    [Documentation]     check query catalog all NS package
    Check query all packages    ${nspackages_url}

Check query all Service package
    Log    Query all Service packages
    [Documentation]     check query Service packages by MSB
    ${headers}    Create Dictionary    Content-Type=application/json    Accept=application/json
    Check query all packages    ${service_packages_url}

Check distribute VNF package
    Log    Check distribute VNF packagee
    [Documentation]     check distribute VNF package
    ${json_value}=     json_from_file      ${vnfpackages_catalog_json}
    ${json_string}=     string_from_json   ${json_value}
    ${headers}    Create Dictionary    Content-Type=application/json    Accept=application/json
    Create Session    web_session    http://${CATALOG_IP}:${catalog_port}    headers=${headers}
    Set Request Body    ${json_string}
    ${resp}=    Post Request    web_session     ${vnfpackages_url}    ${json_string}
    Should Be Equal As Strings    202   ${resp.status_code}
    ${response_json}    json.loads    ${resp.content}
    ${jobId}=    Convert To String      ${response_json['jobId']}
    Set Global Variable     ${jobId}

Check query job status
    Log    Check query job status
    [Documentation]    check query job status
    ${headers}    Create Dictionary    Content-Type=application/json    Accept=application/json
    Create Session    web_session    http://${CATALOG_IP}:${catalog_port}    headers=${headers}
    ${resp}=  Get Request    web_session    ${jobs_url}/${jobId}
    Should Be Equal As Strings    200    ${resp.status_code}

Check query all VNF package
    Log    Query all VNF packages
    [Documentation]     check query VNF packages
    ${headers}    Create Dictionary    Content-Type=application/json    Accept=application/json
    Create Session    web_session    http://${CATALOG_IP}:${catalog_port}    headers=${headers}
    ${resp}=  Get Request    web_session    ${vnfpackages_url}
    Should Be Equal As Strings    200    ${resp.status_code}
    ${response_json}    json.loads    ${resp.content}

*** Keywords ***
Check Health
    [Arguments]  ${url}
    ${headers}    Create Dictionary    Content-Type=application/json    Accept=application/json
    Create Session    web_session    http://${CATALOG_IP}:${catalog_port}    headers=${headers}
    ${resp}=  Get Request    web_session    ${url}
    Should Be Equal As Strings    200    ${resp.status_code}
    ${response_json}    json.loads    ${resp.content}  
    Should Be Equal As Strings    active    ${response_json['status']}

Check distribute package
    [Arguments]    ${json_file}    ${url}
    ${json_value}=     json_from_file      ${json_file}
    ${json_string}=     string_from_json   ${json_value}
    ${headers}    Create Dictionary    Content-Type=application/json    Accept=application/json
    Create Session    web_session    http://${CATALOG_IP}:${catalog_port}    headers=${headers}
    Set Request Body    ${json_string}
    ${resp}=    Post Request    web_session     ${url}    ${json_string}
    Should Be Equal As Strings    202   ${resp.status_code}

Check query all packages
    [Arguments]    ${url}
    ${headers}    Create Dictionary    Content-Type=application/json    Accept=application/json
    Create Session    web_session    http://${CATALOG_IP}:${catalog_port}    headers=${headers}
    ${resp}=  Get Request    web_session    ${url}
    Should Be Equal As Strings    200    ${resp.status_code}