[{"id":1761139,"web_url":"http://patchwork.ozlabs.org/comment/1761139/","msgid":"<e5d02327-dcfe-5af9-c036-bd238d1440e6@amsat.org>","list_archive_url":null,"date":"2017-08-31T15:59:00","subject":"Re: [Qemu-devel] [PATCH v5 04/12] tests: Add vm test lib","submitter":{"id":70924,"url":"http://patchwork.ozlabs.org/api/people/70924/","name":"Philippe Mathieu-Daudé","email":"f4bug@amsat.org"},"content":"Hi Fam,\n\nOn 08/31/2017 03:42 AM, Fam Zheng wrote:\n> This is the common code to implement a \"VM test\" to\n> \n>    1) Download and initialize a pre-defined VM that has necessary\n>    dependencies to build QEMU and SSH access.\n\nLooking at this project:\n\nhttps://www.packer.io/docs/builders/qemu.html\n\nMaybe we can have another CI that prepare/upload those images \n(reproducible, easy upgrade version...), and document the build process \nin the JSON instead of the wiki (so the doc is up to date).\n\n> \n>    2) Archive $SRC_PATH to a .tar file.\n> \n>    3) Boot the VM, and pass the source tar file to the guest.\n> \n>    4) SSH into the VM, untar the source tarball, build from the source.\n> \n> Signed-off-by: Fam Zheng <famz@redhat.com>\n> ---\n>   tests/vm/basevm.py | 276 +++++++++++++++++++++++++++++++++++++++++++++++++++++\n>   1 file changed, 276 insertions(+)\n>   create mode 100755 tests/vm/basevm.py\n> \n> diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py\n> new file mode 100755\n> index 0000000000..9db91d61fa\n> --- /dev/null\n> +++ b/tests/vm/basevm.py\n> @@ -0,0 +1,276 @@\n> +#!/usr/bin/env python\n> +#\n> +# VM testing base class\n> +#\n> +# Copyright (C) 2017 Red Hat Inc.\n> +#\n> +# Authors:\n> +#  Fam Zheng <famz@redhat.com>\n> +#\n> +# This work is licensed under the terms of the GNU GPL, version 2.  See\n> +# the COPYING file in the top-level directory.\n> +#\n> +\n> +import os\n> +import sys\n> +import logging\n> +import time\n> +import datetime\n> +sys.path.append(os.path.join(os.path.dirname(__file__), \"..\", \"..\", \"scripts\"))\n> +from qemu import QEMUMachine\n> +import subprocess\n> +import hashlib\n> +import optparse\n> +import atexit\n> +import tempfile\n> +import shutil\n> +import multiprocessing\n> +import traceback\n> +\n> +SSH_KEY = \"\"\"\\\n> +-----BEGIN RSA PRIVATE KEY-----\n> +MIIEowIBAAKCAQEAopAuOlmLV6LVHdFBj8/eeOwI9CqguIJPp7eAQSZvOiB4Ag/R\n> +coEhl/RBbrV5Yc/SmSD4PTpJO/iM10RwliNjDb4a3I8q3sykRJu9c9PI/YsH8WN9\n> ++NH2NjKPtJIcKTu287IM5JYxyB6nDoOzILbTyJ1TDR/xH6qYEfBAyiblggdjcvhA\n> +RTf93QIn39F/xLypXvT1K2O9BJEsnJ8lEUvB2UXhKo/JTfSeZF8wPBeowaP9EONk\n> +7b+nuJOWHGg68Ji6wVi62tjwl2Szch6lxIhZBpnV7QNRKMfYHP6eIyF4pusazzZq\n> +Telsq6xI2ghecWLzb/MF5A+rklsGx2FNuJSAJwIDAQABAoIBAHHi4o/8VZNivz0x\n> +cWXn8erzKV6tUoWQvW85Lj/2RiwJvSlsnYZDkx5af1CpEE2HA/pFT8PNRqsd+MWC\n> +7AEy710cVsM4BYerBFYQaYxwzblaoojo88LSjVPw3h5Z0iLM8+IMVd36nwuc9dpE\n> +R8TecMZ1+U4Tl6BgqkK+9xToZRdPKdjS8L5MoFhGN+xY0vRbbJbGaV9Q0IHxLBkB\n> +rEBV7T1mUynneCHRUQlJQEwJmKpT8MH3IjsUXlG5YvnuuvcQJSNTaW2iDLxuOKp8\n> +cxW8+qL88zpb1D5dppoIu6rlrugN0azSq70ruFJQPc/A8GQrDKoGgRQiagxNY3u+\n> +vHZzXlECgYEA0dKO3gfkSxsDBb94sQwskMScqLhcKhztEa8kPxTx6Yqh+x8/scx3\n> +XhJyOt669P8U1v8a/2Al+s81oZzzfQSzO1Q7gEwSrgBcRMSIoRBUw9uYcy02ngb/\n> +j/ng3DGivfJztjjiSJwb46FHkJ2JR8mF2UisC6UMXk3NgFY/3vWQx78CgYEAxlcG\n> +T3hfSWSmTgKRczMJuHQOX9ULfTBIqwP5VqkkkiavzigGRirzb5lgnmuTSPTpF0LB\n> +XVPjR2M4q+7gzP0Dca3pocrvLEoxjwIKnCbYKnyyvnUoE9qHv4Kr+vDbgWpa2LXG\n> +JbLmE7tgTCIp20jOPPT4xuDvlbzQZBJ5qCQSoZkCgYEAgrotSSihlCnAOFSTXbu4\n> +CHp3IKe8xIBBNENq0eK61kcJpOxTQvOha3sSsJsU4JAM6+cFaxb8kseHIqonCj1j\n> +bhOM/uJmwQJ4el/4wGDsbxriYOBKpyq1D38gGhDS1IW6kk3erl6VAb36WJ/OaGum\n> +eTpN9vNeQWM4Jj2WjdNx4QECgYAwTdd6mU1TmZCrJRL5ZG+0nYc2rbMrnQvFoqUi\n> +BvWiJovggHzur90zy73tNzPaq9Ls2FQxf5G1vCN8NCRJqEEjeYCR59OSDMu/EXc2\n> +CnvQ9SevHOdS1oEDEjcCWZCMFzPi3XpRih1gptzQDe31uuiHjf3cqcGPzTlPdfRt\n> +D8P92QKBgC4UaBvIRwREVJsdZzpIzm224Bpe8LOmA7DeTnjlT0b3lkGiBJ36/Q0p\n> +VhYh/6cjX4/iuIs7gJbGon7B+YPB8scmOi3fj0+nkJAONue1mMfBNkba6qQTc6Y2\n> +5mEKw2/O7/JpND7ucU3OK9plcw/qnrWDgHxl0Iz95+OzUIIagxne\n> +-----END RSA PRIVATE KEY-----\n> +\"\"\"\n> +SSH_PUB_KEY = \"\"\"\\\n> +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCikC46WYtXotUd0UGPz9547Aj0KqC4gk+nt4BBJm86IHgCD9FygSGX9EFutXlhz9KZIPg9Okk7+IzXRHCWI2MNvhrcjyrezKREm71z08j9iwfxY3340fY2Mo+0khwpO7bzsgzkljHIHqcOg7MgttPInVMNH/EfqpgR8EDKJuWCB2Ny+EBFN/3dAiff0X/EvKle9PUrY70EkSycnyURS8HZReEqj8lN9J5kXzA8F6jBo/0Q42Ttv6e4k5YcaDrwmLrBWLra2PCXZLNyHqXEiFkGmdXtA1Eox9gc/p4jIXim6xrPNmpN6WyrrEjaCF5xYvNv8wXkD6uSWwbHYU24lIAn qemu-vm-key\n> +\"\"\"\n> +\n> +class BaseVM(object):\n> +    GUEST_USER = \"qemu\"\n> +    GUEST_PASS = \"qemupass\"\n> +    ROOT_PASS = \"qemupass\"\n> +\n> +    # The script to run in the guest that builds QEMU\n> +    BUILD_SCRIPT = \"\"\n> +    # The guest name, to be overridden by subclasses\n> +    name = \"#base\"\n> +    def __init__(self, debug=False, vcpus=None):\n> +        self._guest = None\n> +        self._tmpdir = tempfile.mkdtemp(prefix=\"vm-test-\", suffix=\".tmp\", dir=\".\")\n> +        atexit.register(shutil.rmtree, self._tmpdir)\n> +\n> +        self._ssh_key_file = os.path.join(self._tmpdir, \"id_rsa\")\n> +        open(self._ssh_key_file, \"w\").write(SSH_KEY)\n> +        subprocess.check_call([\"chmod\", \"600\", self._ssh_key_file])\n> +\n> +        self._ssh_pub_key_file = os.path.join(self._tmpdir, \"id_rsa.pub\")\n> +        open(self._ssh_pub_key_file, \"w\").write(SSH_PUB_KEY)\n> +\n> +        self.debug = debug\n> +        self._stderr = sys.stderr\n> +        self._devnull = open(\"/dev/null\", \"w\")\n> +        if self.debug:\n> +            self._stdout = sys.stdout\n> +        else:\n> +            self._stdout = self._devnull\n> +        self._args = [ \\\n> +            \"-nodefaults\", \"-m\", \"2G\",\n> +            \"-cpu\", \"host\",\n> +            \"-netdev\", \"user,id=vnet,hostfwd=:0.0.0.0:0-:22\",\n> +            \"-device\", \"virtio-net-pci,netdev=vnet\",\n> +            \"-vnc\", \":0,to=20\",\n> +            \"-serial\", \"file:%s\" % os.path.join(self._tmpdir, \"serial.out\")]\n> +        if vcpus:\n> +            self._args += [\"-smp\", str(vcpus)]\n> +        if os.access(\"/dev/kvm\", os.R_OK | os.W_OK):\n> +            self._args += [\"-enable-kvm\"]\n> +        else:\n> +            logging.info(\"KVM not available, not using -enable-kvm\")\n> +        self._data_args = []\n> +\n> +    def _download_with_cache(self, url, sha256sum=None):\n> +        def check_sha256sum(fname):\n> +            if not sha256sum:\n> +                return True\n> +            checksum = subprocess.check_output([\"sha256sum\", fname]).split()[0]\n> +            return sha256sum == checksum\n> +\n> +        cache_dir = os.path.expanduser(\"~/.cache/qemu-vm/download\")\n> +        if not os.path.exists(cache_dir):\n> +            os.makedirs(cache_dir)\n> +        fname = os.path.join(cache_dir, hashlib.sha1(url).hexdigest())\n> +        if os.path.exists(fname) and check_sha256sum(fname):\n> +            return fname\n> +        logging.debug(\"Downloading %s to %s...\", url, fname)\n> +        subprocess.check_call([\"wget\", \"-c\", url, \"-O\", fname + \".download\"],\n> +                              stdout=self._stdout, stderr=self._stderr)\n> +        os.rename(fname + \".download\", fname)\n> +        return fname\n> +\n> +    def _ssh_do(self, user, cmd, check, interactive=False):\n> +        ssh_cmd = [\"ssh\", \"-q\",\n> +                   \"-o\", \"StrictHostKeyChecking=no\",\n> +                   \"-o\", \"UserKnownHostsFile=/dev/null\",\n> +                   \"-o\", \"ConnectTimeout=1\",\n> +                   \"-p\", self.ssh_port, \"-i\", self._ssh_key_file]\n> +        if interactive:\n> +            ssh_cmd += ['-t']\n> +        assert not isinstance(cmd, str)\n> +        ssh_cmd += [\"%s@127.0.0.1\" % user] + list(cmd)\n> +        logging.debug(\"ssh_cmd: %s\", \" \".join(ssh_cmd))\n> +        r = subprocess.call(ssh_cmd,\n> +                            stdin=sys.stdin if interactive else self._devnull,\n> +                            stdout=sys.stdout if interactive else self._stdout,\n> +                            stderr=sys.stderr if interactive else self._stderr)\n> +        if check and r != 0:\n> +            raise Exception(\"SSH command failed: %s\" % cmd)\n> +        return r\n> +\n> +    def ssh(self, *cmd):\n> +        return self._ssh_do(self.GUEST_USER, cmd, False)\n> +\n> +    def ssh_interactive(self, *cmd):\n> +        return self._ssh_do(self.GUEST_USER, cmd, False, True)\n> +\n> +    def ssh_root(self, *cmd):\n> +        return self._ssh_do(\"root\", cmd, False)\n> +\n> +    def ssh_check(self, *cmd):\n> +        self._ssh_do(self.GUEST_USER, cmd, True)\n> +\n> +    def ssh_root_check(self, *cmd):\n> +        self._ssh_do(\"root\", cmd, True)\n> +\n> +    def build_image(self, img):\n> +        raise NotImplementedError\n> +\n> +    def add_source_dir(self, src_dir):\n> +        name = \"data-\" + hashlib.sha1(src_dir).hexdigest()[:5]\n> +        tarfile = os.path.join(self._tmpdir, name + \".tar\")\n> +        logging.debug(\"Creating archive %s for src_dir dir: %s\", tarfile, src_dir)\n> +        subprocess.check_call([\"./scripts/archive-source.sh\", tarfile],\n> +                              cwd=src_dir, stdin=self._devnull,\n> +                              stdout=self._stdout, stderr=self._stderr)\n> +        self._data_args += [\"-drive\",\n> +                            \"file=%s,if=none,id=%s,cache=writeback,format=raw\" % \\\n> +                                    (tarfile, name),\n> +                            \"-device\",\n> +                            \"virtio-blk,drive=%s,serial=%s,bootindex=1\" % (name, name)]\n> +\n> +    def boot(self, img, extra_args=[]):\n> +        args = self._args + [\n> +            \"-device\", \"VGA\",\n> +            \"-drive\", \"file=%s,if=none,id=drive0,cache=writeback\" % img,\n> +            \"-device\", \"virtio-blk,drive=drive0,bootindex=0\"]\n> +        args += self._data_args + extra_args\n> +        logging.debug(\"QEMU args: %s\", \" \".join(args))\n> +        guest = QEMUMachine(binary=os.environ.get(\"QEMU\", \"qemu-system-x86_64\"),\n> +                            args=args)\n> +        guest.launch()\n> +        atexit.register(self.shutdown)\n> +        self._guest = guest\n> +        usernet_info = guest.qmp(\"human-monitor-command\",\n> +                                 command_line=\"info usernet\")\n> +        self.ssh_port = None\n> +        for l in usernet_info[\"return\"].splitlines():\n> +            fields = l.split()\n> +            if \"TCP[HOST_FORWARD]\" in fields and \"22\" in fields:\n> +                self.ssh_port = l.split()[3]\n> +        if not self.ssh_port:\n> +            raise Exception(\"Cannot find ssh port from 'info usernet':\\n%s\" % \\\n> +                            usernet_info)\n> +\n> +    def wait_ssh(self, seconds=120):\n> +        starttime = datetime.datetime.now()\n> +        guest_up = False\n> +        while (datetime.datetime.now() - starttime).total_seconds() < seconds:\n> +            if self.ssh(\"exit 0\") == 0:\n> +                guest_up = True\n> +                break\n> +            time.sleep(1)\n> +        if not guest_up:\n> +            raise Exception(\"Timeout while waiting for guest ssh\")\n> +\n> +    def shutdown(self):\n> +        self._guest.shutdown()\n> +\n> +    def wait(self):\n> +        self._guest.wait()\n> +\n> +    def qmp(self, *args, **kwargs):\n> +        return self._guest.qmp(*args, **kwargs)\n> +\n> +def parse_args(vm_name):\n> +    parser = optparse.OptionParser(description=\"\"\"\n> +    VM test utility.  Exit codes: 0 = success, 1 = command line error, 2 = environment initialization failed, 3 = test command failed\"\"\")\n> +    parser.add_option(\"--debug\", \"-D\", action=\"store_true\",\n> +                      help=\"enable debug output\")\n> +    parser.add_option(\"--image\", \"-i\", default=\"%s.img\" % vm_name,\n> +                      help=\"image file name\")\n> +    parser.add_option(\"--force\", \"-f\", action=\"store_true\",\n> +                      help=\"force build image even if image exists\")\n> +    parser.add_option(\"--jobs\", type=int, default=multiprocessing.cpu_count() / 2,\n> +                      help=\"number of virtual CPUs\")\n> +    parser.add_option(\"--build-image\", \"-b\", action=\"store_true\",\n> +                      help=\"build image\")\n> +    parser.add_option(\"--build-qemu\",\n> +                      help=\"build QEMU from source in guest\")\n> +    parser.add_option(\"--interactive\", \"-I\", action=\"store_true\",\n> +                      help=\"Interactively run command\")\n> +    parser.disable_interspersed_args()\n> +    return parser.parse_args()\n> +\n> +def main(vmcls):\n> +    try:\n> +        args, argv = parse_args(vmcls.name)\n> +        if not argv and not args.build_qemu and not args.build_image:\n> +            print \"Nothing to do?\"\n> +            return 1\n> +        if args.debug:\n> +            logging.getLogger().setLevel(logging.DEBUG)\n> +        vm = vmcls(debug=args.debug, vcpus=args.jobs)\n> +        if args.build_image:\n> +            if os.path.exists(args.image) and not args.force:\n> +                sys.stderr.writelines([\"Image file exists: %s\\n\" % args.image,\n> +                                      \"Use --force option to overwrite\\n\"])\n> +                return 1\n> +            return vm.build_image(args.image)\n> +        if args.build_qemu:\n> +            vm.add_source_dir(args.build_qemu)\n> +            cmd = [vm.BUILD_SCRIPT.format(\n> +                   configure_opts = \" \".join(argv),\n> +                   jobs=args.jobs)]\n> +        else:\n> +            cmd = argv\n> +        vm.boot(args.image + \",snapshot=on\")\n> +        vm.wait_ssh()\n> +    except Exception as e:\n> +        if isinstance(e, SystemExit) and e.code == 0:\n> +            return 0\n> +        sys.stderr.write(\"Failed to prepare guest environment\\n\")\n> +        traceback.print_exc()\n> +        return 2\n> +\n> +    if args.interactive:\n> +        if vm.ssh_interactive(*cmd) == 0:\n> +            return 0\n> +        vm.ssh_interactive()\n> +        return 3\n> +    else:\n> +        if vm.ssh(*cmd) != 0:\n> +            return 3\n>","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"IuL+wPq7\"; dkim-atps=neutral"],"Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xjnBV24rLz9sD9\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri,  1 Sep 2017 01:59:41 +1000 (AEST)","from localhost ([::1]:56406 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dnRsZ-0001E5-FD\n\tfor incoming@patchwork.ozlabs.org; Thu, 31 Aug 2017 11:59:39 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:43154)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <philippe.mathieu.daude@gmail.com>)\n\tid 1dnRs8-0001Du-WB\n\tfor qemu-devel@nongnu.org; Thu, 31 Aug 2017 11:59:18 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <philippe.mathieu.daude@gmail.com>)\n\tid 1dnRs3-0008ND-Cs\n\tfor qemu-devel@nongnu.org; Thu, 31 Aug 2017 11:59:13 -0400","from mail-qt0-x234.google.com ([2607:f8b0:400d:c0d::234]:38320)\n\tby eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16)\n\t(Exim 4.71) (envelope-from <philippe.mathieu.daude@gmail.com>)\n\tid 1dnRs3-0008Mv-7P\n\tfor qemu-devel@nongnu.org; Thu, 31 Aug 2017 11:59:07 -0400","by mail-qt0-x234.google.com with SMTP id w42so128150qtg.5\n\tfor <qemu-devel@nongnu.org>; Thu, 31 Aug 2017 08:59:07 -0700 (PDT)","from [192.168.1.124] ([190.177.172.146])\n\tby smtp.gmail.com with ESMTPSA id\n\tt6sm5677209qkd.68.2017.08.31.08.59.01\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tThu, 31 Aug 2017 08:59:05 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;\n\th=sender:subject:to:cc:references:from:message-id:date:user-agent\n\t:mime-version:in-reply-to:content-language:content-transfer-encoding; \n\tbh=kWfs1EaYSnpJKv2H5nCa6PXkiUSLe5k412p0k/ctZ/I=;\n\tb=IuL+wPq7ipdnZP0KRcepaMEUdiBsPK3OMc+i+qRDWEGLhqYPt3OjyQ2xBKo8+OkEVv\n\tReKJrKZlBwLkv7YQ9PZcWKeSYxg9AQxmYV9JAX5wI+RcBdzsEUU0IVbia+BHl8ylqyQo\n\tvkM3JglrOr7PlwfPPZfzQ0A1e8j2gLjzm0ozzmLSsFplSGQtk0JZ3LCrbW16BpvZsxYh\n\t7P7a2+TD0CKWwHewFRJXp11fHIJH2FcEMlT80f9sQJdzz8HiNN41w4cBpzhUs6Thu0vn\n\tdmS1CL53dOx2FESp9fmLR46HRZz5zJCdMxqK9VTkkvHkaR22q++Vv0zCqqGoZ3tcwO4K\n\tlGUQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:sender:subject:to:cc:references:from:message-id\n\t:date:user-agent:mime-version:in-reply-to:content-language\n\t:content-transfer-encoding;\n\tbh=kWfs1EaYSnpJKv2H5nCa6PXkiUSLe5k412p0k/ctZ/I=;\n\tb=HEKD37F7fVrq2Cw1HL8Uk/3Om3FDKho4sYTnvyjrV1hTUO+TyQ5ZF1d1ylVBhaDbk/\n\tUQ4vleE8z7hJiv+BfzZWzkoiMwe3JuNTsI5iFXlcVIfpzL4Es4sT38kcqDARQ8bMS2Ls\n\tvB2e7SkxN2Y5kVIuQGJNBX3jqHeGvUpf8RcNlOXtr9B8hGCTL2WLRqlO+V8C633zpkt1\n\tw2FD42urLAl5o1V/7Z6qbuNfiga0Y3qJoW2bTeo08sHG4Ag5ASONgDiaMXnutR/ejdDs\n\t/m6PRMRpwIkM3Tq2xM55cXO5KnEQYqQY4LNjmAWptqNnrotswBG7Rq7GM2meWX0/TBDR\n\tYxig==","X-Gm-Message-State":"AHYfb5hLv9h0Miqv9GF0RHHOmMgQtnoms7ZsCLfDXQJ5HSgpOaN3izNa\n\tdmrwai6AibDGjQ==","X-Google-Smtp-Source":"ADKCNb6avWoayKQilnsi6PD3mVk3U/oz40Ci39zagfDwaJ8m0al2ZV9CeDixlXhdZLL0697JVLzXnA==","X-Received":"by 10.200.49.9 with SMTP id g9mr7429787qtb.19.1504195146376;\n\tThu, 31 Aug 2017 08:59:06 -0700 (PDT)","To":"Fam Zheng <famz@redhat.com>, qemu-devel@nongnu.org","References":"<20170831064302.14427-1-famz@redhat.com>\n\t<20170831064302.14427-5-famz@redhat.com>","From":"=?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <f4bug@amsat.org>","Message-ID":"<e5d02327-dcfe-5af9-c036-bd238d1440e6@amsat.org>","Date":"Thu, 31 Aug 2017 12:59:00 -0300","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101\n\tThunderbird/52.3.0","MIME-Version":"1.0","In-Reply-To":"<20170831064302.14427-5-famz@redhat.com>","Content-Type":"text/plain; charset=utf-8; format=flowed","Content-Language":"en-US","Content-Transfer-Encoding":"7bit","X-detected-operating-system":"by eggs.gnu.org: Genre and OS details not\n\trecognized.","X-Received-From":"2607:f8b0:400d:c0d::234","Subject":"Re: [Qemu-devel] [PATCH v5 04/12] tests: Add vm test lib","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<http://lists.nongnu.org/archive/html/qemu-devel/>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Cc":"Peter Maydell <peter.maydell@linaro.org>, Kamil Rytarowski\n\t<kamil@netbsd.org>, stefanha@redhat.com, Cleber Rosa <crosa@redhat.com>,\n\tpbonzini@redhat.com, =?utf-8?q?Alex_Benn=C3=A9e?=\n\t<alex.bennee@linaro.org>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"}},{"id":1761520,"web_url":"http://patchwork.ozlabs.org/comment/1761520/","msgid":"<20170901083938.GD4330@lemon.lan>","list_archive_url":null,"date":"2017-09-01T08:39:38","subject":"Re: [Qemu-devel] [PATCH v5 04/12] tests: Add vm test lib","submitter":{"id":24872,"url":"http://patchwork.ozlabs.org/api/people/24872/","name":"Fam Zheng","email":"famz@redhat.com"},"content":"On Thu, 08/31 12:59, Philippe Mathieu-Daudé wrote:\n> Hi Fam,\n> \n> On 08/31/2017 03:42 AM, Fam Zheng wrote:\n> > This is the common code to implement a \"VM test\" to\n> > \n> >    1) Download and initialize a pre-defined VM that has necessary\n> >    dependencies to build QEMU and SSH access.\n> \n> Looking at this project:\n> \n> https://www.packer.io/docs/builders/qemu.html\n> \n> Maybe we can have another CI that prepare/upload those images (reproducible,\n> easy upgrade version...), and document the build process in the JSON instead\n> of the wiki (so the doc is up to date).\n\nThanks for the pointer, looks interesting. The json files can be committed to\nQEMU if we go that way. Though I'm not very convinced by the \"screen capture\"\nstyle automation that is used by the *BSD user recipes I've found with google.\nIt would be good if *BSD can have cloud-init or kickstart -alike automation,\nwith those we don't even need Packer.\n\nFam","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","ext-mx09.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com","ext-mx09.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=famz@redhat.com"],"Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xkCNv59b6z9t2d\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri,  1 Sep 2017 18:40:14 +1000 (AEST)","from localhost ([::1]:52723 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dnhUq-000828-45\n\tfor incoming@patchwork.ozlabs.org; Fri, 01 Sep 2017 04:40:12 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:47685)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <famz@redhat.com>) id 1dnhUT-00080W-AN\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 04:39:54 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <famz@redhat.com>) id 1dnhUP-0002KM-Di\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 04:39:49 -0400","from mx1.redhat.com ([209.132.183.28]:43636)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <famz@redhat.com>) id 1dnhUP-0002K8-7l\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 04:39:45 -0400","from smtp.corp.redhat.com\n\t(int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id E91474E028;\n\tFri,  1 Sep 2017 08:39:43 +0000 (UTC)","from localhost (ovpn-12-135.pek2.redhat.com [10.72.12.135])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id 01D287E2D7;\n\tFri,  1 Sep 2017 08:39:40 +0000 (UTC)"],"DMARC-Filter":"OpenDMARC Filter v1.3.2 mx1.redhat.com E91474E028","Date":"Fri, 1 Sep 2017 16:39:38 +0800","From":"Fam Zheng <famz@redhat.com>","To":"Philippe =?iso-8859-1?q?Mathieu-Daud=E9?= <f4bug@amsat.org>","Message-ID":"<20170901083938.GD4330@lemon.lan>","References":"<20170831064302.14427-1-famz@redhat.com>\n\t<20170831064302.14427-5-famz@redhat.com>\n\t<e5d02327-dcfe-5af9-c036-bd238d1440e6@amsat.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=iso-8859-1","Content-Disposition":"inline","In-Reply-To":"<e5d02327-dcfe-5af9-c036-bd238d1440e6@amsat.org>","User-Agent":"Mutt/1.8.3 (2017-05-23)","X-Scanned-By":"MIMEDefang 2.79 on 10.5.11.12","X-Greylist":"Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.38]);\n\tFri, 01 Sep 2017 08:39:44 +0000 (UTC)","Content-Transfer-Encoding":"quoted-printable","X-detected-operating-system":"by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]","X-Received-From":"209.132.183.28","Subject":"Re: [Qemu-devel] [PATCH v5 04/12] tests: Add vm test lib","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<http://lists.nongnu.org/archive/html/qemu-devel/>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Cc":"Peter Maydell <peter.maydell@linaro.org>, qemu-devel@nongnu.org, Kamil\n\tRytarowski <kamil@netbsd.org>, stefanha@redhat.com, Cleber Rosa\n\t<crosa@redhat.com>, pbonzini@redhat.com, Alex =?iso-8859-1?q?Benn=E9e?=\n\t<alex.bennee@linaro.org>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"}},{"id":1761539,"web_url":"http://patchwork.ozlabs.org/comment/1761539/","msgid":"<20170901092111.GC31680@redhat.com>","list_archive_url":null,"date":"2017-09-01T09:21:11","subject":"Re: [Qemu-devel] [PATCH v5 04/12] tests: Add vm test lib","submitter":{"id":2694,"url":"http://patchwork.ozlabs.org/api/people/2694/","name":"Daniel P. Berrangé","email":"berrange@redhat.com"},"content":"On Fri, Sep 01, 2017 at 04:39:38PM +0800, Fam Zheng wrote:\n> On Thu, 08/31 12:59, Philippe Mathieu-Daudé wrote:\n> > Hi Fam,\n> > \n> > On 08/31/2017 03:42 AM, Fam Zheng wrote:\n> > > This is the common code to implement a \"VM test\" to\n> > > \n> > >    1) Download and initialize a pre-defined VM that has necessary\n> > >    dependencies to build QEMU and SSH access.\n> > \n> > Looking at this project:\n> > \n> > https://www.packer.io/docs/builders/qemu.html\n> > \n> > Maybe we can have another CI that prepare/upload those images (reproducible,\n> > easy upgrade version...), and document the build process in the JSON instead\n> > of the wiki (so the doc is up to date).\n> \n> Thanks for the pointer, looks interesting. The json files can be committed to\n> QEMU if we go that way. Though I'm not very convinced by the \"screen capture\"\n> style automation that is used by the *BSD user recipes I've found with google.\n> It would be good if *BSD can have cloud-init or kickstart -alike automation,\n> with those we don't even need Packer.\n\nFreeBSD at least supports automation of its installer. eg \n\n  https://github.com/clalancette/oz/blob/master/oz/FreeBSD.py\n\nHaven't found info on other *BSDs though.\n\nRegards,\nDaniel","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","ext-mx02.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com","ext-mx02.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=berrange@redhat.com"],"Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xkDJt3zbTz9s7C\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri,  1 Sep 2017 19:21:50 +1000 (AEST)","from localhost ([::1]:60147 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dni96-0003Ho-NC\n\tfor incoming@patchwork.ozlabs.org; Fri, 01 Sep 2017 05:21:48 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:58752)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <berrange@redhat.com>) id 1dni8i-0003FS-W6\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 05:21:29 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <berrange@redhat.com>) id 1dni8f-0000UR-8o\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 05:21:24 -0400","from mx1.redhat.com ([209.132.183.28]:43780)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <berrange@redhat.com>) id 1dni8f-0000UB-2U\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 05:21:21 -0400","from smtp.corp.redhat.com\n\t(int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id 0E5A9806C0;\n\tFri,  1 Sep 2017 09:21:20 +0000 (UTC)","from redhat.com (unknown [10.42.22.189])\n\tby smtp.corp.redhat.com (Postfix) with ESMTPS id 086227C888;\n\tFri,  1 Sep 2017 09:21:13 +0000 (UTC)"],"DMARC-Filter":"OpenDMARC Filter v1.3.2 mx1.redhat.com 0E5A9806C0","Date":"Fri, 1 Sep 2017 10:21:11 +0100","From":"\"Daniel P. Berrange\" <berrange@redhat.com>","To":"Fam Zheng <famz@redhat.com>","Message-ID":"<20170901092111.GC31680@redhat.com>","References":"<20170831064302.14427-1-famz@redhat.com>\n\t<20170831064302.14427-5-famz@redhat.com>\n\t<e5d02327-dcfe-5af9-c036-bd238d1440e6@amsat.org>\n\t<20170901083938.GD4330@lemon.lan>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20170901083938.GD4330@lemon.lan>","User-Agent":"Mutt/1.8.3 (2017-05-23)","X-Scanned-By":"MIMEDefang 2.79 on 10.5.11.14","X-Greylist":"Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.26]);\n\tFri, 01 Sep 2017 09:21:20 +0000 (UTC)","Content-Transfer-Encoding":"quoted-printable","X-detected-operating-system":"by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]","X-Received-From":"209.132.183.28","Subject":"Re: [Qemu-devel] [PATCH v5 04/12] tests: Add vm test lib","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<http://lists.nongnu.org/archive/html/qemu-devel/>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Reply-To":"\"Daniel P. Berrange\" <berrange@redhat.com>","Cc":"Peter Maydell <peter.maydell@linaro.org>, Philippe =?utf-8?q?Mathieu-D?=\n\t=?utf-8?b?YXVkw6k=?= <f4bug@amsat.org>, qemu-devel@nongnu.org,\n\tKamil Rytarowski <kamil@netbsd.org>, stefanha@redhat.com,\n\tCleber Rosa <crosa@redhat.com>, pbonzini@redhat.com, Alex =?utf-8?q?Be?=\n\t=?utf-8?b?bm7DqWU=?= <alex.bennee@linaro.org>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"}},{"id":1761550,"web_url":"http://patchwork.ozlabs.org/comment/1761550/","msgid":"<f4442a83-2126-224a-ba4e-c6fedc20e984@gmx.com>","list_archive_url":null,"date":"2017-09-01T09:29:03","subject":"Re: [Qemu-devel] [PATCH v5 04/12] tests: Add vm test lib","submitter":{"id":11273,"url":"http://patchwork.ozlabs.org/api/people/11273/","name":"Kamil Rytarowski","email":"n54@gmx.com"},"content":"On 01.09.2017 11:21, Daniel P. Berrange wrote:\n> On Fri, Sep 01, 2017 at 04:39:38PM +0800, Fam Zheng wrote:\n>> On Thu, 08/31 12:59, Philippe Mathieu-Daudé wrote:\n>>> Hi Fam,\n>>>\n>>> On 08/31/2017 03:42 AM, Fam Zheng wrote:\n>>>> This is the common code to implement a \"VM test\" to\n>>>>\n>>>>    1) Download and initialize a pre-defined VM that has necessary\n>>>>    dependencies to build QEMU and SSH access.\n>>>\n>>> Looking at this project:\n>>>\n>>> https://www.packer.io/docs/builders/qemu.html\n>>>\n>>> Maybe we can have another CI that prepare/upload those images (reproducible,\n>>> easy upgrade version...), and document the build process in the JSON instead\n>>> of the wiki (so the doc is up to date).\n>>\n>> Thanks for the pointer, looks interesting. The json files can be committed to\n>> QEMU if we go that way. Though I'm not very convinced by the \"screen capture\"\n>> style automation that is used by the *BSD user recipes I've found with google.\n>> It would be good if *BSD can have cloud-init or kickstart -alike automation,\n>> with those we don't even need Packer.\n> \n> FreeBSD at least supports automation of its installer. eg \n> \n>   https://github.com/clalancette/oz/blob/master/oz/FreeBSD.py\n> \n> Haven't found info on other *BSDs though.\n> \n> Regards,\n> Daniel\n> \n\n\nNetBSD installer does not have scripting as far as I can say, but I\nthink it's waste of time and resources to do it for qemu CI. A single\nimage with BSD images will be supported for at least few years for\nFreeBSD and NetBSD and one year for OpenBSD.","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":"ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xkDjd1YbVz9sPk\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri,  1 Sep 2017 19:39:49 +1000 (AEST)","from localhost ([::1]:60689 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dniQV-00038c-67\n\tfor incoming@patchwork.ozlabs.org; Fri, 01 Sep 2017 05:39:47 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:34819)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from <n54@gmx.com>)\n\tid 1dniQ8-00038N-Ev\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 05:39:25 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <n54@gmx.com>) id 1dniQ5-0007HC-7w\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 05:39:24 -0400","from mout.gmx.net ([212.227.15.19]:51138)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16)\n\t(Exim 4.71) (envelope-from <n54@gmx.com>) id 1dniQ4-0007Go-TQ\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 05:39:21 -0400","from [192.168.1.4] ([185.58.161.191]) by mail.gmx.com (mrgmx002\n\t[212.227.17.184]) with ESMTPSA (Nemesis) id 0Ledpu-1d9gHv2KMg-00qV5I; \n\tFri, 01 Sep 2017 11:39:05 +0200"],"To":"\"Daniel P. Berrange\" <berrange@redhat.com>, Fam Zheng <famz@redhat.com>","References":"<20170831064302.14427-1-famz@redhat.com>\n\t<20170831064302.14427-5-famz@redhat.com>\n\t<e5d02327-dcfe-5af9-c036-bd238d1440e6@amsat.org>\n\t<20170901083938.GD4330@lemon.lan> <20170901092111.GC31680@redhat.com>","From":"Kamil Rytarowski <n54@gmx.com>","Message-ID":"<f4442a83-2126-224a-ba4e-c6fedc20e984@gmx.com>","Date":"Fri, 1 Sep 2017 11:29:03 +0200","User-Agent":"Mozilla/5.0 (X11; NetBSD amd64; rv:52.0) Gecko/20100101\n\tThunderbird/52.1.0","MIME-Version":"1.0","In-Reply-To":"<20170901092111.GC31680@redhat.com>","Content-Type":"multipart/signed; micalg=pgp-sha256;\n\tprotocol=\"application/pgp-signature\";\n\tboundary=\"9jFqqdVaEte2LqSduujgdS8DdLEnIquD3\"","X-Provags-ID":"V03:K0:80L8h0Fk9FPf+t2z2/5nwajuiw7S5s3zcVuhfDkRDPy6Vtd7Ey8\n\thVrcgCz0z65JF986y1Wt7WFn0pnLOZJ/YhEROavyFzAnLSy4AwOxQpj3SET9vvVZ/3fvJxE\n\tqGGOnjGfpohOXtAZ+vNxK4x9q9rdxr4kbKCmEhM3zn9qfO9pNkAMqLFfwqBJ5tVY7nKpiC7\n\tVBeWK35jwrRuMZKWAWq2g==","X-UI-Out-Filterresults":"notjunk:1; V01:K0:7r9aS7R2X9o=:22hqJka9hWgUDmx62ABpqt\n\t1jxrOZzHN2Vrp/HisILgg/ZiF6bKCUAigttpzFXOTvFXxJHJQTzW/TS0EJ0qiTjcP8s346Iro\n\txnpHrQYo1XTpE3LfB9bXDuN731jRn8xSStBXtAfUxGU1MzdOhKR1iomnGUq3mcsDvuTb0IKDb\n\tkB8mYxnPC/Af0tl/jRbv+YSCzFonAXAzGCj2DEWzxw5dVOLdZj1o89YCZ/R+j7cAEXR918wBz\n\t9sCAB3p9BpYz/Polim12NEY/e3OtNRIksTBoTo7Za2OWuO3yQb1+SCGvFcw6t8oNTz3RN8FFi\n\tGNc0xc9m60fVPOp2dpO03+Rkq5BqxwQmO84494tr0e7Qn7kdXawOwbnwN6nKJnl/yKcbcYcwT\n\taonchvb6QpWNMR8KW6TL/TzHxcp/hqsn1Vk1hyRPb8EtIJty1B/FZhOAW0OzevILzDWxJNZ44\n\tvl5ozextVZyJYEupRigErMDyjhIsluj5br9NA9DirYEwca6riegK0zNkT5odylBp7F2MoNANn\n\tjvi1+7XeBEoJfpwiBAlh5evBOF0cpVAISb9M1Hxn4pJQNiYY+lvNTw+ArhkF7rE+Kxk3AbNn1\n\t7wxZpUywhtQwUU1wrZTvKoVsYQowXousfB5h0hyG6Zp82R/f49uNNT4q2wx5zqsha5WPQfUw4\n\tloxEEdF/MulpUjTdryLE+tDGzWofdxr8XoEs6J9WB9swE+vX8nQtslpekbSlGbHGKv2SuIK5T\n\tg3HQuY1qVORQ8Jz3yIW4kY1jgdtPU4FP2ttxYjfzPWU3HrYFYbiTQf7qPX+d2S/d5xmQR5gg3\n\tiOi/Gl8jimuevcFAUvW97PAK8o8Lg==","X-detected-operating-system":"by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]","X-Received-From":"212.227.15.19","X-Content-Filtered-By":"Mailman/MimeDel 2.1.21","Subject":"Re: [Qemu-devel] [PATCH v5 04/12] tests: Add vm test lib","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<http://lists.nongnu.org/archive/html/qemu-devel/>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Cc":"Peter Maydell <peter.maydell@linaro.org>, =?utf-8?q?Philippe_Mathieu-D?=\n\t=?utf-8?b?YXVkw6k=?= <f4bug@amsat.org>, qemu-devel@nongnu.org,\n\tKamil Rytarowski <kamil@netbsd.org>, stefanha@redhat.com,\n\tCleber Rosa <crosa@redhat.com>, pbonzini@redhat.com, =?utf-8?q?Alex_B?=\n\t=?utf-8?b?ZW5uw6ll?= <alex.bennee@linaro.org>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"}}]