aboutsummaryrefslogtreecommitdiffstats
path: root/robot/resources/mr_interface.robot
blob: f4c57cd2668b998578fc4c5d95633340f1ef4d0a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
*** 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    WITH NAME    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
     Templating.Create Environment    mr    ${GLOBAL_TEMPLATE_FOLDER}
     ${data}=   Templating.Apply Template    mr    ${MR_PUT_ACL_TEMPLATE}    ${dict}
     ${resp}=    Run MR Auth Post Request    ${MR_CREATE_TOPIC_PATH}   iPIxkpAMI8qTcQj8  Ehq3WyT4bkif4zwgEbvshGal   ${data}
     #Log    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 Auth Get Request
     [Documentation]    Runs MR Authenticated Put Request
     [Arguments]     ${data_path}     ${username}   ${password}
     ${auth}=            Create List              ${username}      ${password}
     ${session}=    Create Session      mr      ${MR_ENDPOINT}     auth=${auth}
     ${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 Auth Post Request (User And Pass)
     [Documentation]    Runs MR Authenticated Post Request
     [Arguments]     ${data_path}     ${username}   ${password}   ${data}
     ${auth}=            Create List              ${username}      ${password}
     ${session}=    Create Session      mr      ${MR_ENDPOINT}     auth=${auth}
     ${uuid}=    Generate UUID4
     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json    X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid}
     ${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 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}
     Templating.Create Environment    mr    ${GLOBAL_TEMPLATE_FOLDER}
     ${data}=   Templating.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}

Run MR Delete Request
     [Documentation]    Runs MR Delete 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}=   Delete Request     mr      ${data_path}     headers=${headers}
     Log    Received response from message router ${resp.status_code}
     [Return]    ${resp}