print "XXXX start of control file"


def check_kernel(host, version, package):
    if host.run("uname -r").stdout.strip() != version:
        print "XXXX installing kernel on %s" % (host.hostname,)
        package.install(host)

        host.reboot()
        host.wait_up()


def install_kvm(kvm_on_host_var_name, host, source, addresses):
    exec ("global %(var_name)s\n"
            "%(var_name)s= kvm.KVM(host)\n"
            "%(var_name)s.get(source)\n"
            "%(var_name)s.install(addresses)\n" % {"var_name": kvm_on_host_var_name})


print "XXXX creating RemoteHost objects"
remote_host1= hosts.create_host("192.168.1.1")
remote_host2= hosts.create_host("192.168.1.2")

kernel= deb_kernel.DEBKernel()
kernel.get("/home/foo/linux-2.6.21.3-3_2.6.21.3-3_amd64.deb")

host1_command= subcommand(check_kernel, [remote_host1, "2.6.21.3-3", kernel])
host2_command= subcommand(check_kernel, [remote_host2, "2.6.21.3-3", kernel])

parallel([host1_command, host2_command])


print "XXXX installing KVM on %s" % remote_host1.hostname
install_kvm("kvm_on_remote_host1", remote_host1, "/var/local/kvm-33.tar.gz", [{"mac": "02:00:00:00:00:01", "ip" : "10.0.0.1"}])


print "XXXX starting guests"
qemu_options= "-m 256 -hda /var/local/vdisk.img -snapshot"
gserver= hosts.KVMGuest(kvm_on_remote_host1, qemu_options)
gserver.wait_up()


print "XXXX installing autotest"
at= autotest.Autotest()
at.get("/home/foo/autotest/client")
at.install(gserver)
at.install(remote_host2)


print "XXXX running autotest"
server_results_dir= "results-netperf-guest-to-host-far-server"
client_results_dir= "results-netperf-guest-to-host-far-client"

server_control_file= 'job.run_test("netperf2", "%s", "%s", "server", tag="server")' % (sh_escape(gserver.hostname), sh_escape(remote_host2.hostname),)
client_control_file= 'job.run_test("netperf2", "%s", "%s", "client", tag="client")' % (sh_escape(gserver.hostname), sh_escape(remote_host2.hostname),)

server_command= subcommand(at.run, [server_control_file, server_results_dir, gserver])
client_command= subcommand(at.run, [client_control_file, client_results_dir, remote_host2])

parallel([server_command, client_command])


print "XXXX end of control file"
