import logging
from autotest_lib.client.common_lib import error
from autotest_lib.client.virt import virt_test_utils
def run_ping(test, params, env):
"""
Ping the guest with different size of packets.
Packet Loss Test:
1) Ping the guest with different size/interval of packets.
Stress Test:
1) Flood ping the guest.
2) Check if the network is still usable.
@param test: KVM test object.
@param params: Dictionary with the test parameters.
@param env: Dictionary with test environment.
"""
vm = env.get_vm(params["main_vm"])
vm.verify_alive()
session = vm.wait_for_login(timeout=int(params.get("login_timeout", 360)))
counts = params.get("ping_counts", 100)
flood_minutes = float(params.get("flood_minutes", 10))
nics = params.get("nics").split()
strict_check = params.get("strict_check", "no") == "yes"
packet_size = [0, 1, 4, 48, 512, 1440, 1500, 1505, 4054, 4055, 4096, 4192,
8878, 9000, 32767, 65507]
try:
for i, nic in enumerate(nics):
ip = vm.get_address(i)
if not ip:
logging.error("Could not get the ip of nic index %d: %s",
i, nic)
continue
for size in packet_size:
logging.info("Ping with packet size %s", size)
status, output = virt_test_utils.ping(ip, 10,
packetsize=size,
timeout=20)
if strict_check:
ratio = virt_test_utils.get_loss_ratio(output)
if ratio != 0:
raise error.TestFail("Loss ratio is %s for packet size"
" %s" % (ratio, size))
else:
if status != 0:
raise error.TestFail("Ping failed, status: %s,"
" output: %s" % (status, output))
logging.info("Flood ping test")
virt_test_utils.ping(ip, None, flood=True, output_func=None,
timeout=flood_minutes * 60)
logging.info("Final ping test")
status, output = virt_test_utils.ping(ip, counts,
timeout=float(counts) * 1.5)
if strict_check:
ratio = virt_test_utils.get_loss_ratio(output)
if ratio != 0:
raise error.TestFail("Ping failed, status: %s,"
" output: %s" % (status, output))
else:
if status != 0:
raise error.TestFail("Ping returns non-zero value %s" %
output)
finally:
session.close()