| *** Settings *** |
| Documentation Testing openstack. |
| Library OperatingSystem |
| Library Process |
| Library SSHLibrary |
| Library RequestsLibrary |
| Library JSONUtils |
| Library OpenstackLibrary |
| Library HEATUtils |
| Library Collections |
| LIbrary String |
| Resource ../../resources/openstack/keystone_interface.robot |
| Resource ../../resources/openstack/nova_interface.robot |
| Resource ../../resources/openstack/heat_interface.robot |
| Resource ../../resources/ssh/files.robot |
| Resource ../../resources/ssh/processes.robot |
| Resource packet_generator_interface.robot |
| Resource darkstat_interface.robot |
| Resource validate_common.robot |
| Resource ../../resources/test_templates/vnf_orchestration_test_template.robot |
| |
| |
| *** Variables *** |
| |
| *** Keywords *** |
| Policy Check FirewallCL Stack |
| [Documentation] Executes the vFW policy closed loop test. |
| [Arguments] ${stacknamemap} ${policy_rate} |
| Run Openstack Auth Request auth |
| ${vsnk_stack_name}= Get From Dictionary ${stacknamemap} vFWSNK |
| ${vpkg_stack_name}= Get From Dictionary ${stacknamemap} vPKG |
| ${vsnk_stack_info}= Wait for Stack to Be Deployed auth ${vsnk_stack_name} |
| ${vpkg_stack_info}= Wait for Stack to Be Deployed auth ${vpkg_stack_name} |
| ${server_list}= Get Openstack Servers auth |
| Log ${server_list} |
| ${vpkg_id}= Get From Dictionary ${vpkg_stack_info} vnf_id |
| ${status} ${generic_vnf}= Run Keyword And Ignore Error Get Generic VNF By ID ${vpkg_id} |
| Run Keyword If '${status}' == 'FAIL' FAIL VNF ID: ${vpkg_id} is not found. |
| ${invariantUUID} Get From Dictionary ${generic_vnf} persona-model-id |
| Update vVFWCL Policy ${invariantUUID} |
| |
| ${vpg_unprotected_ip}= Get From Dictionary ${vpkg_stack_info} vpg_private_ip_0 |
| ${vsn_protected_ip}= Get From Dictionary ${vsnk_stack_info} vsn_private_ip_0 |
| ${vpg_public_ip}= Get Server Ip ${server_list} ${vpkg_stack_info} vpg_name_0 network_name=public |
| ${vsn_public_ip}= Get Server Ip ${server_list} ${vsnk_stack_info} vsn_name_0 network_name=public |
| ${upper_bound}= Evaluate ${policy_rate}*2 |
| Wait Until Keyword Succeeds 30m 2s Run VFW Policy Check ${vpg_public_ip} ${policy_rate} ${upper_bound} 1 |
| |
| Run VFW Policy Check |
| [Documentation] Push traffic above upper bound, wait for policy to fix it, push traffic to lower bound, wait for policy to fix it, |
| [Arguments] ${vpg_public_ip} ${policy_rate} ${upper_bound} ${lower_bound} |
| # Force traffic above threshold |
| Check For Policy Enforcement ${vpg_public_ip} ${policy_rate} ${upper_bound} |
| # Force traffic below threshold |
| Check For Policy Enforcement ${vpg_public_ip} ${policy_rate} ${lower_bound} |
| |
| |
| Check For Policy Enforcement |
| [Documentation] Push traffic above upper bound, wait for policy to fix it, push traffic to lower bound, wait for policy to fix it, |
| [Arguments] ${vpg_public_ip} ${policy_rate} ${forced_rate} |
| Enable Streams ${vpg_public_ip} ${forced_rate} |
| Wait Until Keyword Succeeds 20s 2s Test For Expected Rate ${vpg_public_ip} ${forced_rate} |
| Wait Until Keyword Succeeds 10m 2s Test For Expected Rate ${vpg_public_ip} ${policy_rate} |
| |
| Test For Expected Rate |
| [Documentation] Ge the number of pg-streams from the PGN, and test to see if it is what we expect. |
| [Arguments] ${vpg_public_ip} ${number_of_streams} |
| ${list}= Get List Of Enabled Streams ${vpg_public_ip} |
| ${list}= Evaluate ${list['sample-plugin']}['pg-streams']['pg-stream'] |
| Length Should Be ${list} ${number_of_streams} |
| |
| |
| |
| Policy Check vLB Stack |
| [Documentation] Executes the vLB policy closed loop test |
| [Arguments] ${stack_name} ${policy_rate} |
| Run Openstack Auth Request auth |
| ${stack_info}= Wait for Stack to Be Deployed auth ${stack_name} |
| ${stack_id}= Get From Dictionary ${stack_info} id |
| ${server_list}= Get Openstack Servers auth |
| ${vlb_public_ip}= Get Server Ip ${server_list} ${stack_info} vlb_name_0 network_name=public |
| ${upper_bound}= Evaluate ${policy_rate}*2 |
| Start DNS Traffic ${vlb_public_ip} ${upper_bound} |
| |
| # Now wiat for the dnsscaling stack to be deployed |
| ${prefix}= Get DNSScaling Prefix |
| ${dnsscaling}= Replace String Using Regexp ${stack_name} ^Vfmodule_ ${prefix} |
| ${dnsscaling_info}= Wait for Stack to Be Deployed auth ${dnsscaling} |
| VLB Closed Loop Hack Update ${dnsscaling} |
| # TO DO: Log into vLB and cehck that traffic is flowing to the new DNS |
| [Return] ${dnsscaling} |
| |
| Get DNSScaling Prefix |
| ${mapping}= Get From Dictionary ${GLOBAL_SERVICE_TEMPLATE_MAPPING} vLB |
| :for ${dict} in @{mapping} |
| \ Return From Keyword If '${dict['isBase']}' == 'false' ${dict['prefix']} |
| [Return] None |
| |
| |
| Start DNS Traffic |
| [Documentation] Run nslookups at rate per second. Run for 10 minutes or until it is called by the terminate process |
| [Arguments] ${vlb_public_ip} ${rate} |
| ${pid}= Start Process ./dnstraffic.sh ${vlb_public_ip} ${rate} ${GLOBAL_DNS_TRAFFIC_DURATION} |
| [Return] ${pid} |