Merge remote branch 'cros/upstream' into autotest-rebase
Merged to upstream trunk@5066, from trunk@4749.
There is no way I could enlist each individual CL from the upstream here since it will blow up the changelist description field.
BUG=
TEST=
Had patched this CL into a fresh cut client to avoid any side effect.
run_remote_test bvt from both emerged location and third_party/autotest/file.
Both test passed!
We should also keep any eye on this to see how it gets propagated into cautotest server.
TBR=dalecurtis
Change-Id: I72f2bc7a9de530178484aea1bfb5ace68bcad029
diff --git a/client/tests/kvm/kvm_preprocessing.py b/client/tests/kvm/kvm_preprocessing.py
index 1ddf99b..4daafec 100644
--- a/client/tests/kvm/kvm_preprocessing.py
+++ b/client/tests/kvm/kvm_preprocessing.py
@@ -50,16 +50,18 @@
@param name: The name of the VM object.
"""
logging.debug("Preprocessing VM '%s'..." % name)
- vm = kvm_utils.env_get_vm(env, name)
+ vm = env.get_vm(name)
if vm:
logging.debug("VM object found in environment")
else:
logging.debug("VM object does not exist; creating it")
vm = kvm_vm.VM(name, params, test.bindir, env.get("address_cache"))
- kvm_utils.env_register_vm(env, name, vm)
+ env.register_vm(name, vm)
start_vm = False
+ migration_mode = params.get("migration_mode", None)
+
if params.get("restart_vm") == "yes":
logging.debug("'restart_vm' specified; (re)starting VM...")
start_vm = True
@@ -72,11 +74,19 @@
logging.debug("VM's qemu command differs from requested one; "
"restarting it...")
start_vm = True
+ elif migration_mode is not None:
+ logging.debug("Starting VM on migration incoming mode...")
+ start_vm = True
if start_vm:
- # Start the VM (or restart it if it's already up)
- if not vm.create(name, params, test.bindir):
- raise error.TestError("Could not start VM")
+ if migration_mode is not None:
+ if not vm.create(name, params, test.bindir,
+ migration_mode=migration_mode):
+ raise error.TestError("Could not start VM for migration")
+ else:
+ # Start the VM (or restart it if it's already up)
+ if not vm.create(name, params, test.bindir):
+ raise error.TestError("Could not start VM")
else:
# Don't start the VM, just update its params
vm.params = params
@@ -112,7 +122,7 @@
@param name: The name of the VM object.
"""
logging.debug("Postprocessing VM '%s'..." % name)
- vm = kvm_utils.env_get_vm(env, name)
+ vm = env.get_vm(name)
if vm:
logging.debug("VM object found in environment")
else:
@@ -173,13 +183,11 @@
@param vm_func: A function to call for each VM.
"""
# Get list of VMs specified for this test
- vm_names = kvm_utils.get_sub_dict_names(params, "vms")
- for vm_name in vm_names:
- vm_params = kvm_utils.get_sub_dict(params, vm_name)
+ for vm_name in params.objects("vms"):
+ vm_params = params.object_params(vm_name)
# Get list of images specified for this VM
- image_names = kvm_utils.get_sub_dict_names(vm_params, "images")
- for image_name in image_names:
- image_params = kvm_utils.get_sub_dict(vm_params, image_name)
+ for image_name in vm_params.objects("images"):
+ image_params = vm_params.object_params(image_name)
# Call image_func for each image
image_func(test, image_params)
# Call vm_func for each vm
@@ -204,7 +212,7 @@
if "tcpdump" not in env and params.get("run_tcpdump", "yes") == "yes":
cmd = "%s -npvi any 'dst port 68'" % kvm_utils.find_command("tcpdump")
logging.debug("Starting tcpdump (%s)...", cmd)
- env["tcpdump"] = kvm_subprocess.kvm_tail(
+ env["tcpdump"] = kvm_subprocess.Tail(
command=cmd,
output_func=_update_address_cache,
output_params=(env["address_cache"],))
@@ -216,7 +224,7 @@
env["tcpdump"].get_output()))
# Destroy and remove VMs that are no longer needed in the environment
- requested_vms = kvm_utils.get_sub_dict_names(params, "vms")
+ requested_vms = params.objects("vms")
for key in env.keys():
vm = env[key]
if not kvm_utils.is_vm(vm):
@@ -330,7 +338,7 @@
if params.get("kill_unresponsive_vms") == "yes":
logging.debug("'kill_unresponsive_vms' specified; killing all VMs "
"that fail to respond to a remote login request...")
- for vm in kvm_utils.env_get_all_vms(env):
+ for vm in env.get_all_vms():
if vm.is_alive():
session = vm.remote_login()
if session:
@@ -342,7 +350,7 @@
kvm_subprocess.kill_tail_threads()
# Terminate tcpdump if no VMs are alive
- living_vms = [vm for vm in kvm_utils.env_get_all_vms(env) if vm.is_alive()]
+ living_vms = [vm for vm in env.get_all_vms() if vm.is_alive()]
if not living_vms and "tcpdump" in env:
env["tcpdump"].close()
del env["tcpdump"]
@@ -362,7 +370,7 @@
@param params: A dict containing all VM and image parameters.
@param env: The environment (a dict-like object).
"""
- params.update(kvm_utils.get_sub_dict(params, "on_error"))
+ params.update(params.object_params("on_error"))
def _update_address_cache(address_cache, line):
@@ -374,9 +382,11 @@
matches = re.findall(r"\w*:\w*:\w*:\w*:\w*:\w*", line)
if matches and address_cache.get("last_seen"):
mac_address = matches[0].lower()
- logging.debug("(address cache) Adding cache entry: %s ---> %s",
- mac_address, address_cache.get("last_seen"))
+ if time.time() - address_cache.get("time_%s" % mac_address, 0) > 5:
+ logging.debug("(address cache) Adding cache entry: %s ---> %s",
+ mac_address, address_cache.get("last_seen"))
address_cache[mac_address] = address_cache.get("last_seen")
+ address_cache["time_%s" % mac_address] = time.time()
del address_cache["last_seen"]
@@ -398,7 +408,7 @@
cache = {}
while True:
- for vm in kvm_utils.env_get_all_vms(env):
+ for vm in env.get_all_vms():
if not vm.is_alive():
continue
try: