*** Settings ***
Documentation     The main interface for interacting with Message router. It handles low level stuff like managing the http request library and message router required fields
Library           RequestsLibrary
Library           DateTime
Library           Process
Library           ONAPLibrary.JSON
Library	          ONAPLibrary.Utilities
Library	          ONAPLibrary.Templating    

Resource          global_properties.robot

*** Variables ***
${MR_HEALTH_CHECK_PATH}        /topics
${MR_PUB_HEALTH_CHECK_PATH}        /events/TEST_TOPIC
${MR_SUB_HEALTH_CHECK_PATH}        /events/TEST_TOPIC/g1/c4?timeout=5000
${MR_CREATE_TOPIC_PATH}        /topics/create
${MR_UPDATE_ACL_TOPIC_PATH}        /topics/TEST_TOPIC_ACL/producers
${MR_ENDPOINT}     ${GLOBAL_MR_SERVER_PROTOCOL}://${GLOBAL_INJECTED_MR_IP_ADDR}:${GLOBAL_MR_SERVER_PORT}
${MR_PUBLISH_TEMPLATE}     mr/mr_publish.jinja
${MR_PUT_ACL_TEMPLATE}    mr/mr_put_acl.jinja


*** Keywords ***
Run MR Health Check
     [Documentation]    Runs MR Health check
     ${resp}=    Run MR Get Request    ${MR_HEALTH_CHECK_PATH}
     Should Be Equal As Strings        ${resp.status_code}     200
     Should Contain    ${resp.json()}    topics

Run MR PubSub Health Check
     [Documentation]    Runs MR PubSub Health check
     #${resp}=    Run MR Get Request    ${MR_SUB_HEALTH_CHECK_PATH}
     # topic may not be created which is a 400 error

     ${resp}=    Run MR Post Request    ${MR_PUB_HEALTH_CHECK_PATH}
     Should Be Equal As Strings         ${resp.status_code}     200
     Should Contain    ${resp.json()}    serverTimeMs    Failed to Write Data
     ${resp}=    Run MR Get Request    ${MR_SUB_HEALTH_CHECK_PATH}
     # Always Write twice to catch lost first message
     ${resp}=    Run MR Post Request    ${MR_PUB_HEALTH_CHECK_PATH}
     ${resp}=    Run MR Get Request    ${MR_SUB_HEALTH_CHECK_PATH}
     # ${resp} is an array
     Should Be Equal As Strings         ${resp.status_code}     200
     Should Contain    ${resp.json()[0]}    timestamp    Failed to Read Data


Run MR Update Topic Acl
     [Documentation]    Runs MR create topic and update producer credentials
     #
     #   Testing to Delete a Topic:
     #           /opt/kafka/bin/kafka-topics.sh --zookeeper message-router-zookeeper:2181 --delete --topic <topic_name>
     #           /opt/kafka/bin/kafka-topics.sh --zookeeper message-router-zookeeper:2181 --delete --topic TEST_TOPIC_ACL
     #
     #   Appears to not care if topic already exists with the POST / PUT method
     #
     ${dict}=    Create Dictionary    TOPIC_NAME=TEST_TOPIC_ACL
     Create Environment    mr    ${GLOBAL_TEMPLATE_FOLDER}
     ${data}=   Apply Template    mr    ${MR_PUT_ACL_TEMPLATE}    ${dict}
     ${resp}=    Run MR Auth Post Request    ${MR_CREATE_TOPIC_PATH}   iPIxkpAMI8qTcQj8  Ehq3WyT4bkif4zwgEbvshGal   ${data}
     #Log To Console    Update Owner for TEST_TOPIC_ACL
     ${resp}=    Run MR Auth Put Request    ${MR_UPDATE_ACL_TOPIC_PATH}/iPIxkpAMI8qTcQj8  iPIxkpAMI8qTcQj8    Ehq3WyT4bkif4zwgEbvshGal    ${data}
     Should Be Equal As Strings         ${resp.status_code}     200

Run MR Auth Post Request
     [Documentation]    Runs MR Authenticated Post Request
     [Arguments]     ${data_path}     ${id_key}   ${secret_key}    ${data}
     ${current_time}=   Get Time
     ${time}=    Evaluate    datetime.datetime.today().replace(tzinfo=pytz.UTC).replace(microsecond=0).isoformat()    modules=datetime,pytz
     ${command}=  Set Variable    /bin/echo -n "${time}" | /usr/bin/openssl sha1 -hmac "${secret_key}" -binary | /usr/bin/openssl base64
     ${result}=    Run Process    ${command}   shell=True
     ${signature}=   Set Variable    ${result.stdout}
     ${xAuth}=    Set Variable    ${id_key}:${signature}
     ${headers}=  Create Dictionary     Content-Type=application/json    X-CambriaAuth=${xAuth}    X-CambriaDate=${time}
     ${session}=    Create Session      mr      ${MR_ENDPOINT}
     ${resp}=   Post Request     mr      ${data_path}     headers=${headers}   data=${data}
     ${status_string}=    Convert To String    ${resp.status_code}
     Should Match Regexp    ${status_string}    ^(204|200)$
     Log    Received response from message router ${resp.text}
     [Return]    ${resp}


Run MR Auth Put Request
     [Documentation]    Runs MR Authenticated Put Request
     [Arguments]     ${data_path}     ${id_key}   ${secret_key}    ${data}
     ${current_time}=   Get Time
     ${time}=    Evaluate    datetime.datetime.today().replace(tzinfo=pytz.UTC).replace(microsecond=0).isoformat()    modules=datetime,pytz
     ${command}=  Set Variable    /bin/echo -n "${time}" | /usr/bin/openssl sha1 -hmac "${secret_key}" -binary | /usr/bin/openssl base64
     ${result}=    Run Process    ${command}   shell=True
     ${signature}=   Set Variable    ${result.stdout}
     ${xAuth}=    Set Variable    ${id_key}:${signature}
     ${headers}=  Create Dictionary     Content-Type=application/json    X-CambriaAuth=${xAuth}    X-CambriaDate=${time}
     ${session}=    Create Session      mr      ${MR_ENDPOINT}
     ${resp}=   Put Request     mr      ${data_path}     headers=${headers}   data=${data}
     Should Be Equal As Strings         ${resp.status_code}     200
     Log    Received response from message router ${resp.text}
     [Return]    ${resp}

Run MR Get Request
     [Documentation]    Runs MR Get request
     [Arguments]    ${data_path}
     ${session}=    Create Session      mr      ${MR_ENDPOINT}
     ${uuid}=    Generate UUID4
     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json    X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid}    X-FromAppId=${GLOBAL_APPLICATION_ID}
     ${resp}=   Get Request     mr      ${data_path}     headers=${headers}
     Log    Received response from message router ${resp.text}
     [Return]    ${resp}

Run MR Post Request
     [Documentation]    Runs MR Post request
     [Arguments]    ${data_path}
     ${session}=    Create Session      mr      ${MR_ENDPOINT}
     ${timestamp}=   Get Current Date
     ${dict}=    Create Dictionary    timestamp=${timestamp}
     Create Environment    mr    ${GLOBAL_TEMPLATE_FOLDER}
     ${data}=   Apply Template    mr    ${MR_PUBLISH_TEMPLATE}    ${dict}
     ${uuid}=    Generate UUID4
     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json    X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid}    X-FromAppId=${GLOBAL_APPLICATION_ID}
     ${resp}=   Post Request    mr      ${data_path}     data=${data}    headers=${headers}
     Log    Received response from message router ${resp.text}
     [Return]    ${resp}

