1*** Settings *** 2Documentation Network stack stress tests using "nping" tool. 3 4# This Suite has few testcases which uses nping with ICMP. 5# ICMP creates a raw socket, which requires root privilege/sudo to run tests. 6 7Resource ../lib/resource.robot 8Resource ../lib/bmc_redfish_resource.robot 9Resource ../lib/ipmi_client.robot 10Resource ../lib/bmc_network_security_utils.robot 11 12Library OperatingSystem 13Library String 14Library ../lib/gen_robot_valid.py 15Library ../lib/bmc_network_utils.py 16Library ../lib/ipmi_utils.py 17 18Suite Setup Suite Setup Execution 19 20Force Tags Network_Nping 21 22*** Variables *** 23 24${delay} 1000ms 25${count} 4 26${program_name} nping 27${iterations} 5000 28 29*** Test Cases *** 30 31Send ICMP Timestamp Request 32 [Documentation] Send ICMP packet type 13 and check BMC drops such packets 33 [Tags] Send_ICMP_Timestamp_Request 34 35 # Send ICMP packet type 13 to BMC and check packet loss. 36 ${packet_loss}= Send Network Packets And Get Packet Loss 37 ... ${OPENBMC_HOST} ${count} ${ICMP_PACKETS} ${NETWORK_PORT} ${ICMP_TIMESTAMP_REQUEST} 38 Should Be Equal As Numbers ${packet_loss} 100.00 39 ... msg=FAILURE: BMC is not dropping timestamp request messages. 40 41Send ICMP Netmask Request 42 [Documentation] Send ICMP packet type 17 and check BMC drops such packets 43 [Tags] Send_ICMP_Netmask_Request 44 45 # Send ICMP packet type 17 to BMC and check packet loss. 46 ${packet_loss}= Send Network Packets And Get Packet Loss 47 ... ${OPENBMC_HOST} ${count} ${ICMP_PACKETS} ${NETWORK_PORT} ${ICMP_NETMASK_REQUEST} 48 Should Be Equal As Numbers ${packet_loss} 100.00 49 ... msg=FAILURE: BMC is not dropping netmask request messages. 50 51Send Continuous ICMP Echo Request To BMC And Verify No Packet Loss 52 [Documentation] Send ICMP packet type 8 continuously and check no packets are dropped from BMC 53 [Tags] Send_Continuous_ICMP_Echo_Request_To_BMC_And_Verify_No_Packet_Loss 54 55 # Send ICMP packet type 8 to BMC and check packet loss. 56 ${packet_loss}= Send Network Packets And Get Packet Loss 57 ... ${OPENBMC_HOST} ${iterations} ${ICMP_PACKETS} 58 Should Be Equal As Numbers ${packet_loss} 0.0 59 ... msg=FAILURE: BMC is dropping packets. 60 61Send Network Packets Continuously To Redfish Interface 62 [Documentation] Send network packets continuously to Redfish interface and verify stability. 63 [Tags] Send_Network_Packets_Continuously_To_Redfish_Interface 64 65 # Send large number of packets to Redfish interface. 66 ${packet_loss}= Send Network Packets And Get Packet Loss 67 ... ${OPENBMC_HOST} ${iterations} ${TCP_PACKETS} ${REDFISH_INTERFACE} 68 Should Be Equal As Numbers ${packet_loss} 0.0 69 ... msg=FAILURE: BMC is dropping some packets. 70 71 # Check if Redfish bmcweb server response is functional. 72 Redfish.Login 73 Redfish.Logout 74 75 76Send Network Packets Continuously To IPMI Port 77 [Documentation] Send network packets continuously to IPMI port and verify stability. 78 [Tags] Send_Network_Packets_Continuously_To_IPMI_Port 79 80 # Send large number of packets to IPMI port. 81 ${packet_loss}= Send Network Packets And Get Packet Loss 82 ... ${OPENBMC_HOST} ${iterations} ${TCP_PACKETS} ${IPMI_PORT} 83 Should Be Equal As Numbers ${packet_loss} 0.0 84 ... msg=FAILURE: BMC is dropping some packets. 85 86 # Check if IPMI interface is functional. 87 Run IPMI Standard Command chassis status 88 89 90Send Network Packets Continuously To SSH Port 91 [Documentation] Send network packets continuously to SSH port and verify stability. 92 [Tags] Send_Network_Packets_Continuously_To_SSH_Port 93 94 # Send large number of packets to SSH port. 95 ${packet_loss}= Send Network Packets And Get Packet Loss 96 ... ${OPENBMC_HOST} ${iterations} ${TCP_PACKETS} ${SSH_PORT} 97 Should Be Equal As Numbers ${packet_loss} 0.0 98 ... msg=FAILURE: BMC is dropping some packets. 99 100 # Check if SSH interface is functional. 101 102 SSHLibrary.Open Connection ${OPENBMC_HOST} 103 Open Connection And Log In ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} 104 105 106Flood Redfish Interface With Packets With Flags And Check Stability 107 [Documentation] Send large number of packets with flags to Redfish interface 108 ... and check stability. 109 [Tags] Flood_Redfish_Interface_With_Packets_With_Flags_And_Check_Stability 110 [Template] Send Network Packets With Flags And Verify Stability 111 112 # Target No. Of packets Interface Flags 113 114 # Flood syn packets and check BMC behavior. 115 ${OPENBMC_HOST} ${iterations} ${REDFISH_INTERFACE} ${SYN_PACKETS} 116 117 # Flood reset packets and check BMC behavior. 118 ${OPENBMC_HOST} ${iterations} ${REDFISH_INTERFACE} ${RESET_PACKETS} 119 120 # Flood fin packets and check BMC behavior. 121 ${OPENBMC_HOST} ${iterations} ${REDFISH_INTERFACE} ${FIN_PACKETS} 122 123 # Flood syn ack reset packets and check BMC behavior. 124 ${OPENBMC_HOST} ${iterations} ${REDFISH_INTERFACE} ${SYN_ACK_RESET} 125 126 # Flood packets with all flags and check BMC behavior. 127 ${OPENBMC_HOST} ${iterations} ${REDFISH_INTERFACE} ${ALL_FLAGS} 128 129 130Send Network Packets Continuously To SOL Port 131 [Documentation] Send network packets continuously to SOL port and verify stability. 132 [Tags] Send_Network_Packets_Continuously_To_SOL_Port 133 [Teardown] Run Keywords FFDC On Test Case Fail AND Close all connections 134 135 # Send large number of packets to SOL port. 136 ${packet_loss}= Send Network Packets And Get Packet Loss 137 ... ${OPENBMC_HOST} ${iterations} ${TCP_PACKETS} ${HOST_SOL_PORT} 138 139 # Check if SOL interface is functional. 140 141 SSHLibrary.Open Connection ${OPENBMC_HOST} port=${HOST_SOL_PORT} 142 Verify Interface Stability ${HOST_SOL_PORT} 143 Should Be Equal As Numbers ${packet_loss} 0.0 144 ... msg=FAILURE: BMC is dropping some packets. 145 146 147Send Continuous TCP Connection Requests To Redfish Interface And Check Stability 148 [Documentation] Establish large number of TCP connections to Redfish port (443) 149 ... and check check network responses stability. 150 [Tags] Send_Continuous_TCP_Connection_Requests_To_Redfish_Interface_And_Check_Stability 151 152 # Establish large number of TCP connections to Redfish interface. 153 ${connection_loss}= Establish TCP Connections And Get Connection Failures 154 ... ${OPENBMC_HOST} ${iterations} ${TCP_CONNECTION} ${HTTPS_PORT} 155 156 # Check if Redfish interface is functional. 157 Redfish.Login 158 Redfish.Logout 159 160 # Check if TCP connections dropped. 161 Should Be Equal As Numbers ${connection_loss} 0.0 162 ... msg=FAILURE: BMC is dropping some connections. 163 164 165Send Continuous TCP Connection Requests To IPMI Interface And Check Stability 166 [Documentation] Establish large number of TCP connections to IPMI interface 167 ... and check stability. 168 [Tags] Send_Continuous_TCP_Connection_Requests_To_IPMI_Interface_And_Check_Stability 169 170 # Establish large number of TCP connections to IPMI interface. 171 ${connection_loss}= Establish TCP Connections And Get Connection Failures 172 ... ${OPENBMC_HOST} ${iterations} ${TCP_CONNECTION} ${IPMI_PORT} 173 174 # Check if IPMI interface is functional. 175 Verify IPMI Works 176 177 # Check if TCP/Network connections dropped. 178 Should Be Equal As Numbers ${connection_loss} 0.0 179 ... msg=FAILURE: BMC is dropping connections 180 181 182Send Continuous TCP Connection Requests To SSH Interface And Check Stability 183 [Documentation] Establish large number of TCP connections to SSH interface 184 ... and check stability. 185 [Tags] Send_Continuous_TCP_Connection_Requests_To_SSH_Interface_And_Check_Stability 186 187 # Establish large number of TCP connections to SSH interface. 188 ${connection_loss}= Establish TCP Connections And Get Connection Failures 189 ... ${OPENBMC_HOST} ${iterations} ${TCP_CONNECTION} ${SSH_PORT} 190 191 # Check if SSH interface is functional. 192 Verify Interface Stability ${SSH_PORT} 193 194 # Check if TCP/Network connections dropped. 195 Should Be Equal As Numbers ${connection_loss} 0.0 196 ... msg=FAILURE: BMC is dropping connections 197 198 199*** Keywords *** 200 201Suite Setup Execution 202 [Documentation] Validate the setup. 203 204 Valid Value OPENBMC_HOST 205 Valid Program program_name 206 207 208Verify Interface Stability 209 [Documentation] Verify interface is up and active. 210 [Arguments] ${port} 211 212 # Description of argument(s): 213 # port Network port. 214 215 Run Keyword If ${port} == ${REDFISH_INTERFACE} 216 ... Redfish.Login 217 ... ELSE IF ${port} == ${SSH_PORT} 218 ... Open Connection And Log In ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} 219 ... ELSE IF ${port} == ${IPMI_PORT} 220 ... Run External IPMI Standard Command lan print 221 ... ELSE IF ${port} == ${HOST_SOL_PORT} 222 ... Open Connection And Log In ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} port=${HOST_SOL_PORT} 223 ... ELSE 224 ... Redfish.Login 225 226Establish TCP Connections And Get Connection Failures 227 [Documentation] Establish TCP connections and return nping connection responses. 228 [Arguments] ${target_host} ${num}=${count} ${packet_type}=${TCP_CONNECTION} 229 ... http_port=${80} 230 231 # Description of argument(s): 232 # host The host name or IP address of the target system. 233 # packet_type The type of packets to be sent ("tcp", "udp", "icmp"). 234 # http_port Network port. 235 # num Number of connections to be sent. 236 237 # This keyword expects host, port, type and number of connections to be sent 238 # and rate at which connectionss to be sent, should be given in command line. 239 # By default it sends 4 TCP connections at 1 connection/second. 240 241 ${cmd_buf}= Set Variable --delay ${delay} ${host} -c ${num} --${packet_type} -p ${port} 242 ${nping_result}= Nping ${cmd_buf} 243 [Return] ${nping_result['percent_failed']} 244