Adding verification of kube resources
[integration/csit.git] / tests / so / integration-cnfm-testing / cnf_lcm_tests.robot
1 *** Settings ***
2 Library     Collections
3 Library     RequestsLibrary
4 Library     OperatingSystem
5 Library     json
6 Library     libraries/KubernetesClient.py
7
8 Documentation    Test cases for CNF lifecycle management operations
9 ...              Note, relies on:
10 ...                -package being onboarded in cnf_package_onboarding_tests
11
12 *** Variables ***
13 ${SLEEP_INTERVAL_SEC}=                     10
14 ${MAXIMUM_ATTEMPTS_BEFORE_TIMEOUT}=        60     # Represents the maximum number of attempts that will be made before a timeout. It sleeps for SLEEP_INTERVAL_SEC seconds before retry.
15 ${BASIC_AUTH}=                             Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==
16 ${SERVICE_INSTANTIATION_TEMPLATE}=         ${CURDIR}${/}data${/}serviceInstantiationRequest.json
17 ${CNF_RESOURCE_INSTANTIATION_TEMPLATE}=    ${CURDIR}${/}data${/}cnfResourceInstantiationRequest.json
18 ${CNF_RESOURCE_DELETE_TEMPLATE}=           ${CURDIR}${/}data${/}cnfResourceDeleteRequest.json
19 ${SERVICE_DELETE_TEMPLATE}=                ${CURDIR}${/}data${/}serviceDeleteRequest.json
20
21 ${LABEL_NAME}=                                       app.kubernetes.io/instance
22 ${MARIADB_LABEL_SELECTOR}=                           ${LABEL_NAME}=democnfinstance-mariadb-db-1
23 ${EXPECTED_NUM_OF_RESOURCES_AFTER_INSTANTIATION}=    1
24
25 ${NGINX_LABEL_SELECTOR}=                             ${LABEL_NAME}=democnfinstance-nginx-services-2
26 ${EXPECTED_NUM_OF_RESOURCES_AFTER_DELETE}=           0
27
28
29 *** Test Cases ***
30 Invoke Service Instantiation
31     Create Session   api_handler_session  http://${REPO_IP}:8080
32     ${data}=    Get Binary File     ${SERVICE_INSTANTIATION_TEMPLATE}
33     &{headers}=  Create Dictionary    Authorization=${BASIC_AUTH}    Content-Type=application/json    Accept=application/json
34     ${service_instantiation_request}=    Post On Session    api_handler_session    /onap/so/infra/serviceInstantiation/v7/serviceInstances    data=${data}    headers=${headers}
35     Log to Console      \nStatus code received: ${service_instantiation_request.status_code}
36     Log to Console      Content received: ${service_instantiation_request.content}
37     Should Be Equal As Strings    '${service_instantiation_request.status_code}'    '202'
38
39     ${service_instantiation_json_response}=    Evaluate     json.loads(r"""${service_instantiation_request.content}""", strict=False)    json
40     ${request_ID}=          Set Variable         ${service_instantiation_json_response}[requestReferences][requestId]
41     ${service_instance_Id}=     Set Variable       ${service_instantiation_json_response}[requestReferences][instanceId]
42     ${actual_request_state}=    Set Variable    ""
43
44     FOR    ${INDEX}    IN RANGE    ${MAXIMUM_ATTEMPTS_BEFORE_TIMEOUT}
45        ${orchestration_status_request}=   Get On Session  api_handler_session   /onap/so/infra/orchestrationRequests/v7/${request_ID}
46        Log to Console      Orchestration status code received: ${orchestration_status_request.status_code}
47        Log to Console      Orchestration Content received: ${orchestration_status_request.content}
48        ${orchestration_json_response}=    Evaluate     json.loads(r"""${orchestration_status_request.content}""", strict=False)    json
49        ${actual_request_state}=     Set Variable       ${orchestration_json_response}[request][requestStatus][requestState]
50        Log To Console    Received actual repsonse status:${actual_request_state}
51        Run Keyword If   '${actual_request_state}' == 'COMPLETE' or '${actual_request_state}' == 'FAILED'      Exit For Loop
52        Log to Console  Will try again after ${SLEEP_INTERVAL_SEC} seconds
53        Sleep   ${SLEEP_INTERVAL_SEC}s
54     END
55
56     Log To Console     Final repsonse status received: ${actual_request_state}
57     Should Be Equal As Strings    '${actual_request_state}'    'COMPLETE'
58     Set Global Variable       ${service_instance_Id}
59
60 Invoke CNF Instantiation
61     Run Keyword If      "${service_instance_Id}"!="${EMPTY}"      Log to Console    Service Instance ID :${service_instance_Id} received
62     ...                ELSE      Fail           Log to Console  Invalid Service Instance ID :${service_instance_Id} recieved
63
64     ${data}=    Get Binary File     ${CNF_RESOURCE_INSTANTIATION_TEMPLATE}
65     ${cnf_instantiate_request_json}=    Evaluate    json.loads(r'''${data}''', strict=False)    json
66     Set To Dictionary    ${cnf_instantiate_request_json}[requestDetails][relatedInstanceList][0][relatedInstance]        instanceId=${service_instance_Id}
67     ${cnf_instantiate_request_string}=    Evaluate    json.dumps(${cnf_instantiate_request_json})    json
68
69     Create Session   api_handler_session  http://${REPO_IP}:8080
70     &{headers}=  Create Dictionary    Authorization=${BASIC_AUTH}    Content-Type=application/json    Accept=application/json
71     ${cnf_instantiate_request}=    Post On Session    api_handler_session    /onap/so/infra/serviceInstantiation/v7/serviceInstances/${service_instance_Id}/cnfs   data=${cnf_instantiate_request_string}    headers=${headers}
72     Log to Console      \nStatus code received: ${cnf_instantiate_request.status_code}
73     Log to Console      Content received: ${cnf_instantiate_request.content}
74     Should Be Equal As Strings    '${cnf_instantiate_request.status_code}'    '202'
75
76     ${cnf_instantiate_json_response}=    Evaluate     json.loads(r"""${cnf_instantiate_request.content}""")    json
77     ${request_ID}=          Set Variable         ${cnf_instantiate_json_response}[requestReferences][requestId]
78     ${actual_request_state}=    Set Variable    ""
79     ${cnf_instance_Id}=     Set Variable       ${cnf_instantiate_json_response}[requestReferences][instanceId]
80
81     FOR    ${INDEX}    IN RANGE    ${MAXIMUM_ATTEMPTS_BEFORE_TIMEOUT}
82        ${orchestration_status_request}=   Get On Session  api_handler_session   /onap/so/infra/orchestrationRequests/v7/${request_ID}
83        Run Keyword If  '${orchestration_status_request.status_code}' == '200'  log to console   \nexecuted with expected result
84        Log To Console      ${orchestration_status_request.content}
85        ${orchestration_json_response}=    Evaluate     json.loads(r"""${orchestration_status_request.content}""", strict=False)    json
86        ${actual_request_state}=     Set Variable       ${orchestration_json_response}[request][requestStatus][requestState]
87        Run Keyword If   '${actual_request_state}' == 'COMPLETE' or '${actual_request_state}' == 'FAILED'      Exit For Loop
88        Log To Console  Will try again after ${SLEEP_INTERVAL_SEC} seconds
89        SLEEP   ${SLEEP_INTERVAL_SEC}s
90     END
91
92     ${service_instance_Id}=     Set Variable       ${orchestration_json_response}[request][instanceReferences][serviceInstanceId]
93     Log To Console     Final repsonse status received: ${actual_request_state}
94     Should Be Equal As Strings    '${actual_request_state}'    'COMPLETE'
95
96     Verify Kubernetes Resources    ${EXPECTED_NUM_OF_RESOURCES_AFTER_INSTANTIATION}
97     Set Global Variable       ${cnf_instance_Id}
98
99 Invoke CNF Delete
100     Run Keyword If      "${cnf_instance_Id}" != "${EMPTY}"      Log to Console    CNF Instance ID :${cnf_instance_Id} received
101     ...                ELSE      Fail           Log to Console  Invalid CNF Instance ID :${cnf_instance_Id} recieved
102     Run Keyword If      "${service_instance_Id}" != "${EMPTY}"      Log to Console    CNF Instance ID :${service_instance_Id} received
103     ...                ELSE      Fail           Log to Console  Invalid CNF Instance ID :${service_instance_Id} recieved
104
105     Create Session   api_handler_session  http://${REPO_IP}:8080
106     ${data}=    Get Binary File     ${CNF_RESOURCE_DELETE_TEMPLATE}
107     &{headers}=  Create Dictionary    Authorization=${BASIC_AUTH}    Content-Type=application/json    Accept=application/json
108     ${cnf_delete_request}=    Delete On Session    api_handler_session    /onap/so/infra/serviceInstantiation/v7/serviceInstances/${service_instance_Id}/cnfs/${cnf_instance_Id}     data=${data}     headers=${headers}
109     Log to Console      \nStatus code received: ${cnf_delete_request.status_code}
110     Log to Console      Content received: ${cnf_delete_request.content}
111     Should Be Equal As Strings    '${cnf_delete_request.status_code}'    '202'
112
113     ${cnf_delete_json_response}=    Evaluate     json.loads(r"""${cnf_delete_request.content}""")    json
114     ${request_ID}=          Set Variable         ${cnf_delete_json_response}[requestReferences][requestId]
115     ${actual_request_state}=    Set Variable    ""
116
117     FOR    ${INDEX}    IN RANGE    ${MAXIMUM_ATTEMPTS_BEFORE_TIMEOUT}
118        ${orchestration_status_request}=   Get On Session  api_handler_session   /onap/so/infra/orchestrationRequests/v7/${request_ID}
119        Run Keyword If  '${orchestration_status_request.status_code}' == '200'  log to console   \nexecuted with expected result
120        Log To Console      ${orchestration_status_request.content}
121        ${orchestration_json_response}=    Evaluate     json.loads(r"""${orchestration_status_request.content}""")    json
122        ${actual_request_state}=     Set Variable       ${orchestration_json_response}[request][requestStatus][requestState]
123        Run Keyword If   '${actual_request_state}' == 'COMPLETE' or '${actual_request_state}' == 'FAILED'      Exit For Loop
124        Log To Console  Will try again after ${SLEEP_INTERVAL_SEC} seconds
125        SLEEP   ${SLEEP_INTERVAL_SEC}s
126     END
127
128     Log To Console     Final repsonse status received: ${actual_request_state}
129     Should Be Equal As Strings    '${actual_request_state}'    'COMPLETE'
130
131     Verify Kubernetes Resources    ${EXPECTED_NUM_OF_RESOURCES_AFTER_DELETE}
132
133 Delete Service Instance
134     Run Keyword If      "${service_instance_Id}" != "${EMPTY}"      Log to Console    CNF Instance ID :${service_instance_Id} received
135     ...                ELSE      Fail           Log to Console  Invalid Service Instance ID :${service_instance_Id} recieved
136
137     Create Session   api_handler_session  http://${REPO_IP}:8080
138     ${data}=    Get Binary File     ${SERVICE_DELETE_TEMPLATE}
139     &{headers}=  Create Dictionary    Authorization=${BASIC_AUTH}    Content-Type=application/json    Accept=application/json
140     ${service_delete_request}=    Delete On Session    api_handler_session    /onap/so/infra/serviceInstantiation/v7/serviceInstances/${service_instance_Id}     data=${data}     headers=${headers}
141     ${service_delete_json_response}=    Evaluate     json.loads(r"""${service_delete_request.content}""")    json
142     Log to Console      \nStatus code received: ${service_delete_request.status_code}
143     Log to Console      Content received: ${service_delete_request.content}
144     Should Be Equal As Strings    '${service_delete_request.status_code}'    '202'
145
146     ${request_ID}=          Set Variable         ${service_delete_json_response}[requestReferences][requestId]
147     ${actual_request_state}=    Set Variable    ""
148
149     FOR    ${INDEX}    IN RANGE    ${MAXIMUM_ATTEMPTS_BEFORE_TIMEOUT}
150        ${orchestration_status_request}=   Get On Session  api_handler_session   /onap/so/infra/orchestrationRequests/v7/${request_ID}
151        Run Keyword If  '${orchestration_status_request.status_code}' == '200'  log to console   \nexecuted with expected result
152        Log To Console      ${orchestration_status_request.content}
153        ${orchestration_json_response}=    Evaluate     json.loads(r"""${orchestration_status_request.content}""")    json
154        ${actual_request_state}=     Set Variable       ${orchestration_json_response}[request][requestStatus][requestState]
155        Run Keyword If   '${actual_request_state}' == 'COMPLETE' or '${actual_request_state}' == 'FAILED'      Exit For Loop
156        Log To Console  Will try again after ${SLEEP_INTERVAL_SEC} seconds
157        SLEEP   ${SLEEP_INTERVAL_SEC}s
158     END
159
160     Log To Console     Final repsonse status received: ${actual_request_state}
161     Should Be Equal As Strings    '${actual_request_state}'    'COMPLETE'
162
163 *** Keywords ***
164 Verify Kubernetes Resources
165     [Arguments]    ${expected_number_resources}
166
167     Create Api Client    ${KIND_CLUSTER_KUBE_CONFIG_FILE}
168
169     Log To Console    Retrieving number of services using selector '${MARIADB_LABEL_SELECTOR}'
170     ${no_of_mariadb_services}=    Get Number Of Services In Namespace    label_selector=${MARIADB_LABEL_SELECTOR}
171     Should Be Equal As Integers      ${no_of_mariadb_services}    ${expected_number_resources}    Unexpected number of services received for ${MARIADB_LABEL_SELECTOR}
172
173     Log To Console    Retrieving number of stateful set using selector '${MARIADB_LABEL_SELECTOR}'
174     ${no_of_mariadb_stateful_set}=    Get Number Of Stateful Set In Namespace    label_selector=${MARIADB_LABEL_SELECTOR}
175     Should Be Equal As Integers      ${no_of_mariadb_stateful_set}    ${expected_number_resources}    Unexpected number of stateful sets received for ${MARIADB_LABEL_SELECTOR}
176
177     Log To Console    Retrieving number of services using selector '${NGINX_LABEL_SELECTOR}'
178     ${no_of_nginx_services}=    Get Number Of Services In Namespace    label_selector=${NGINX_LABEL_SELECTOR}
179     Should Be Equal As Integers      ${no_of_nginx_services}    ${expected_number_resources}    Unexpected number of services received for ${NGINX_LABEL_SELECTOR}
180
181     Log To Console    Retrieving number of deployments using selector '${NGINX_LABEL_SELECTOR}'
182     ${no_of_nginx_deployments}=    Get Number Of Deployments In Namespace    label_selector=${NGINX_LABEL_SELECTOR}
183     Should Be Equal As Integers      ${no_of_nginx_deployments}    ${expected_number_resources}    Unexpected number of deployments received for ${NGINX_LABEL_SELECTOR}