| 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() |