blob: fc92791f37ffcae1d7269bde3de52bca5c37be58 [file] [log] [blame]
*** Settings ***
Documentation Network stack stress tests using "nping" tool.
# This Suite has few testcases which uses nping with ICMP.
# ICMP creates a raw socket, which requires root privilege/sudo to run tests.
Resource ../lib/resource.robot
Resource ../lib/bmc_redfish_resource.robot
Resource ../lib/ipmi_client.robot
Resource ../lib/bmc_network_security_utils.robot
Resource ../lib/protocol_setting_utils.robot
Library OperatingSystem
Library String
Library ../lib/gen_robot_valid.py
Library ../lib/bmc_network_utils.py
Library ../lib/ipmi_utils.py
Suite Setup Suite Setup Execution
Test Tags BMC_Network_Security
*** Variables ***
${delay} 1000ms
${count} 4
${program_name} nping
${iterations} 5000
*** Test Cases ***
Send ICMP Timestamp Request
[Documentation] Send ICMP packet type 13 and check BMC drops such packets
[Tags] Send_ICMP_Timestamp_Request
# Send ICMP packet type 13 to BMC and check packet loss.
${packet_loss}= Send Network Packets And Get Packet Loss
... ${OPENBMC_HOST} ${count} ${ICMP_PACKETS} ${NETWORK_PORT} ${ICMP_TIMESTAMP_REQUEST}
Should Be Equal As Numbers ${packet_loss} 100.00
... msg=FAILURE: BMC is not dropping timestamp request messages.
Send ICMP Netmask Request
[Documentation] Send ICMP packet type 17 and check BMC drops such packets
[Tags] Send_ICMP_Netmask_Request
# Send ICMP packet type 17 to BMC and check packet loss.
${packet_loss}= Send Network Packets And Get Packet Loss
... ${OPENBMC_HOST} ${count} ${ICMP_PACKETS} ${NETWORK_PORT} ${ICMP_NETMASK_REQUEST}
Should Be Equal As Numbers ${packet_loss} 100.00
... msg=FAILURE: BMC is not dropping netmask request messages.
Send Continuous ICMP Echo Request To BMC And Verify No Packet Loss
[Documentation] Send ICMP packet type 8 continuously and check no packets are dropped from BMC
[Tags] Send_Continuous_ICMP_Echo_Request_To_BMC_And_Verify_No_Packet_Loss
# Send ICMP packet type 8 to BMC and check packet loss.
${packet_loss}= Send Network Packets And Get Packet Loss
... ${OPENBMC_HOST} ${iterations} ${ICMP_PACKETS}
Should Be Equal As Numbers ${packet_loss} 0.0
... msg=FAILURE: BMC is dropping packets.
Send Network Packets Continuously To Redfish Interface
[Documentation] Send network packets continuously to Redfish interface and verify stability.
[Tags] Send_Network_Packets_Continuously_To_Redfish_Interface
# Send large number of packets to Redfish interface.
${packet_loss}= Send Network Packets And Get Packet Loss
... ${OPENBMC_HOST} ${iterations} ${TCP_PACKETS} ${REDFISH_INTERFACE}
Should Be Equal As Numbers ${packet_loss} 0.0
... msg=FAILURE: BMC is dropping some packets.
# Check if Redfish bmcweb server response is functional.
Redfish.Login
Redfish.Logout
Send Network Packets Continuously To IPMI Port
[Documentation] Send network packets continuously to IPMI port and verify stability.
[Tags] Send_Network_Packets_Continuously_To_IPMI_Port
# Send large number of packets to IPMI port.
${packet_loss}= Send Network Packets And Get Packet Loss
... ${OPENBMC_HOST} ${iterations} ${TCP_PACKETS} ${IPMI_PORT}
Should Be Equal As Numbers ${packet_loss} 0.0
... msg=FAILURE: BMC is dropping some packets.
# Check if IPMI interface is functional.
Run IPMI Standard Command chassis status
Send Network Packets Continuously To SSH Port
[Documentation] Send network packets continuously to SSH port and verify stability.
[Tags] Send_Network_Packets_Continuously_To_SSH_Port
# Send large number of packets to SSH port.
${packet_loss}= Send Network Packets And Get Packet Loss
... ${OPENBMC_HOST} ${iterations} ${TCP_PACKETS} ${SSH_PORT}
Should Be Equal As Numbers ${packet_loss} 0.0
... msg=FAILURE: BMC is dropping some packets.
# Check if SSH interface is functional.
SSHLibrary.Open Connection ${OPENBMC_HOST}
Open Connection And Log In ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD}
Flood Redfish Interface With Packets With Flags And Check Stability
[Documentation] Send large number of packets with flags to Redfish interface
... and check stability.
[Tags] Flood_Redfish_Interface_With_Packets_With_Flags_And_Check_Stability
[Template] Send Network Packets With Flags And Verify Stability
# Target No. Of packets Interface Flags
# Flood syn packets and check BMC behavior.
${OPENBMC_HOST} ${iterations} ${REDFISH_INTERFACE} ${SYN_PACKETS}
# Flood reset packets and check BMC behavior.
${OPENBMC_HOST} ${iterations} ${REDFISH_INTERFACE} ${RESET_PACKETS}
# Flood fin packets and check BMC behavior.
${OPENBMC_HOST} ${iterations} ${REDFISH_INTERFACE} ${FIN_PACKETS}
# Flood syn ack reset packets and check BMC behavior.
${OPENBMC_HOST} ${iterations} ${REDFISH_INTERFACE} ${SYN_ACK_RESET}
# Flood packets with all flags and check BMC behavior.
${OPENBMC_HOST} ${iterations} ${REDFISH_INTERFACE} ${ALL_FLAGS}
Send Network Packets Continuously To SOL Port
[Documentation] Send network packets continuously to SOL port and verify stability.
[Tags] Send_Network_Packets_Continuously_To_SOL_Port
[Teardown] Run Keywords FFDC On Test Case Fail AND Close all connections
# Send large number of packets to SOL port.
${packet_loss}= Send Network Packets And Get Packet Loss
... ${OPENBMC_HOST} ${iterations} ${TCP_PACKETS} ${HOST_SOL_PORT}
# Check if SOL interface is functional.
SSHLibrary.Open Connection ${OPENBMC_HOST} port=${HOST_SOL_PORT}
Verify Interface Stability ${HOST_SOL_PORT}
Should Be Equal As Numbers ${packet_loss} 0.0
... msg=FAILURE: BMC is dropping some packets.
Send Continuous TCP Connection Requests To Redfish Interface And Check Stability
[Documentation] Establish large number of TCP connections to Redfish port (443)
... and check check network responses stability.
[Tags] Send_Continuous_TCP_Connection_Requests_To_Redfish_Interface_And_Check_Stability
# Establish large number of TCP connections to Redfish interface.
${connection_loss}= Establish TCP Connections And Get Connection Failures
... ${OPENBMC_HOST} ${iterations} ${TCP_CONNECTION} ${HTTPS_PORT}
# Check if Redfish interface is functional.
Redfish.Login
Redfish.Logout
# Check if TCP connections dropped.
Should Be Equal As Numbers ${connection_loss} 0.0
... msg=FAILURE: BMC is dropping some connections.
Send Continuous TCP Connection Requests To IPMI Interface And Check Stability
[Documentation] Establish large number of TCP connections to IPMI interface
... and check stability.
[Tags] Send_Continuous_TCP_Connection_Requests_To_IPMI_Interface_And_Check_Stability
# Establish large number of TCP connections to IPMI interface.
${connection_loss}= Establish TCP Connections And Get Connection Failures
... ${OPENBMC_HOST} ${iterations} ${TCP_CONNECTION} ${IPMI_PORT}
# Check if IPMI interface is functional.
Verify IPMI Works lan print
# Check if TCP/Network connections dropped.
Should Be Equal As Numbers ${connection_loss} 0.0
... msg=FAILURE: BMC is dropping connections
Send Continuous TCP Connection Requests To SSH Interface And Check Stability
[Documentation] Establish large number of TCP connections to SSH interface
... and check stability.
[Tags] Send_Continuous_TCP_Connection_Requests_To_SSH_Interface_And_Check_Stability
# Establish large number of TCP connections to SSH interface.
${connection_loss}= Establish TCP Connections And Get Connection Failures
... ${OPENBMC_HOST} ${iterations} ${TCP_CONNECTION} ${SSH_PORT}
# Check if SSH interface is functional.
Verify Interface Stability ${SSH_PORT}
# Check if TCP/Network connections dropped.
Should Be Equal As Numbers ${connection_loss} 0.0
... msg=FAILURE: BMC is dropping connections
*** Keywords ***
Suite Setup Execution
[Documentation] Validate the setup.
Valid Value OPENBMC_HOST
Valid Program program_name
Verify Interface Stability
[Documentation] Verify interface is up and active.
[Arguments] ${port}
# Description of argument(s):
# port Network port.
Run Keyword If ${port} == ${REDFISH_INTERFACE}
... Redfish.Login
... ELSE IF ${port} == ${SSH_PORT}
... Open Connection And Log In ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD}
... ELSE IF ${port} == ${IPMI_PORT}
... Run External IPMI Standard Command lan print
... ELSE IF ${port} == ${HOST_SOL_PORT}
... Open Connection And Log In ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} port=${HOST_SOL_PORT}
... ELSE
... Redfish.Login
Establish TCP Connections And Get Connection Failures
[Documentation] Establish TCP connections and return nping connection responses.
[Arguments] ${target_host} ${num}=${count} ${packet_type}=${TCP_CONNECTION}
... ${http_port}=${80}
# Description of argument(s):
# target_host The host name or IP address of the target system.
# packet_type The type of packets to be sent ("tcp", "udp", "icmp").
# http_port Network port.
# num Number of connections to be sent.
# This keyword expects host, port, type and number of connections to be sent
# and rate at which connectionss to be sent, should be given in command line.
# By default it sends 4 TCP connections at 1 connection/second.
${cmd_buf}= Set Variable --delay ${delay} ${target_host} -c ${num} --${packet_type} -p ${http_port}
${nping_result}= Nping ${cmd_buf}
RETURN ${nping_result['percent_failed']}