From 56bb06b065db80f838eadfe945b1b7cfcaa1bfb4 Mon Sep 17 00:00:00 2001 From: "Singhsumalee, Pete (ps2418)" Date: Mon, 25 Sep 2017 14:13:15 -0500 Subject: Added 2 more resources test cases Also modified the resources setup to take into account recent changes Issue ID: AAI-155 Change-Id: I71997fcf0ee6b4c2eb17abb1a7f6a4bd1255aba0 Signed-off-by: Singhsumalee, Pete (ps2418) Signed-off-by: Venkata Harish K Kajur --- test/csit/plans/aai/resources/docker-compose.yml | 3 + test/csit/plans/aai/resources/setup.sh | 44 ++++--- test/csit/plans/aai/traversal/setup.sh | 1 + .../resources/db_edge_rule/prevent_delete.robot | 131 +++++++++++++++++++++ .../relationship_using_related_link.robot | 110 +++++++++++++++++ 5 files changed, 273 insertions(+), 16 deletions(-) create mode 100644 test/csit/tests/aai/resources/db_edge_rule/prevent_delete.robot create mode 100644 test/csit/tests/aai/resources/relationship_suite/relationship_using_related_link.robot diff --git a/test/csit/plans/aai/resources/docker-compose.yml b/test/csit/plans/aai/resources/docker-compose.yml index 923f24dea..09d2a8127 100644 --- a/test/csit/plans/aai/resources/docker-compose.yml +++ b/test/csit/plans/aai/resources/docker-compose.yml @@ -9,6 +9,7 @@ services: - CHEF_BRANCH=master - CHEF_GIT_URL=http://gerrit.onap.org/r/aai - AAI_CORE_VERSION=1.1.0-SNAPSHOT + - LOCAL_USER_ID=${USER_ID} ports: - 8447:8447 logging: @@ -25,6 +26,8 @@ services: - CHEF_BRANCH=master - CHEF_GIT_URL=http://gerrit.onap.org/r/aai - AAI_CORE_VERSION=1.1.0-SNAPSHOT + - LOCAL_USER_ID=${USER_ID} + - DISABLE_UPDATE_QUERY=true ports: - 8446:8446 logging: diff --git a/test/csit/plans/aai/resources/setup.sh b/test/csit/plans/aai/resources/setup.sh index 915536be2..19beb6365 100644 --- a/test/csit/plans/aai/resources/setup.sh +++ b/test/csit/plans/aai/resources/setup.sh @@ -31,7 +31,7 @@ function wait_for_container() { CONTAINER_NAME="$1"; START_TEXT="$2"; - TIMEOUT=240 + TIMEOUT=360 # wait for the real startup AMOUNT_STARTUP=$(docker logs ${CONTAINER_NAME} 2>&1 | grep "$START_TEXT" | wc -l) @@ -59,6 +59,7 @@ export HBASE_VERSION="${HBASE_VERSION:-1.2.0}"; docker pull ${HBASE_IMAGE}:${HBASE_VERSION}; +docker pull ${HBASE_IMAGE}:${HBASE_VERSION}; docker pull ${DOCKER_REGISTRY}/openecomp/aai-resources:${DOCKER_IMAGE_VERSION}; docker tag ${DOCKER_REGISTRY}/openecomp/aai-resources:${DOCKER_IMAGE_VERSION} ${DOCKER_REGISTRY}/openecomp/aai-resources:latest; @@ -74,25 +75,36 @@ wait_for_container ${HBASE_CONTAINER_NAME} ' Started SelectChannelConnector@0.0. wait_for_container ${HBASE_CONTAINER_NAME} ' Started SelectChannelConnector@0.0.0.0:8080'; wait_for_container ${HBASE_CONTAINER_NAME} ' Started SelectChannelConnector@0.0.0.0:9095'; -# Start the resources microservice -RESOURCES_CONTAINER_NAME=$(${DOCKER_COMPOSE_CMD} up -d aai-resources.api.simpledemo.openecomp.org 2>&1 | grep 'Creating' | grep -v 'volume' | grep -v 'network' | awk '{ print $2; }' | head -1); -wait_for_container ${RESOURCES_CONTAINER_NAME} '0.0.0.0:8447'; -docker logs ${CONTAINER_NAME}; - -# Start the traversal microservice -GRAPH_CONTAINER_NAME=$(${DOCKER_COMPOSE_CMD} up -d aai-traversal.api.simpledemo.openecomp.org 2>&1 | grep 'Creating' | awk '{ print $2; }' | head -1); -wait_for_container ${GRAPH_CONTAINER_NAME} '0.0.0.0:8446'; +USER_EXISTS=$(check_if_user_exists aaiadmin); -# Start the haproxy to route requests between resources and traversal -HAPROXY_CONTAINER_NAME=$(${DOCKER_COMPOSE_CMD} up -d aai.api.simpledemo.openecomp.org 2>&1 |grep 'Creating' | grep -v 'volume' | grep -v 'network' | awk '{ print $2; }' | head -1); +function check_if_user_exists(){ + local user_id=$1; -echo "A&AI Microservices, resources and traversal, are up and running along with HAProxy"; + if [ -z "$user_id" ]; then + echo "Needs to provide at least one argument for check_if_user_exists func"; + exit 1; + fi; -docker exec $GRAPH_CONTAINER_NAME "/opt/app/aai-traversal/scripts/install/updateQueryData.sh" && { - echo "Successfully loaded the widget related data into db"; -} || { - echo "Unable to load widget related data into db"; + id -u ${user_id} > /dev/null 2>&1 && { + echo "1"; + } || { + echo "0"; + } } + +if [ "${USER_EXISTS}" -eq 0 ]; then + export USER_ID=9000; +else + export USER_ID=$(id -u aaiadmin); +fi; + +RESOURCES_CONTAINER_NAME=$(${DOCKER_COMPOSE_CMD} up -d aai-resources.api.simpledemo.openecomp.org 2>&1 | grep 'Creating' | grep -v 'volume' | grep -v 'network' | awk '{ print $2; }' | head -1); +wait_for_container ${RESOURCES_CONTAINER_NAME} '0.0.0.0:8447'; + +docker logs ${RESOURCES_CONTAINER_NAME}; + +${DOCKER_COMPOSE_CMD} up -d aai-traversal.api.simpledemo.openecomp.org aai.api.simpledemo.openecomp.org +echo "A&AI Microservices, resources and traversal, are up and running along with HAProxy"; # Set the host ip for robot from the haproxy ROBOT_VARIABLES="-v HOST_IP:`ip addr show docker0 | head -3 | tail -1 | cut -d' ' -f6 | cut -d'/' -f1`" diff --git a/test/csit/plans/aai/traversal/setup.sh b/test/csit/plans/aai/traversal/setup.sh index 80eace0dd..010b0352e 100644 --- a/test/csit/plans/aai/traversal/setup.sh +++ b/test/csit/plans/aai/traversal/setup.sh @@ -58,6 +58,7 @@ export HBASE_IMAGE="${HBASE_IMAGE:-aaionap/hbase}"; export HBASE_VERSION="${HBASE_VERSION:-1.2.0}"; docker pull ${HBASE_IMAGE}:${HBASE_VERSION}; + docker pull ${DOCKER_REGISTRY}/openecomp/aai-resources:${DOCKER_IMAGE_VERSION}; docker tag ${DOCKER_REGISTRY}/openecomp/aai-resources:${DOCKER_IMAGE_VERSION} ${DOCKER_REGISTRY}/openecomp/aai-resources:latest; diff --git a/test/csit/tests/aai/resources/db_edge_rule/prevent_delete.robot b/test/csit/tests/aai/resources/db_edge_rule/prevent_delete.robot new file mode 100644 index 000000000..beae2da51 --- /dev/null +++ b/test/csit/tests/aai/resources/db_edge_rule/prevent_delete.robot @@ -0,0 +1,131 @@ +*** Settings *** +Library OperatingSystem +Library RequestsLibrary +Library requests +Library Collections + +*** Variables *** +${CRKEYVALUE7} cr-integration-test7 +${CRKEYVALUE8} cr-integration-test8 +${TENANTKEYVALUE} tenant-integration-test7 +${VSERVERKEYVALUE} vserver-integration-test7 + +${CRURL} https://${HOST_IP}:8443/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/${CRKEYVALUE7}/${CRKEYVALUE8} +${TENANTURL} https://${HOST_IP}:8443/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/${CRKEYVALUE7}/${CRKEYVALUE8}/tenants/tenant/${TENANTKEYVALUE} +${VSERVERURL} https://${HOST_IP}:8443/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/${CRKEYVALUE7}/${CRKEYVALUE8}/tenants/tenant/${TENANTKEYVALUE}/vservers/vserver/${VSERVERKEYVALUE} +${CRDATA} {"cloud-owner":"${CRKEYVALUE7}","cloud-region-id":"${CRKEYVALUE8}","owner-defined-type":"example-owner-defined-type-98787654321-09","cloud-region-version":"example-cloud-region-version-98765784321-09","identity-url":"example-identity-url-98765437821-09","cloud-zone":"example-cloud-zone-98765784321-09","complex-name":"example-complex-name-98765874321-09"} +${TENANTDATA} {"tenant-id":"${TENANTKEYVALUE}","tenant-name":"example-tenant-name-val-143742","vservers":{"vserver":[{"vserver-id":"${VSERVERKEYVALUE}","vserver-name":"example-vserver-name-val-357201","vserver-name2":"example-vserver-name2-val-672821","prov-status":"example-prov-status-val-137711","vserver-selflink":"example-vserver-selflink-val-58731","in-maint":true,"is-closed-loop-disabled":true}]}} + + +*** Test Cases *** +Run AAI Put cloud-region + [Documentation] Create an cloud-region object + ${resp}= PutWithCert ${CRURL} ${CRDATA} + log ${CRURL} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 201 + +Run AAI Put tenant + [Documentation] Create an tenant object + ${resp}= PutWithCert ${TENANTURL} ${TENANTDATA} + log ${TENANTURL} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 201 + +Run AAI Get tenant to delete + [Documentation] Get tenant object to delete + ${resp} GetWithCert ${TENANTURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + ${resource_version}= Evaluate $resp.json().get('resource-version') + Set Global Variable ${resource_version} + +Run AAI Delete tenant + [Documentation] Delete the tenant + ${resp}= DeleteWithCert ${TENANTURL}?resource-version=${resource_version} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 400 + +Run AAI Get vserver to delete + [Documentation] Get vserver object to delete + ${resp} GetWithCert ${VSERVERURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + ${resource_version}= Evaluate $resp.json().get('resource-version') + Set Global Variable ${resource_version} + +Run AAI Delete vserver + [Documentation] Delete the vserver + ${resp}= DeleteWithCert ${VSERVERURL}?resource-version=${resource_version} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 204 + +Run AAI Get tenant to delete + [Documentation] Get tenant object to delete + ${resp} GetWithCert ${TENANTURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + ${resource_version}= Evaluate $resp.json().get('resource-version') + Set Global Variable ${resource_version} + +Run AAI Delete tenant + [Documentation] Delete the tenant + ${resp}= DeleteWithCert ${TENANTURL}?resource-version=${resource_version} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 204 + +Run AAI Get cr to delete + [Documentation] Get cr object to delete + ${resp} GetWithCert ${CRURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + ${resource_version}= Evaluate $resp.json().get('resource-version') + Set Global Variable ${resource_version} + +Run AAI Delete cr + [Documentation] Delete the cr + ${resp}= DeleteWithCert ${CRURL}?resource-version=${resource_version} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 204 + +*** Keywords *** +PutWithCert + [Arguments] ${url} ${data} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.put('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +PatchWithCert + [Arguments] ${url} ${data} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/merge-patch+json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.patch('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +PostWithCert + [Arguments] ${url} ${data} + ${auth}= Create List AAI AAI + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.post('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +GetWithCert + [Arguments] ${url} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.get('${url}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +DeleteWithCert + [Arguments] ${url} + ${auth}= Create List AAI AAI + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.delete('${url}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} \ No newline at end of file diff --git a/test/csit/tests/aai/resources/relationship_suite/relationship_using_related_link.robot b/test/csit/tests/aai/resources/relationship_suite/relationship_using_related_link.robot new file mode 100644 index 000000000..5820d4ac6 --- /dev/null +++ b/test/csit/tests/aai/resources/relationship_suite/relationship_using_related_link.robot @@ -0,0 +1,110 @@ +*** Settings *** +Library OperatingSystem +Library RequestsLibrary +Library requests +Library Collections + +*** Variables *** +${COMPLEXKEYVALUE} complex-integration-test8 +${L3NETWORKKEYVALUE} l3-network-integration-test8 +${COMPLEXURL} https://${HOST_IP}:8443/aai/v11/cloud-infrastructure/complexes/complex/${COMPLEXKEYVALUE} +${L3NETWORKURL} https://${HOST_IP}:8443/aai/v11/network/l3-networks/l3-network/${L3NETWORKKEYVALUE} +${COMPLEXDATA} {"physical-location-id":"${COMPLEXKEYVALUE}","data-center-code":"example-data-center-code-val-77883","complex-name":"example-complex-name-val-12992","identity-url":"example-identity-url-val-74366","physical-location-type":"example-physical-location-type-val-32854","street1":"example-street1-val-26496","street2":"example-street2-val-6629","city":"example-city-val-30262","state":"example-state-val-9058","postal-code":"example-postal-code-val-44893","country":"example-country-val-98673","region":"example-region-val-10014","latitude":"example-latitude-val-47555","longitude":"example-longitude-val-76903","elevation":"example-elevation-val-63385","lata":"example-lata-val-90935"} +${L3NETWORKDATA} {"network-id":"${L3NETWORKKEYVALUE}","network-name":"example-network-name-val-54688","network-type":"example-network-type-val-57468","network-role":"example-network-role-val-54868","network-technology":"example-network-technology-val-5468","neutron-network-id":"example-neutron-network-id-val-54678","is-bound-to-vpn":"true","service-id":"example-service-id-val-5468","orchestration-status":"example-orchestration-status-val-5468","heat-stack-id":"example-heat-stack-id-val-5468","mso-catalog-key":"example-mso-catalog-key-val-5468","relationship-list":{"relationship":[{"related-to":"complex","related-link":"/aai/v11/cloud-infrastructure/complexes/complex/${COMPLEXKEYVALUE}"}]}} + +*** Test Cases *** +Run AAI Put complex + [Documentation] Create an complex object + ${resp}= PutWithCert ${COMPLEXURL} ${COMPLEXDATA} + log ${COMPLEXURL} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 201 + +Run AAI Get complex + [Documentation] Get the complex object just created + ${resp} GetWithCert ${COMPLEXURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + +Run AAI Put l3-network relationship with complex + [Documentation] Create l3-network relationship with complex + ${resp}= PutWithCert ${L3NETWORKURL} ${L3NETWORKDATA} + log ${L3NETWORKURL} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 201 + +Run AAI Get l3-network + [Documentation] Get the l3-network object just created with relationship with complex + ${resp} GetWithCert ${L3NETWORKURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + +Run AAI Get l3-network to delete + [Documentation] Get l3-network object to delete + ${resp} GetWithCert ${L3NETWORKURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + ${resource_version}= Evaluate $resp.json().get('resource-version') + Set Global Variable ${resource_version} + +Run AAI Delete l3-network + [Documentation] Delete the l3-network just created + ${resp}= DeleteWithCert ${L3NETWORKURL}?resource-version=${resource_version} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 204 + +Run AAI Get complex to delete + [Documentation] Get complex object to delete + ${resp} GetWithCert ${COMPLEXURL} + log ${resp} + log ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + ${resource_version}= Evaluate $resp.json().get('resource-version') + Set Global Variable ${resource_version} + +Run AAI Delete complex + [Documentation] Delete the complex just created + ${resp}= DeleteWithCert ${COMPLEXURL}?resource-version=${resource_version} + log ${resp.text} + Should Be Equal As Strings ${resp.status_code} 204 + +*** Keywords *** +PutWithCert + [Arguments] ${url} ${data} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.put('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +PatchWithCert + [Arguments] ${url} ${data} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/merge-patch+json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.patch('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +PostWithCert + [Arguments] ${url} ${data} + ${auth}= Create List AAI AAI + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.post('${url}', data='${data}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +GetWithCert + [Arguments] ${url} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.get('${url}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} + +DeleteWithCert + [Arguments] ${url} + ${auth}= Create List AAI AAI + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=integration-aai X-FromAppId=integration-aai Authorization=Basic QUFJOkFBSQ== + ${certinfo}= Evaluate ('${CURDIR}/aai.crt', '${CURDIR}/aai.key') + ${resp}= Evaluate requests.delete('${url}', headers=${headers}, cert=${certinfo}, verify=False) requests + [return] ${resp} \ No newline at end of file -- cgit 1.2.3-korg