X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=csit%2Flibraries%2FOpenStackOperations.robot;h=ae6393a9c2f61e0c447c21c814b30177e8b38be3;hb=c6740c77a4706a11379d2b074fc5d380a610d9af;hp=85c3dd94f5c31741e922e8d1a3ba58080f985579;hpb=7a61f04c8e4c1b0b7b55b8e88201ad0607490e26;p=integration%2Ftest.git diff --git a/csit/libraries/OpenStackOperations.robot b/csit/libraries/OpenStackOperations.robot index 85c3dd94f5..ae6393a9c2 100644 --- a/csit/libraries/OpenStackOperations.robot +++ b/csit/libraries/OpenStackOperations.robot @@ -20,6 +20,10 @@ Resource ../variables/Variables.robot Resource ../variables/netvirt/Variables.robot Variables ../variables/netvirt/Modules.py +*** Variables *** +@{VALIDATION_KEYWORDS} Verify Services Verify Expected Default Tunnels Verify Expected Default Tables On Nodes +${VALIDATION_FILE} /tmp/validations.txt + *** Keywords *** Get Tenant ID From Security Group [Documentation] Returns tenant ID by reading it from existing default security-group. @@ -334,15 +338,17 @@ Verify If Instance Is Arpingable From DHCP Namespace BuiltIn.Should Contain ${output} [${mac_uppercase}] Check If Instance Is Ready For Ssh Login Using PublicKey - [Arguments] ${net_name} ${vm_ip} ${user}=centos ${idfile}=/tmp/odlkey + [Arguments] ${net_name} ${vm_ip} ${user}=centos ${idfile}=/tmp/odlkey ${console}=cirros [Documentation] Ensure the VM is reachable from ssh as tests would require. This keyword will use publickey authentication ${output} = Execute Command on VM Instance with PublicKey Auth ${net_name} ${vm_ip} ifconfig user=${user} idfile=${idfile} + ... console=${console} BuiltIn.Should Contain ${output} ${vm_ip} Check If Instance Is Ready For Ssh Login Using Password - [Arguments] ${net_name} ${vm_ip} ${user}=cirros + [Arguments] ${net_name} ${vm_ip} ${user}=cirros ${password}=cubswin:) ${console}=cirros [Documentation] Ensure the VM is reachable from ssh as tests would require. This keyword will use password authentication - ${output} = Execute Command on VM Instance ${net_name} ${vm_ip} ifconfig + ${output} = Execute Command on VM Instance ${net_name} ${vm_ip} ifconfig ${user} ${password} + ... console=${console} BuiltIn.Should Contain ${output} ${vm_ip} Get VM IPs @@ -442,21 +448,25 @@ Close Vm Instance ${output} = DevstackUtils.Write Commands Until Prompt And Log exit Check If Console Is VmInstance + [Arguments] ${console}=cirros [Documentation] Check if the session has been able to login to the VM instance ${output} = Utils.Write Commands Until Expected Prompt id ${OS_SYSTEM_PROMPT} - BuiltIn.Should Not Contain ${output} jenkins + BuiltIn.Should Contain ${output} ${console} Exit From Vm Console + [Arguments] ${console}=cirros [Documentation] Check if the session has been able to login to the VM instance and exit the instance - ${rcode} = BuiltIn.Run Keyword And Return Status OpenStackOperations.Check If Console Is VmInstance + ${rcode} = BuiltIn.Run Keyword And Return Status OpenStackOperations.Check If Console Is VmInstance ${console} BuiltIn.Run Keyword If ${rcode} DevstackUtils.Write Commands Until Prompt exit Check Ping - [Arguments] ${ip_address} ${ttl}=64 + [Arguments] ${ip_address} ${ttl}=64 ${ping_tries}=3 [Documentation] Run Ping command on the IP available as argument ${ethertype} = String.Get Regexp Matches ${ip_address} ${IP_REGEX} - ${output} = BuiltIn.Run Keyword If ${ethertype} Utils.Write Commands Until Expected Prompt ping -t ${ttl} -c 3 ${ip_address} ${OS_SYSTEM_PROMPT} - ... ELSE Utils.Write Commands Until Expected Prompt ping6 -t ${ttl} -c 3 ${ip_address} ${OS_SYSTEM_PROMPT} + ${ping} = BuiltIn.Set Variable If ${ethertype} ping ping6 + ${cmd} = BuiltIn.Set Variable rc=0; for count in `seq 1 ${ping_tries}`; do ${ping} -W1 -t${ttl} -c1 ${ip_address}; rc=$?; if [ $rc -eq 0 ]; then break; fi; done; echo ping_rc=$rc + ${output} = Utils.Write Commands Until Expected Regexp ${cmd} ping_rc=\\d+ 120 + BuiltIn.Log output: ${output} BuiltIn.Should Contain ${output} 64 bytes Check No Ping @@ -472,25 +482,26 @@ Check Metadata Access Execute Command on VM Instance [Arguments] ${net_name} ${vm_ip} ${cmd} ${user}=cirros ${password}=cubswin:) ${cmd_timeout}=30s + ... ${console}=cirros [Documentation] Login to the vm instance using ssh in the network, executes a command inside the VM and returns the ouput. OpenStackOperations.Get ControlNode Connection ${net_id} = OpenStackOperations.Get Net Id ${net_name} - ${output} = Utils.Write Commands Until Expected Prompt sudo ip netns exec qdhcp-${net_id} ssh ${user}@${vm_ip} -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o PreferredAuthentications=password password: + ${output} = Utils.Write Commands Until Expected Prompt sudo ip netns exec qdhcp-${net_id} ssh ${user}@${vm_ip} -o MACs=hmac-sha1 -o ConnectTimeout=5 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o PreferredAuthentications=password password: ${output} = Utils.Write Commands Until Expected Prompt ${password} ${OS_SYSTEM_PROMPT} - ${rcode} = BuiltIn.Run Keyword And Return Status OpenStackOperations.Check If Console Is VmInstance + ${rcode} = BuiltIn.Run Keyword And Return Status OpenStackOperations.Check If Console Is VmInstance ${console} ${output} = BuiltIn.Run Keyword If ${rcode} Utils.Write Commands Until Expected Prompt ${cmd} ${OS_SYSTEM_PROMPT} timeout=${cmd_timeout} - [Teardown] Exit From Vm Console + [Teardown] Exit From Vm Console ${console} [Return] ${output} Execute Command on VM Instance With PublicKey Auth - [Arguments] ${net_name} ${vm_ip} ${cmd} ${user}=centos ${idfile}=/tmp/odlkey + [Arguments] ${net_name} ${vm_ip} ${cmd} ${user}=centos ${idfile}=/tmp/odlkey ${console}=cirros [Documentation] Login to the vm instance using ssh publickey in the network, executes a command inside the VM and returns the ouput. OpenStackOperations.Get ControlNode Connection ${net_id} = OpenStackOperations.Get Net Id ${net_name} - ${output} = Utils.Write Commands Until Expected Prompt sudo ip netns exec qdhcp-${net_id} ssh -i ${idfile} ${user}@${vm_ip} -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o PreferredAuthentications=publickey prompt=${OS_SYSTEM_PROMPT} timeout=60s - ${rcode} = BuiltIn.Run Keyword And Return Status OpenStackOperations.Check If Console Is VmInstance + ${output} = Utils.Write Commands Until Expected Prompt sudo ip netns exec qdhcp-${net_id} ssh -i ${idfile} ${user}@${vm_ip} -o MACs=hmac-sha1 -o ConnectTimeout=5 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o PreferredAuthentications=publickey prompt=${OS_SYSTEM_PROMPT} timeout=60s + ${rcode} = BuiltIn.Run Keyword And Return Status OpenStackOperations.Check If Console Is VmInstance ${console} ${output} = BuiltIn.Run Keyword If ${rcode} Utils.Write Commands Until Expected Prompt ${cmd} ${OS_SYSTEM_PROMPT} - [Teardown] Exit From Vm Console + [Teardown] Exit From Vm Console ${console} [Return] ${output} Copy File To VM Instance With PublicKey Auth @@ -498,18 +509,18 @@ Copy File To VM Instance With PublicKey Auth [Documentation] Login to the vm instance using ssh publickey in the network, executes a command inside the VM and returns the ouput. OpenStackOperations.Get ControlNode Connection ${net_id} = OpenStackOperations.Get Net Id ${net_name} - ${rc} = SSHLibrary.Execute Command sudo ip netns exec qdhcp-${net_id} scp -i ${idfile} -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o PreferredAuthentications=publickey ${file_to_copy} ${user}@${vm_ip}:/tmp/ return_stdout=False return_rc=True + ${rc} = SSHLibrary.Execute Command sudo ip netns exec qdhcp-${net_id} scp -i ${idfile} -o MACs=hmac-sha1 -o ConnectTimeout=5 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o PreferredAuthentications=publickey ${file_to_copy} ${user}@${vm_ip}:/tmp/ return_stdout=False return_rc=True BuiltIn.Should Be True '${rc}' == '0' Test Operations From Vm Instance [Arguments] ${net_name} ${src_ip} ${dest_ips} ${user}=cirros ${password}=cubswin:) ${ttl}=64 - ... ${ping_should_succeed}=True ${check_metadata}=True + ... ${ping_should_succeed}=True ${check_metadata}=True ${console}=cirros ${ping_tries}=3 [Documentation] Login to the vm instance using ssh in the network. OpenStackOperations.Get ControlNode Connection ${net_id} = OpenStackOperations.Get Net Id ${net_name} ${output} = Utils.Write Commands Until Expected Prompt sudo ip netns exec qdhcp-${net_id} ssh -o MACs=hmac-sha1 -o ConnectTimeout=5 -o StrictHostKeyChecking=no ${user}@${src_ip} -o UserKnownHostsFile=/dev/null password: 10s ${output} = Utils.Write Commands Until Expected Prompt ${password} ${OS_SYSTEM_PROMPT} - ${rcode} = BuiltIn.Run Keyword And Return Status OpenStackOperations.Check If Console Is VmInstance + ${rcode} = BuiltIn.Run Keyword And Return Status OpenStackOperations.Check If Console Is VmInstance ${console} BuiltIn.Run Keyword If ${rcode} Utils.Write Commands Until Expected Prompt ifconfig ${OS_SYSTEM_PROMPT} BuiltIn.Run Keyword If ${rcode} Utils.Write Commands Until Expected Prompt route -n ${OS_SYSTEM_PROMPT} BuiltIn.Run Keyword If ${rcode} Utils.Write Commands Until Expected Prompt route -A inet6 ${OS_SYSTEM_PROMPT} @@ -518,11 +529,11 @@ Test Operations From Vm Instance : FOR ${dest_ip} IN @{dest_ips} \ ${string_empty} = BuiltIn.Run Keyword And Return Status Should Be Empty ${dest_ip} \ BuiltIn.Run Keyword If ${string_empty} Continue For Loop - \ BuiltIn.Run Keyword If ${rcode} and "${ping_should_succeed}" == "True" OpenStackOperations.Check Ping ${dest_ip} ttl=${ttl} + \ BuiltIn.Run Keyword If ${rcode} and "${ping_should_succeed}" == "True" OpenStackOperations.Check Ping ${dest_ip} ttl=${ttl} ping_tries=${ping_tries} \ ... ELSE OpenStackOperations.Check No Ping ${dest_ip} ttl=${ttl} ${ethertype} = String.Get Regexp Matches ${src_ip} ${IP_REGEX} BuiltIn.Run Keyword If ${rcode} and "${check_metadata}" and ${ethertype} == "True" OpenStackOperations.Check Metadata Access - [Teardown] Exit From Vm Console + [Teardown] Exit From Vm Console ${console} Test Netcat Operations From Vm Instance [Arguments] ${net_name} ${vm_ip} ${dest_ip} ${additional_args}=${EMPTY} ${port}=12345 ${user}=cirros @@ -542,9 +553,9 @@ Test Netcat Operations From Vm Instance BuiltIn.Should Match Regexp ${nc_output} ${server_data} Ping Other Instances - [Arguments] ${list_of_external_dst_ips} + [Arguments] ${list_of_external_dst_ips} ${console}=cirros [Documentation] Check reachability with other network's instances. - ${rcode} = BuiltIn.Run Keyword And Return Status OpenStackOperations.Check If Console Is VmInstance + ${rcode} = BuiltIn.Run Keyword And Return Status OpenStackOperations.Check If Console Is VmInstance ${console} : FOR ${dest_ip} IN @{list_of_external_dst_ips} \ OpenStackOperations.Check Ping ${dest_ip} @@ -634,6 +645,8 @@ Get Test Teardown Debugs OpenStackOperations.Get OvsDebugInfo BuiltIn.Run Keyword And Ignore Error DataModels.Get Model Dump ${HA_PROXY_IP} ${netvirt_data_models} KarafKeywords.Fail If Exceptions Found During Test ${test_name} fail=${fail} + : FOR ${i} IN RANGE ${NUM_ODL_SYSTEM} + \ BuiltIn.Run Keyword And Ignore Error Issue_Command_On_Karaf_Console trace:transactions ${ODL_SYSTEM_${i+1}_IP} Get Suite Debugs Get Test Teardown Debugs test_name=${SUITE_NAME} fail=False @@ -742,7 +755,7 @@ Delete All Security Group Rules \ ${output} = OpenStack CLI openstack security group rule delete ${rule} Create Allow All SecurityGroup - [Arguments] ${sg_name} ${ether_type}=IPv4 + [Arguments] ${sg_name} ${ether_type}=IPv4 ${dual}=False [Documentation] Allow all TCP/UDP/ICMP packets for this suite OpenStackOperations.Neutron Security Group Create ${sg_name} OpenStackOperations.Neutron Security Group Rule Create ${sg_name} direction=ingress ethertype=${ether_type} port_range_max=65535 port_range_min=1 protocol=tcp @@ -751,6 +764,16 @@ Create Allow All SecurityGroup OpenStackOperations.Neutron Security Group Rule Create ${sg_name} direction=egress ethertype=${ether_type} protocol=icmp OpenStackOperations.Neutron Security Group Rule Create ${sg_name} direction=ingress ethertype=${ether_type} port_range_max=65535 port_range_min=1 protocol=udp OpenStackOperations.Neutron Security Group Rule Create ${sg_name} direction=egress ethertype=${ether_type} port_range_max=65535 port_range_min=1 protocol=udp + BuiltIn.Run Keyword If "${dual}"=="True" Run Keywords OpenStackOperations.Neutron Security Group Rule Create ${sg_name} direction=ingress ethertype=IPv6 + ... port_range_max=65535 port_range_min=1 protocol=tcp + ... AND OpenStackOperations.Neutron Security Group Rule Create ${sg_name} direction=egress ethertype=IPv6 port_range_max=65535 + ... port_range_min=1 protocol=tcp + ... AND OpenStackOperations.Neutron Security Group Rule Create ${sg_name} direction=ingress ethertype=IPv6 protocol=icmp + ... AND OpenStackOperations.Neutron Security Group Rule Create ${sg_name} direction=egress ethertype=IPv6 protocol=icmp + ... AND OpenStackOperations.Neutron Security Group Rule Create ${sg_name} direction=ingress ethertype=IPv6 port_range_max=65535 + ... port_range_min=1 protocol=udp + ... AND OpenStackOperations.Neutron Security Group Rule Create ${sg_name} direction=egress ethertype=IPv6 port_range_max=65535 + ... port_range_min=1 protocol=udp Create Neutron Port With Additional Params [Arguments] ${network_name} ${port_name} ${additional_args}=${EMPTY} @@ -1099,8 +1122,7 @@ OpenStack Suite Setup BuiltIn.Set Suite Variable @{tcpdump_port_6653_conn_ids} BuiltIn.Run Keyword If "${PRE_CLEAN_OPENSTACK_ALL}"=="True" OpenStack Cleanup All OpenStackOperations.Add OVS Logging On All OpenStack Nodes - Run_Keyword_If_At_Least_Oxygen Wait Until Keyword Succeeds 60 2 ClusterManagement.Check Status Of Services Is OPERATIONAL @{NETVIRT_DIAG_SERVICES} - Verify Expected Default Tables On Nodes + Validate Deployment OpenStack Suite Teardown [Documentation] Wrapper teardown keyword that can be used in any suite running in an openstack environement @@ -1116,6 +1138,23 @@ OpenStack Suite Teardown : FOR ${i} IN RANGE ${NUM_ODL_SYSTEM} \ KarafKeywords.Issue Command On Karaf Console threads --list | wc -l ${ODL_SYSTEM_${i+1}_IP} +Validate Deployment + [Documentation] Validate the deployment. Examples to validate are verifying default table + ... flows are installed and that the tunnel mesh has been built correctly. + Write To Validate File ----------------------------------------\n${SUITE_NAME}\n + : FOR ${keyword} IN @{VALIDATION_KEYWORDS} + \ ${status} = Builtin.Run Keyword And Return Status ${keyword} + \ BuiltIn.Run Keyword If "${status}" == "FAIL" or "${status}" == "False" BuiltIn.Run Keywords Write To Validate File Failed: ${keyword} + \ ... AND BuiltIn.Fail + \ ... ELSE Write To Validate File Passed: ${keyword} + +Write To Validate File + [Arguments] ${msg} + [Documentation] Write the given ${msg} to ${VALIDATION_FILE}. Create the file if not present. + ${status} = BuiltIn.Run Keyword And Return Status OperatingSystem.File Should Exist ${VALIDATION_FILE} + BuiltIn.Run Keyword If "${status}" == "False" OperatingSystem.Create File ${VALIDATION_FILE} + OperatingSystem.Append To File ${VALIDATION_FILE} ${msg}\n + Copy DHCP Files From Control Node [Documentation] Copy the current DHCP files to the robot vm. The keyword must be called ... after the subnet(s) are created and before the subnet(s) are deleted. @@ -1198,6 +1237,22 @@ Get Network Segmentation Id @{list} = String.Split String ${output} [Return] @{list}[0] +Verify Services + [Documentation] Verify if the services are operational + Wait Until Keyword Succeeds 60 2 ClusterManagement.Check Status Of Services Is OPERATIONAL @{NETVIRT_DIAG_SERVICES} + +Verify Expected Default Tunnels + [Documentation] Verify if the default tunnels are created. + ... SFC jobs currently fail this validation because it uses of-tunnels. + ... This validation will be blocked for NEtvirt SFC jobs until support for of-tunnels + ... added to odltools. + ${check_feature_list} = BuiltIn.Create List odl-netvirt-sfc + ${is_sfc_enabled} = OpenStackOperations.Is Feature Installed features=${check_feature_list} + BuiltIn.Return From Keyword If ${is_sfc_enabled} == ${True} ${True} + BuiltIn.Return From Keyword If ${OS_NODE_CNT} == ${1} ${True} + ${output} = ODLTools.Analyze Tunnels test_name=${SUITE_NAME}.Suite Setup + BuiltIn.Should Contain ${output} All tunnels are up + Verify Expected Default Tables On Nodes [Arguments] ${node_ips}=@{OS_ALL_IPS} [Documentation] Verify if Default Table Entries are programmed on all Nodes