| *** Settings *** |
| Library ONAPLibrary.Templating WITH NAME Templating |
| Library ONAPLibrary.Utilities |
| Library RequestsLibrary |
| Library Collections |
| Library String |
| Library OperatingSystem |
| Resource ../resources/global_properties.robot |
| Resource chart_museum.robot |
| |
| |
| *** Variables *** |
| |
| ${CLIENT_ID} robot123 |
| ${SESSION_NAME} nifi-api |
| ${DCAEMOD_SERVER} http://dcaemod.simpledemo.onap.org |
| ${IS_PROCESS_GROUP_SET} False |
| ${IS_FLOW_DISTRIBUTED} False |
| ${IS_SERVICE_DEPLOYED} False |
| ${PROCESS_GROUP_ID} ${EMPTY} |
| ${TYPE_ID} ${EMPTY} |
| ${BLUEPRINT_NAME} ${EMPTY} |
| ${DISTRIBUTION_TARGET_ID} ${EMPTY} |
| ${REGISTRY_CLIENT_ID} ${EMPTY} |
| ${DCAEMOD_ONBOARDING_API_SERVER} ${GLOBAL_DCAEMOD_ONBOARDING_API_SERVER_PROTOCOL}://${GLOBAL_DCAEMOD_ONBOARDING_API_SERVER_NAME}:${GLOBAL_DCAEMOD_ONBOARDING_API_SERVER_PORT} |
| ${DCAEMOD_DESIGNTOOL_SERVER} ${GLOBAL_DCAEMOD_DESIGNTOOL_SERVER_PROTOCOL}://${GLOBAL_DCAEMOD_DESIGNTOOL_SERVER_NAME}:${GLOBAL_DCAEMOD_DESIGNTOOL_SERVER_PORT} |
| ${DCAEMOD_DISTRIBUTOR_API_SERVER} ${GLOBAL_DCAEMOD_DISTRIBUTOR_API_SERVER_PROTOCOL}://${GLOBAL_DCAEMOD_DISTRIBUTOR_API_SERVER_NAME}:${GLOBAL_DCAEMOD_DISTRIBUTOR_API_SERVER_PORT} |
| ${HELM_RELEASE} kubectl --namespace onap get pods | sed 's/ .*//' | grep robot | sed 's/-.*//' |
| |
| |
| *** Keywords *** |
| |
| Deploy DCAE Application |
| [Arguments] ${componentSpec} ${dict_values} ${compSpecName} ${processGroupName} |
| |
| Onboard Component Spec ${componentSpec} ${dict_values} ${compSpecName} |
| ${processGroupId} = Create Process Group ${processGroupName} |
| Set Test Variable ${IS_PROCESS_GROUP_SET} True |
| Set Test Variable ${PROCESS_GROUP_ID} ${processGroupId} |
| |
| Create Processor ${PROCESS_GROUP_ID} ${compSpecName} |
| Save Flow By Version Controlling ${processGroupName} ${PROCESS_GROUP_ID} |
| Distribute The Flow ${PROCESS_GROUP_ID} |
| Set Test Variable ${IS_FLOW_DISTRIBUTED} True |
| |
| Deploy Applictaion ${processGroupName} ${compSpecName} |
| Set Test Variable ${CHART_NAME} ${compSpecName} |
| |
| |
| |
| Delete Config Map With Mounted Config File |
| ${configMapStatus} = Run Keyword And Return Status Config Map Exists ${CONFIG_MAP_NAME} |
| Run Keyword If ${configMapStatus} Delete Config Map ${CONFIG_MAP_NAME} |
| Remove File ${CONFIG_MAP_FILE} |
| |
| Delete Config Map |
| [Arguments] ${configMapName} |
| ${configMapDelete} = Run And Return Rc kubectl -n onap delete configmap ${configMapName} |
| Should Be Equal As Integers ${configMapDelete} 0 |
| |
| Create Config Map From File |
| [Arguments] ${configMapName} ${configMapFilePath} |
| |
| ${createConfigMapRC} = Run And Return Rc kubectl -n onap create configmap ${configMapName} --from-file=${configMapFilePath} |
| Should Be Equal As Integers ${createConfigMapRC} 0 |
| Wait Until Keyword Succeeds 1 min 5s Config Map Exists ${configMapName} |
| |
| Config Map Exists |
| [Arguments] ${configMapName} |
| ${configMapExists} = Run And Return Rc kubectl -n onap get configmap | grep ${configMapName} |
| Should Be Equal As Integers ${configMapExists} 0 |
| |
| Get Pod Yaml |
| [Arguments] ${compSpecName} |
| ${podYaml} = Run And Return Rc And Output kubectl -n onap get pod $(kubectl get pod -n onap | grep ${compSpecName} | awk '{print $1}') -o yaml |
| Should Be Equal As Integers ${podYaml[0]} 0 |
| ${podYaml} = Set Variable ${podYaml[1]} |
| |
| [Return] ${podYaml} |
| |
| Get Content Of Mounted Folder Inside Container |
| [Arguments] ${compSpecName} ${volumeMountPath} |
| ${mountedFolderContent} = Run And Return Rc And Output kubectl -n onap exec $(kubectl get pod -n onap | grep ${compSpecName} | awk '{print $1}') -c ${compSpecName} -- ls ${volumeMountPath} |
| Should Be Equal As Integers ${mountedFolderContent[0]} 0 |
| ${mountedFolderContent} = Set Variable ${mountedFolderContent[1]} |
| |
| [Return] ${mountedFolderContent} |
| |
| Verify If Volume Is Mounted |
| [Arguments] ${podYaml} ${volumeMountPath} |
| Should Contain ${podYaml} ${volumeMountPath} |
| |
| Verify If Config Map Is Mounted As Volume |
| [Arguments] ${podYaml} ${configMapName} |
| Should Contain ${podYaml} ${configMapName} |
| |
| Verify If Mounted Folder Is Empty |
| [Arguments] ${mountedFolderContent} |
| Should Be Empty ${mountedFolderContent} |
| |
| Verify If Mounted Folder Contains File |
| [Arguments] ${compSpecName} ${fileName} ${configMapDir} |
| |
| ${dirContent} = Run And Return Rc And Output kubectl -n onap exec $(kubectl get pod -n onap | grep ${compSpecName} | awk '{print $1}') -c ${compSpecName} -- ls ${configMapDir} |
| Should Be Equal As Integers ${dirContent[0]} 0 |
| Should Contain ${dirContent[1]} ${fileName} |
| |
| Verify File Content |
| [Arguments] ${compSpecName} ${configMapFilePath} ${content} |
| |
| ${fileContent} = Run And Return Rc And Output kubectl -n onap exec $(kubectl get pod -n onap | grep ${compSpecName} | awk '{print $1}') -c ${compSpecName} -- cat ${configMapFilePath} |
| Should Be Equal As Integers ${fileContent[0]} 0 |
| Should Contain ${fileContent[1]} ${content} |
| |
| Verify If Component Is Onboarded |
| [Arguments] ${compSpecName} |
| ${session}= Create Session ${SESSION_NAME} ${DCAEMOD_ONBOARDING_API_SERVER} |
| ${headers}= Create Dictionary content-type=application/json |
| ${resp} = Get Request ${SESSION_NAME} /onboarding/components?name=${compSpecName} headers=${headers} |
| Log ${resp.json()} |
| Should Not Be Empty ${resp.json().get('components')} |
| |
| |
| Onboard Component Spec |
| [Arguments] ${componentSpec} ${dict_values} ${compSpecName} |
| ${session}= Create Session ${SESSION_NAME} ${DCAEMOD_ONBOARDING_API_SERVER} |
| ${headers}= Create Dictionary content-type=application/json |
| Templating.Create Environment dcaemod ${GLOBAL_TEMPLATE_FOLDER} |
| ${componentSpec}= Templating.Apply Template dcaemod ${componentSpec} ${dict_values} |
| ${resp} = Post Request ${SESSION_NAME} /onboarding/components data=${componentSpec} headers=${headers} |
| Should Be True ${resp.status_code} < 300 |
| |
| Wait Until Keyword Succeeds 2 min 5s Verify If Component Is Onboarded ${compSpecName} |
| |
| Log ${resp.json()} |
| |
| Add Registry Client |
| |
| ${session}= Create Session ${SESSION_NAME} ${DCAEMOD_DESIGNTOOL_SERVER} |
| ${headers}= Create Dictionary content-type=application/json |
| ${data} = Set Variable {"revision": {"version": 0}, "component": {"name": "registry_test", "uri": "http://dcaemod-nifi-registry:18080"}} |
| ${resp} = Post Request ${SESSION_NAME} /nifi-api/controller/registry-clients data=${data} headers=${headers} |
| Should Be True ${resp.status_code} < 300 |
| |
| Set Global Variable ${REGISTRY_CLIENT_ID} ${resp.json().get('id')} |
| Set Global Variable ${REGISTRY_CLIENT_VERSION} ${resp.json().get('revision').get('version')} |
| |
| Add Distribution Target |
| |
| ${session}= Create Session distributor ${DCAEMOD_DISTRIBUTOR_API_SERVER} |
| ${headers}= Create Dictionary content-type=application/json |
| ${data} = Set Variable {"name": "runtime_test", "runtimeApiUrl": "http://dcaemod-runtime-api:9090"} |
| ${resp} = Post Request distributor /distributor/distribution-targets data=${data} headers=${headers} |
| Should Be True ${resp.status_code} < 300 |
| Set Global Variable ${DISTRIBUTION_TARGET_ID} ${resp.json().get('id')} |
| |
| Create Process Group |
| [Arguments] ${name} |
| ${session}= Create Session ${SESSION_NAME} ${DCAEMOD_DESIGNTOOL_SERVER} |
| ${headers}= Create Dictionary content-type=application/json |
| ${resp} = Get Request ${SESSION_NAME} /nifi-api/flow/process-groups/root/ headers=${headers} |
| Should Be True ${resp.status_code} < 300 |
| Log ${resp.json()} |
| ${parentGroupId} = Set Variable ${resp.json().get('processGroupFlow').get('id')} |
| |
| ${data} = Set Variable {"revision": {"clientId": "${CLIENT_ID}", "version": 0}, "component" : {"parentGroupId" : "${parentGroupId}", "name" : "${name}"}} |
| ${resp} = Post Request ${SESSION_NAME} /nifi-api/process-groups/${parentGroupId}/process-groups data=${data} headers=${headers} |
| Should Be True ${resp.status_code} < 300 |
| Log ${resp.json()} |
| |
| ${processGroupId} = Set Variable ${resp.json().get('id')} |
| |
| [Return] ${processGroupId} |
| |
| |
| Verify If NIFI Processor Is Created |
| [Arguments] ${typeName} |
| ${session}= Create Session ${SESSION_NAME} ${DCAEMOD_DESIGNTOOL_SERVER} |
| ${headers}= Create Dictionary content-type=application/json |
| ${resp} = Get Request ${SESSION_NAME} /nifi-api/flow/processor-types?type=org.onap.dcae.${typeName} headers=${headers} |
| Log ${resp.json()} |
| Should Not Be Empty ${resp.json().get('processorTypes')} |
| |
| Create Processor |
| [Arguments] ${processGroupId} ${compSpecName} |
| ${session}= Create Session ${SESSION_NAME} ${DCAEMOD_DESIGNTOOL_SERVER} |
| ${headers}= Create Dictionary content-type=application/json |
| ${typeName} = Evaluate $compSpecName.title() |
| ${typeName} = Remove String ${typeName} - |
| ${data} = Set Variable {"revision": {"clientId": "${CLIENT_ID}", "version": 0},"component": {"parentGroupId": "${processGroupId}", "name": "${compSpecName}", "type": "org.onap.dcae.${typeName}"}} |
| Wait Until Keyword Succeeds 60s 5s Verify If NIFI Processor Is Created ${typeName} |
| ${resp} = Post Request ${SESSION_NAME} /nifi-api/process-groups/${processGroupId}/processors data=${data} headers=${headers} |
| Should Be True ${resp.status_code} < 300 |
| |
| |
| Save Flow By Version Controlling |
| [Arguments] ${flowName} ${processGroupId} |
| |
| ${session}= Create Session ${SESSION_NAME} ${DCAEMOD_DESIGNTOOL_SERVER} |
| ${headers}= Create Dictionary content-type=application/json |
| |
| ${resp} = Get Request ${SESSION_NAME} /nifi-api/flow/registries/${REGISTRY_CLIENT_ID}/buckets headers=${headers} |
| Should Be True ${resp.status_code} < 300 |
| Log ${resp.json()} |
| ${bucketId} = Set Variable ${resp.json().get('buckets')[0].get('id')} |
| |
| ${processGrVersion} ${_}= Get Process Group Revision ${processGroupId} |
| |
| ${data} = Set Variable {"versionedFlow": {"flowName": "${flowName}", "bucketId": "${bucketId}", "registryId": "${REGISTRY_CLIENT_ID}"}, "processGroupRevision": {"clientId": "${CLIENT_ID}", "version": ${processGrVersion}}} |
| ${resp} = Post Request ${SESSION_NAME} /nifi-api/versions/process-groups/${processGroupId} data=${data} headers=${headers} |
| Should Be True ${resp.status_code} < 300 |
| |
| Distribute The Flow |
| [Arguments] ${processGroupId} |
| ${session}= Create Session ${SESSION_NAME} ${DCAEMOD_DESIGNTOOL_SERVER} |
| ${session}= Create Session distributor ${DCAEMOD_DISTRIBUTOR_API_SERVER} |
| ${headers}= Create Dictionary content-type=application/json |
| ${resp} = Get Request ${SESSION_NAME} /nifi-api/process-groups/${processGroupId} headers=${headers} |
| Should Be True ${resp.status_code} < 300 |
| Log ${resp.json()} |
| ${flowId} = Set Variable ${resp.json().get('component').get('versionControlInformation').get('flowId')} |
| ${data} = Set Variable {"processGroupId": "${flowId}"} |
| ${resp} = Post Request distributor /distributor/distribution-targets/${DISTRIBUTION_TARGET_ID}/process-groups data=${data} headers=${headers} |
| Should Be True ${resp.status_code} < 300 |
| |
| Deploy Applictaion |
| [Arguments] ${processGroupName} ${compSpecName} |
| ${command_output} = Run And Return Rc And Output helm repo update |
| Should Be Equal As Integers ${command_output[0]} 0 |
| ${helm_install}= Set Variable helm -n onap install ${ONAP_HELM_RELEASE}-${compSpecName} chart-museum/${compSpecName} --set global.repository=${registry_ovveride} |
| ${helm_install_command_output} = Run And Return Rc And Output ${helm_install} |
| Log ${helm_install_command_output[1]} |
| Should Be Equal As Integers ${helm_install_command_output[0]} 0 |
| Set Test Variable ${IS_SERVICE_DEPLOYED} True |
| ${kubectl_patch}= Set Variable kubectl -n onap patch deployment ${ONAP_HELM_RELEASE}-${compSpecName} -p '{"spec":{"template":{"spec":{"containers":[{"name": "${compSpecName}","image":"docker.io/nginx:latest"}]}}}}' |
| ${kubectl_patch_command_output}= Run And Return Rc And Output ${kubectl_patch} |
| Log ${kubectl_patch_command_output[1]} |
| Should Be Equal As Integers ${kubectl_patch_command_output[0]} 0 |
| Wait Until Keyword Succeeds 4 min 15s Check NGINX Applictaion ${compSpecName} |
| |
| Check NGINX Applictaion |
| [Arguments] ${compSpecName} |
| ${check_command}= Set Variable kubectl get deployment -n onap | grep ${compSpecName} | grep 1/1 |
| ${check_command_command_output}= Run And Return Rc And Output ${check_command} |
| Log ${check_command_command_output[1]} |
| Should Be Equal As Integers ${check_command_command_output[0]} 0 |
| |
| Undeploy Application |
| [Arguments] ${CHART_NAME} |
| Uninstall helm charts ${ONAP_HELM_RELEASE}-${CHART_NAME} |
| |
| Get Process Group Revision |
| [Arguments] ${processGroupId} |
| ${session}= Create Session ${SESSION_NAME} ${DCAEMOD_DESIGNTOOL_SERVER} |
| ${headers}= Create Dictionary content-type=application/json |
| ${resp} = Get Request ${SESSION_NAME} /nifi-api/versions/process-groups/${processGroupId} headers=${headers} |
| Should Be True ${resp.status_code} < 300 |
| ${currentProcessGrVersion} = Set Variable ${resp.json().get('processGroupRevision').get('version')} |
| ${clientId} = Set Variable ${resp.json().get('processGroupRevision').get('clientId')} |
| |
| [Return] ${currentProcessGrVersion} ${clientId} |
| |
| Delete Distribution Target |
| ${session}= Create Session distributor ${DCAEMOD_DISTRIBUTOR_API_SERVER} |
| ${resp} = Delete Request distributor /distributor/distribution-targets/${DISTRIBUTION_TARGET_ID} |
| Should Be True ${resp.status_code} < 300 |
| |
| Delete Process Group |
| [Arguments] ${processGroupId} |
| ${session}= Create Session ${SESSION_NAME} ${DCAEMOD_DESIGNTOOL_SERVER} |
| ${processGrVersion} ${clientId}= Get Process Group Revision ${processGroupId} |
| ${resp} = Delete Request ${SESSION_NAME} /nifi-api/process-groups/${processGroupId}?version=${processGrVersion}&clientId=${clientId} |
| Should Be True ${resp.status_code} < 300 |
| |
| Delete Registry Client |
| ${session}= Create Session ${SESSION_NAME} ${DCAEMOD_DESIGNTOOL_SERVER} |
| ${resp} = Delete Request ${SESSION_NAME} /nifi-api/controller/registry-clients/${REGISTRY_CLIENT_ID}?version=${REGISTRY_CLIENT_VERSION} |
| Should Be True ${resp.status_code} < 300 |
| |
| Configure Nifi Registry And Distribution Target |
| Restart Runtime API |
| Add Registry Client |
| Add Distribution Target |
| Add chart repository chart-museum http://chart-museum:80 onapinitializer demo123456! |
| ${command_output} = Run And Return Rc And Output ${HELM_RELEASE} |
| Should Be Equal As Integers ${command_output[0]} 0 |
| Set Global Variable ${ONAP_HELM_RELEASE} ${command_output[1]} |
| |
| Restart Runtime API |
| ${restart_command}= Set Variable kubectl delete pod $(kubectl get pods -n onap | grep dcaemod-runtime-api | awk '{print $1}') -n onap |
| ${restart_command_command_output}= Run And Return Rc And Output ${restart_command} |
| Log ${restart_command_command_output[1]} |
| Should Be Equal As Integers ${restart_command_command_output[0]} 0 |
| Wait Until Keyword Succeeds 2 min 5s Check Runtime API |
| |
| Check Runtime API |
| ${check_command}= Set Variable kubectl get deployment -n onap | grep dcaemod-runtime-api | grep 1/1 |
| ${check_command_command_output}= Run And Return Rc And Output ${check_command} |
| Log ${check_command_command_output[1]} |
| Should Be Equal As Integers ${check_command_command_output[0]} 0 |
| |
| Delete Nifi Registry And Distribution Target |
| Run Keyword If '${DISTRIBUTION_TARGET_ID}' != '${EMPTY}' Wait Until Keyword Succeeds 2 min 5s Delete Distribution Target |
| Run Keyword If '${REGISTRY_CLIENT_ID}' != '${EMPTY}' Wait Until Keyword Succeeds 2 min 5s Delete Registry Client |
| |
| Delete Process Group And Deployment |
| Run Keyword If ${IS_PROCESS_GROUP_SET} Run Keywords Delete Process Group ${PROCESS_GROUP_ID} |
| ... AND Set Suite Variable ${IS_PROCESS_GROUP_SET} False |
| Run Keyword If ${IS_SERVICE_DEPLOYED} Run Keywords Undeploy Application ${CHART_NAME} |
| ... AND Set Suite Variable ${IS_SERVICE_DEPLOYED} False |