All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH  v1 0/6] testing/next (netbsd stuff)
@ 2019-11-04 17:36 Alex Bennée
  2019-11-04 17:36 ` [PATCH v1 1/6] tests/vm: netbsd autoinstall, using serial console Alex Bennée
                   ` (6 more replies)
  0 siblings, 7 replies; 20+ messages in thread
From: Alex Bennée @ 2019-11-04 17:36 UTC (permalink / raw)
  To: qemu-devel
  Cc: fam, berrange, stefanb, Alex Bennée, richard.henderson,
	f4bug, Kamil Rytarowski, cota, stefanha, marcandre.lureau,
	pbonzini, aurelien

Hi,

As we approach hard-freeze I'm trying to temper what comes in through
the testing/next tree. However it would be nice to get the NetBSD upto
speed with the other NetBSDs. Although the serial install is working
well for me this has had a rocky road so if others could also give it
a good testing that would be great. I've also disabled one of the
regular failing tests for non-Linux targets. There are other tests
that still fail however including the tests/test-aio-multithread which
asserts in the async utils around about 20% of the time:

  assertion "QSLIST_EMPTY(&ctx->scheduled_coroutines)" failed: file
    "/home/qemu/qemu-test.nS1czd/src/util/async.c", line 279, function
    "aio_ctx_finalize"

You can run:

  make vm-build-netbsd TARGET_LIST=x86_64-softmmu BUILD_TARGET=check-unit

on repeat to trigger it. If anyone has cycles to work out why please
have a look.

The following patches need review:
   05 - tests only run ipmi bt test if CONFIG_LINUX
   06 - tests vm support sites with sha512 checksums

Alex Bennée (2):
  tests: only run ipmi-bt-test if CONFIG_LINUX
  tests/vm: support sites with sha512 checksums

Gerd Hoffmann (4):
  tests/vm: netbsd autoinstall, using serial console
  tests/vm: add console_consume helper
  tests/vm: use console_consume for netbsd
  tests/vm: update netbsd to version 8.1

 tests/Makefile.include |   2 +
 tests/vm/basevm.py     |  29 ++++++-
 tests/vm/netbsd        | 190 ++++++++++++++++++++++++++++++++++++++---
 3 files changed, 209 insertions(+), 12 deletions(-)

-- 
2.20.1



^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH  v1 1/6] tests/vm: netbsd autoinstall, using serial console
  2019-11-04 17:36 [PATCH v1 0/6] testing/next (netbsd stuff) Alex Bennée
@ 2019-11-04 17:36 ` Alex Bennée
  2019-11-04 18:44   ` Philippe Mathieu-Daudé
                     ` (2 more replies)
  2019-11-04 17:36 ` [PATCH v1 2/6] tests/vm: add console_consume helper Alex Bennée
                   ` (5 subsequent siblings)
  6 siblings, 3 replies; 20+ messages in thread
From: Alex Bennée @ 2019-11-04 17:36 UTC (permalink / raw)
  To: qemu-devel
  Cc: fam, Thomas Huth, berrange, Eduardo Habkost, stefanb,
	Alex Bennée, richard.henderson, f4bug,
	Philippe Mathieu-Daudé,
	Kamil Rytarowski, cota, Gerd Hoffmann, stefanha,
	marcandre.lureau, pbonzini, Kamil Rytarowski, aurelien

From: Gerd Hoffmann <kraxel@redhat.com>

Instead of fetching the prebuilt image from patchew download the install
iso and prepare the image locally.  Install to disk, using the serial
console.  Create qemu user, configure ssh login.  Install packages
needed for qemu builds.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Kamil Rytarowski <n54@gmx.com>
Tested-by: Thomas Huth <thuth@redhat.com>
[ehabkost: rebased to latest qemu.git master]
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Message-Id: <20191031085306.28888-2-kraxel@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/vm/netbsd | 189 +++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 179 insertions(+), 10 deletions(-)

diff --git a/tests/vm/netbsd b/tests/vm/netbsd
index 18aa56ae826..5e04dcd9b16 100755
--- a/tests/vm/netbsd
+++ b/tests/vm/netbsd
@@ -2,10 +2,11 @@
 #
 # NetBSD VM image
 #
-# Copyright 2017 Red Hat Inc.
+# Copyright 2017-2019 Red Hat Inc.
 #
 # Authors:
 #  Fam Zheng <famz@redhat.com>
+#  Gerd Hoffmann <kraxel@redhat.com>
 #
 # This code is licensed under the GPL version 2 or later.  See
 # the COPYING file in the top-level directory.
@@ -13,20 +14,53 @@
 
 import os
 import sys
+import time
 import subprocess
 import basevm
 
 class NetBSDVM(basevm.BaseVM):
     name = "netbsd"
     arch = "x86_64"
+
+    link = "https://cdn.netbsd.org/pub/NetBSD/NetBSD-8.0/images/NetBSD-8.0-amd64.iso"
+    size = "20G"
+    pkgs = [
+        # tools
+        "git-base",
+        "pkgconf",
+        "xz",
+        "python37",
+
+        # gnu tools
+        "bash",
+        "gmake",
+        "gsed",
+        "flex", "bison",
+
+        # libs: crypto
+        "gnutls",
+
+        # libs: images
+        "jpeg",
+        "png",
+
+	# libs: ui
+        "SDL2",
+        "gtk3+",
+        "libxkbcommon",
+    ]
+
     BUILD_SCRIPT = """
         set -e;
-        rm -rf /var/tmp/qemu-test.*
-        cd $(mktemp -d /var/tmp/qemu-test.XXXXXX);
+        rm -rf /home/qemu/qemu-test.*
+        cd $(mktemp -d /home/qemu/qemu-test.XXXXXX);
+        mkdir src build; cd src;
         tar -xf /dev/rld1a;
-        ./configure --python=python2.7 {configure_opts};
+        cd ../build
+        ../src/configure --python=python3.7 --disable-opengl {configure_opts};
         gmake --output-sync -j{jobs} {target} {verbose};
     """
+    poweroff = "/sbin/poweroff"
 
     # Workaround for NetBSD + IPv6 + slirp issues.
     # NetBSD seems to ignore the ICMPv6 Destination Unreachable
@@ -36,14 +70,149 @@ class NetBSDVM(basevm.BaseVM):
     ipv6 = False
 
     def build_image(self, img):
-        cimg = self._download_with_cache("http://download.patchew.org/netbsd-7.1-amd64.img.xz",
-                                         sha256sum='b633d565b0eac3d02015cd0c81440bd8a7a8df8512615ac1ee05d318be015732')
-        img_tmp_xz = img + ".tmp.xz"
+        cimg = self._download_with_cache(self.link)
         img_tmp = img + ".tmp"
-        sys.stderr.write("Extracting the image...\n")
-        subprocess.check_call(["ln", "-f", cimg, img_tmp_xz])
-        subprocess.check_call(["xz", "--keep", "-dvf", img_tmp_xz])
+        iso = img + ".install.iso"
+
+        self.print_step("Preparing iso and disk image")
+        subprocess.check_call(["ln", "-f", cimg, iso])
+        subprocess.check_call(["qemu-img", "create", "-f", "qcow2",
+                               img_tmp, self.size])
+
+        self.print_step("Booting installer")
+        self.boot(img_tmp, extra_args = [
+            "-bios", "pc-bios/bios-256k.bin",
+            "-machine", "graphics=off",
+            "-cdrom", iso
+        ])
+        self.console_init()
+        self.console_wait("Primary Bootstrap")
+
+        # serial console boot menu output doesn't work for some
+        # reason, so we have to fly blind ...
+        for char in list("5consdev com0\n"):
+            time.sleep(0.2)
+            self.console_send(char)
+            self.console_wait("")
+        self.console_wait_send("> ", "boot\n")
+
+        self.console_wait_send("Terminal type",            "xterm\n")
+        self.console_wait_send("a: Installation messages", "a\n")
+        self.console_wait_send("b: US-English",            "b\n")
+        self.console_wait_send("a: Install NetBSD",        "a\n")
+        self.console_wait("Shall we continue?")
+        self.console_wait_send("b: Yes",                   "b\n")
+
+        self.console_wait_send("a: ld0",                   "a\n")
+        self.console_wait_send("a: This is the correct",   "a\n")
+        self.console_wait_send("b: Use the entire disk",   "b\n")
+        self.console_wait("NetBSD bootcode")
+        self.console_wait_send("a: Yes",                   "a\n")
+        self.console_wait_send("b: Use existing part",     "b\n")
+        self.console_wait_send("x: Partition sizes ok",    "x\n")
+        self.console_wait_send("for your NetBSD disk",     "\n")
+        self.console_wait("Shall we continue?")
+        self.console_wait_send("b: Yes",                   "b\n")
+
+        self.console_wait_send("b: Use serial port com0",  "b\n")
+        self.console_wait_send("f: Set serial baud rate",  "f\n")
+        self.console_wait_send("a: 9600",                  "a\n")
+        self.console_wait_send("x: Exit",                  "x\n")
+
+        self.console_wait_send("a: Full installation",     "a\n")
+        self.console_wait_send("a: CD-ROM",                "a\n")
+
+        self.print_step("Installation started now, this will take a while")
+        self.console_wait_send("Hit enter to continue",    "\n")
+
+        self.console_wait_send("d: Change root password",  "d\n")
+        self.console_wait_send("a: Yes",                   "a\n")
+        self.console_wait("New password:")
+        self.console_send("%s\n" % self.ROOT_PASS)
+        self.console_wait("New password:")
+        self.console_send("%s\n" % self.ROOT_PASS)
+        self.console_wait("Retype new password:")
+        self.console_send("%s\n" % self.ROOT_PASS)
+
+        self.console_wait_send("o: Add a user",            "o\n")
+        self.console_wait("username")
+        self.console_send("%s\n" % self.GUEST_USER)
+        self.console_wait("to group wheel")
+        self.console_wait_send("a: Yes",                   "a\n")
+        self.console_wait_send("a: /bin/sh",               "a\n")
+        self.console_wait("New password:")
+        self.console_send("%s\n" % self.GUEST_PASS)
+        self.console_wait("New password:")
+        self.console_send("%s\n" % self.GUEST_PASS)
+        self.console_wait("Retype new password:")
+        self.console_send("%s\n" % self.GUEST_PASS)
+
+        self.console_wait_send("a: Configure network",     "a\n")
+        self.console_wait_send("a: vioif0",                "a\n")
+        self.console_wait_send("Network media type",       "\n")
+        self.console_wait("autoconfiguration")
+        self.console_wait_send("a: Yes",                   "a\n")
+        self.console_wait_send("DNS domain",               "localnet\n")
+        self.console_wait("Are they OK?")
+        self.console_wait_send("a: Yes",                   "a\n")
+        self.console_wait("installed in /etc")
+        self.console_wait_send("a: Yes",                   "a\n")
+
+        self.console_wait_send("e: Enable install",        "e\n")
+        proxy = os.environ.get("http_proxy")
+        if not proxy is None:
+            self.console_wait_send("f: Proxy",             "f\n")
+            self.console_wait("Proxy")
+            self.console_send("%s\n" % proxy)
+        self.console_wait_send("x: Install pkgin",         "x\n")
+        self.console_init(1200)
+        self.console_wait_send("Hit enter to continue", "\n")
+        self.console_init()
+
+        self.console_wait_send("g: Enable sshd",           "g\n")
+        self.console_wait_send("x: Finished conf",         "x\n")
+        self.console_wait_send("Hit enter to continue",    "\n")
+
+        self.print_step("Installation finished, rebooting")
+        self.console_wait_send("d: Reboot the computer",   "d\n")
+
+        # setup qemu user
+        prompt = "localhost$"
+        self.console_ssh_init(prompt, self.GUEST_USER, self.GUEST_PASS)
+        self.console_wait_send(prompt, "exit\n")
+
+        # setup root user
+        prompt = "localhost#"
+        self.console_ssh_init(prompt, "root", self.ROOT_PASS)
+        self.console_sshd_config(prompt)
+
+        # setup virtio-blk #1 (tarfile)
+        self.console_wait(prompt)
+        self.console_send("echo 'chmod 666 /dev/rld1a' >> /etc/rc.local\n")
+
+        # turn off mprotect (conflicts with tcg)
+        self.console_wait(prompt)
+        self.console_send("echo security.pax.mprotect.enabled=0 >> /etc/sysctl.conf\n")
+
+        self.print_step("Configuration finished, rebooting")
+        self.console_wait_send(prompt, "reboot\n")
+        self.console_wait("login:")
+        self.wait_ssh()
+
+        self.print_step("Installing packages")
+        self.ssh_root_check("pkgin update\n")
+        self.ssh_root_check("pkgin -y install %s\n" % " ".join(self.pkgs))
+
+        # shutdown
+        self.ssh_root(self.poweroff)
+        self.console_wait("entering state S5")
+        self.wait()
+
+        if os.path.exists(img):
+            os.remove(img)
         os.rename(img_tmp, img)
+        os.remove(iso)
+        self.print_step("All done")
 
 if __name__ == "__main__":
     sys.exit(basevm.main(NetBSDVM))
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH  v1 2/6] tests/vm: add console_consume helper
  2019-11-04 17:36 [PATCH v1 0/6] testing/next (netbsd stuff) Alex Bennée
  2019-11-04 17:36 ` [PATCH v1 1/6] tests/vm: netbsd autoinstall, using serial console Alex Bennée
@ 2019-11-04 17:36 ` Alex Bennée
  2019-11-04 18:44   ` Philippe Mathieu-Daudé
  2019-11-04 17:36 ` [PATCH v1 3/6] tests/vm: use console_consume for netbsd Alex Bennée
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 20+ messages in thread
From: Alex Bennée @ 2019-11-04 17:36 UTC (permalink / raw)
  To: qemu-devel
  Cc: fam, berrange, stefanb, Alex Bennée, richard.henderson,
	f4bug, Philippe Mathieu-Daudé,
	cota, Gerd Hoffmann, stefanha, marcandre.lureau, pbonzini,
	aurelien

From: Gerd Hoffmann <kraxel@redhat.com>

Helper function to read all console output.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Message-Id: <20191031085306.28888-3-kraxel@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/vm/basevm.py | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py
index 2929de23aa7..086bfb2c66d 100755
--- a/tests/vm/basevm.py
+++ b/tests/vm/basevm.py
@@ -242,6 +242,25 @@ class BaseVM(object):
             return False
         return True
 
+    def console_consume(self):
+        vm = self._guest
+        output = ""
+        vm.console_socket.setblocking(0)
+        while True:
+            try:
+                chars = vm.console_socket.recv(1)
+            except:
+                break
+            output += chars.decode("latin1")
+            if "\r" in output or "\n" in output:
+                lines = re.split("[\r\n]", output)
+                output = lines.pop()
+                if self.debug:
+                    self.console_log("\n".join(lines))
+        if self.debug:
+            self.console_log(output)
+        vm.console_socket.setblocking(1)
+
     def console_send(self, command):
         vm = self._guest
         if self.debug:
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH  v1 3/6] tests/vm: use console_consume for netbsd
  2019-11-04 17:36 [PATCH v1 0/6] testing/next (netbsd stuff) Alex Bennée
  2019-11-04 17:36 ` [PATCH v1 1/6] tests/vm: netbsd autoinstall, using serial console Alex Bennée
  2019-11-04 17:36 ` [PATCH v1 2/6] tests/vm: add console_consume helper Alex Bennée
@ 2019-11-04 17:36 ` Alex Bennée
  2019-11-04 18:46   ` Philippe Mathieu-Daudé
  2019-11-04 17:36 ` [PATCH v1 4/6] tests/vm: update netbsd to version 8.1 Alex Bennée
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 20+ messages in thread
From: Alex Bennée @ 2019-11-04 17:36 UTC (permalink / raw)
  To: qemu-devel
  Cc: fam, berrange, stefanb, Alex Bennée, richard.henderson,
	f4bug, Philippe Mathieu-Daudé,
	Kamil Rytarowski, cota, Gerd Hoffmann, stefanha,
	marcandre.lureau, pbonzini, aurelien

From: Gerd Hoffmann <kraxel@redhat.com>

Use new helper to read all pending console output,
not just a single char.  Unblocks installer boot.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Message-Id: <20191031085306.28888-4-kraxel@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/vm/netbsd | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/vm/netbsd b/tests/vm/netbsd
index 5e04dcd9b16..d1bccccfd01 100755
--- a/tests/vm/netbsd
+++ b/tests/vm/netbsd
@@ -93,7 +93,7 @@ class NetBSDVM(basevm.BaseVM):
         for char in list("5consdev com0\n"):
             time.sleep(0.2)
             self.console_send(char)
-            self.console_wait("")
+            self.console_consume()
         self.console_wait_send("> ", "boot\n")
 
         self.console_wait_send("Terminal type",            "xterm\n")
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH  v1 4/6] tests/vm: update netbsd to version 8.1
  2019-11-04 17:36 [PATCH v1 0/6] testing/next (netbsd stuff) Alex Bennée
                   ` (2 preceding siblings ...)
  2019-11-04 17:36 ` [PATCH v1 3/6] tests/vm: use console_consume for netbsd Alex Bennée
@ 2019-11-04 17:36 ` Alex Bennée
  2019-11-04 18:45   ` Philippe Mathieu-Daudé
  2019-11-04 17:36 ` [PATCH v1 5/6] tests: only run ipmi-bt-test if CONFIG_LINUX Alex Bennée
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 20+ messages in thread
From: Alex Bennée @ 2019-11-04 17:36 UTC (permalink / raw)
  To: qemu-devel
  Cc: fam, berrange, stefanb, Alex Bennée, richard.henderson,
	f4bug, Philippe Mathieu-Daudé,
	Kamil Rytarowski, cota, Gerd Hoffmann, stefanha,
	marcandre.lureau, pbonzini, aurelien

From: Gerd Hoffmann <kraxel@redhat.com>

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Message-Id: <20191031085306.28888-5-kraxel@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/vm/netbsd | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/vm/netbsd b/tests/vm/netbsd
index d1bccccfd01..33779402dd1 100755
--- a/tests/vm/netbsd
+++ b/tests/vm/netbsd
@@ -22,7 +22,7 @@ class NetBSDVM(basevm.BaseVM):
     name = "netbsd"
     arch = "x86_64"
 
-    link = "https://cdn.netbsd.org/pub/NetBSD/NetBSD-8.0/images/NetBSD-8.0-amd64.iso"
+    link = "https://cdn.netbsd.org/pub/NetBSD/NetBSD-8.1/images/NetBSD-8.1-amd64.iso"
     size = "20G"
     pkgs = [
         # tools
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH  v1 5/6] tests: only run ipmi-bt-test if CONFIG_LINUX
  2019-11-04 17:36 [PATCH v1 0/6] testing/next (netbsd stuff) Alex Bennée
                   ` (3 preceding siblings ...)
  2019-11-04 17:36 ` [PATCH v1 4/6] tests/vm: update netbsd to version 8.1 Alex Bennée
@ 2019-11-04 17:36 ` Alex Bennée
  2019-11-04 18:36   ` Corey Minyard
  2019-11-04 17:36 ` [PATCH v1 6/6] tests/vm: support sites with sha512 checksums Alex Bennée
  2019-11-07 17:46 ` [PATCH v1 0/6] testing/next (netbsd stuff) Peter Maydell
  6 siblings, 1 reply; 20+ messages in thread
From: Alex Bennée @ 2019-11-04 17:36 UTC (permalink / raw)
  To: qemu-devel
  Cc: fam, Corey Minyard, berrange, stefanb, Alex Bennée,
	richard.henderson, f4bug, Kamil Rytarowski, cota, stefanha,
	marcandre.lureau, pbonzini, aurelien

This test has been unstable on NetBSD for awhile. It seems the
mechanism used to listen to a random port is a Linux-ism (although a
received wisdom Linux-ism rather than a well documented one). As
working around would add more hard to test complexity to the test I've
gone for the easier option of making it CONFIG_LINUX only.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Cc: Corey Minyard <cminyard@mvista.com>
Cc: Kamil Rytarowski <kamil@netbsd.org>
---
 tests/Makefile.include | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tests/Makefile.include b/tests/Makefile.include
index 534ee487436..8566f5f119d 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -177,7 +177,9 @@ check-qtest-i386-$(CONFIG_SGA) += tests/boot-serial-test$(EXESUF)
 check-qtest-i386-$(CONFIG_SLIRP) += tests/pxe-test$(EXESUF)
 check-qtest-i386-y += tests/rtc-test$(EXESUF)
 check-qtest-i386-$(CONFIG_ISA_IPMI_KCS) += tests/ipmi-kcs-test$(EXESUF)
+ifdef CONFIG_LINUX
 check-qtest-i386-$(CONFIG_ISA_IPMI_BT) += tests/ipmi-bt-test$(EXESUF)
+endif
 check-qtest-i386-y += tests/i440fx-test$(EXESUF)
 check-qtest-i386-y += tests/fw_cfg-test$(EXESUF)
 check-qtest-i386-y += tests/device-plug-test$(EXESUF)
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH  v1 6/6] tests/vm: support sites with sha512 checksums
  2019-11-04 17:36 [PATCH v1 0/6] testing/next (netbsd stuff) Alex Bennée
                   ` (4 preceding siblings ...)
  2019-11-04 17:36 ` [PATCH v1 5/6] tests: only run ipmi-bt-test if CONFIG_LINUX Alex Bennée
@ 2019-11-04 17:36 ` Alex Bennée
  2019-11-04 18:50   ` Philippe Mathieu-Daudé
  2019-11-07 17:46 ` [PATCH v1 0/6] testing/next (netbsd stuff) Peter Maydell
  6 siblings, 1 reply; 20+ messages in thread
From: Alex Bennée @ 2019-11-04 17:36 UTC (permalink / raw)
  To: qemu-devel
  Cc: fam, berrange, stefanb, Alex Bennée, richard.henderson,
	f4bug, Philippe Mathieu-Daudé,
	cota, stefanha, marcandre.lureau, pbonzini, aurelien

The NetBSD project uses SHA512 for its checksums so lets support that
in the download helper.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/vm/basevm.py | 10 ++++++++--
 tests/vm/netbsd    |  3 ++-
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py
index 086bfb2c66d..91a9226026d 100755
--- a/tests/vm/basevm.py
+++ b/tests/vm/basevm.py
@@ -95,19 +95,25 @@ class BaseVM(object):
             logging.info("KVM not available, not using -enable-kvm")
         self._data_args = []
 
-    def _download_with_cache(self, url, sha256sum=None):
+    def _download_with_cache(self, url, sha256sum=None, sha512sum=None):
         def check_sha256sum(fname):
             if not sha256sum:
                 return True
             checksum = subprocess.check_output(["sha256sum", fname]).split()[0]
             return sha256sum == checksum.decode("utf-8")
 
+        def check_sha512sum(fname):
+            if not sha512sum:
+                return True
+            checksum = subprocess.check_output(["sha512sum", fname]).split()[0]
+            return sha512sum == checksum.decode("utf-8")
+
         cache_dir = os.path.expanduser("~/.cache/qemu-vm/download")
         if not os.path.exists(cache_dir):
             os.makedirs(cache_dir)
         fname = os.path.join(cache_dir,
                              hashlib.sha1(url.encode("utf-8")).hexdigest())
-        if os.path.exists(fname) and check_sha256sum(fname):
+        if os.path.exists(fname) and check_sha256sum(fname) and check_sha512sum(fname):
             return fname
         logging.debug("Downloading %s to %s...", url, fname)
         subprocess.check_call(["wget", "-c", url, "-O", fname + ".download"],
diff --git a/tests/vm/netbsd b/tests/vm/netbsd
index 33779402dd1..89390e99fdd 100755
--- a/tests/vm/netbsd
+++ b/tests/vm/netbsd
@@ -23,6 +23,7 @@ class NetBSDVM(basevm.BaseVM):
     arch = "x86_64"
 
     link = "https://cdn.netbsd.org/pub/NetBSD/NetBSD-8.1/images/NetBSD-8.1-amd64.iso"
+    csum = "718f275b7e0879599bdac95630c5e3f2184700032fdb6cdebf3bdd63687898c48ff3f08f57b89f4437a86cdd8ea07c01a39d432dbb37e1e4b008f4985f98da3f"
     size = "20G"
     pkgs = [
         # tools
@@ -70,7 +71,7 @@ class NetBSDVM(basevm.BaseVM):
     ipv6 = False
 
     def build_image(self, img):
-        cimg = self._download_with_cache(self.link)
+        cimg = self._download_with_cache(self.link, sha512sum=self.csum)
         img_tmp = img + ".tmp"
         iso = img + ".install.iso"
 
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 20+ messages in thread

* Re: [PATCH  v1 5/6] tests: only run ipmi-bt-test if CONFIG_LINUX
  2019-11-04 17:36 ` [PATCH v1 5/6] tests: only run ipmi-bt-test if CONFIG_LINUX Alex Bennée
@ 2019-11-04 18:36   ` Corey Minyard
  2019-11-04 19:42     ` Alex Bennée
  0 siblings, 1 reply; 20+ messages in thread
From: Corey Minyard @ 2019-11-04 18:36 UTC (permalink / raw)
  To: Alex Bennée
  Cc: fam, berrange, stefanb, richard.henderson, qemu-devel, f4bug,
	Kamil Rytarowski, cota, stefanha, marcandre.lureau, pbonzini,
	aurelien

On Mon, Nov 04, 2019 at 05:36:53PM +0000, Alex Bennée wrote:
> This test has been unstable on NetBSD for awhile. It seems the
> mechanism used to listen to a random port is a Linux-ism (although a
> received wisdom Linux-ism rather than a well documented one). As

Hmm.  I got reports of this issue and tried to reproduce, but I was
never able to.  I thought I had fixed it via other means, but I had no
idea this was the cause of the issue.

It's not a Linux-ism, I don't think, Richard Steven's "Unix Network
Programming" mentions that is how this works (at least on UDP), and that
is pre-Linux.  That's probably where I got this technique.  I've saw
some web pages mention that Solaris and Windows do it this way.

However, it's not specified, so it's probably a bad idea.  The only way
I can think to do it another way is to remove the bind() call, then it
should randomly assign the port (per the spec, I think).  The trouble
with that is the address will be INADDR_ANY, so it will be bound on
other interfaces besides the loopback, which make me slightly worried
from a security point of view.

I'm ok with this being linux-only, but I'd like to fix it so it works
everywhere.

-corey

> working around would add more hard to test complexity to the test I've
> gone for the easier option of making it CONFIG_LINUX only.
> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Cc: Corey Minyard <cminyard@mvista.com>
> Cc: Kamil Rytarowski <kamil@netbsd.org>
> ---
>  tests/Makefile.include | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/tests/Makefile.include b/tests/Makefile.include
> index 534ee487436..8566f5f119d 100644
> --- a/tests/Makefile.include
> +++ b/tests/Makefile.include
> @@ -177,7 +177,9 @@ check-qtest-i386-$(CONFIG_SGA) += tests/boot-serial-test$(EXESUF)
>  check-qtest-i386-$(CONFIG_SLIRP) += tests/pxe-test$(EXESUF)
>  check-qtest-i386-y += tests/rtc-test$(EXESUF)
>  check-qtest-i386-$(CONFIG_ISA_IPMI_KCS) += tests/ipmi-kcs-test$(EXESUF)
> +ifdef CONFIG_LINUX
>  check-qtest-i386-$(CONFIG_ISA_IPMI_BT) += tests/ipmi-bt-test$(EXESUF)
> +endif
>  check-qtest-i386-y += tests/i440fx-test$(EXESUF)
>  check-qtest-i386-y += tests/fw_cfg-test$(EXESUF)
>  check-qtest-i386-y += tests/device-plug-test$(EXESUF)
> -- 
> 2.20.1
> 


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 1/6] tests/vm: netbsd autoinstall, using serial console
  2019-11-04 17:36 ` [PATCH v1 1/6] tests/vm: netbsd autoinstall, using serial console Alex Bennée
@ 2019-11-04 18:44   ` Philippe Mathieu-Daudé
  2019-11-04 18:57   ` Philippe Mathieu-Daudé
  2019-11-11 14:20   ` Thomas Huth
  2 siblings, 0 replies; 20+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-11-04 18:44 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel
  Cc: fam, Thomas Huth, berrange, Eduardo Habkost, stefanb,
	richard.henderson, f4bug, Kamil Rytarowski, cota, Gerd Hoffmann,
	stefanha, marcandre.lureau, pbonzini, Kamil Rytarowski, aurelien

On 11/4/19 6:36 PM, Alex Bennée wrote:
> From: Gerd Hoffmann <kraxel@redhat.com>
> 
> Instead of fetching the prebuilt image from patchew download the install
> iso and prepare the image locally.  Install to disk, using the serial
> console.  Create qemu user, configure ssh login.  Install packages
> needed for qemu builds.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> Reviewed-by: Kamil Rytarowski <n54@gmx.com>
> Tested-by: Thomas Huth <thuth@redhat.com>
> [ehabkost: rebased to latest qemu.git master]
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> Message-Id: <20191031085306.28888-2-kraxel@redhat.com>

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>

> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   tests/vm/netbsd | 189 +++++++++++++++++++++++++++++++++++++++++++++---
>   1 file changed, 179 insertions(+), 10 deletions(-)
> 
> diff --git a/tests/vm/netbsd b/tests/vm/netbsd
> index 18aa56ae826..5e04dcd9b16 100755
> --- a/tests/vm/netbsd
> +++ b/tests/vm/netbsd
> @@ -2,10 +2,11 @@
>   #
>   # NetBSD VM image
>   #
> -# Copyright 2017 Red Hat Inc.
> +# Copyright 2017-2019 Red Hat Inc.
>   #
>   # Authors:
>   #  Fam Zheng <famz@redhat.com>
> +#  Gerd Hoffmann <kraxel@redhat.com>
>   #
>   # This code is licensed under the GPL version 2 or later.  See
>   # the COPYING file in the top-level directory.
> @@ -13,20 +14,53 @@
>   
>   import os
>   import sys
> +import time
>   import subprocess
>   import basevm
>   
>   class NetBSDVM(basevm.BaseVM):
>       name = "netbsd"
>       arch = "x86_64"
> +
> +    link = "https://cdn.netbsd.org/pub/NetBSD/NetBSD-8.0/images/NetBSD-8.0-amd64.iso"
> +    size = "20G"
> +    pkgs = [
> +        # tools
> +        "git-base",
> +        "pkgconf",
> +        "xz",
> +        "python37",
> +
> +        # gnu tools
> +        "bash",
> +        "gmake",
> +        "gsed",
> +        "flex", "bison",
> +
> +        # libs: crypto
> +        "gnutls",
> +
> +        # libs: images
> +        "jpeg",
> +        "png",
> +
> +	# libs: ui
> +        "SDL2",
> +        "gtk3+",
> +        "libxkbcommon",
> +    ]
> +
>       BUILD_SCRIPT = """
>           set -e;
> -        rm -rf /var/tmp/qemu-test.*
> -        cd $(mktemp -d /var/tmp/qemu-test.XXXXXX);
> +        rm -rf /home/qemu/qemu-test.*
> +        cd $(mktemp -d /home/qemu/qemu-test.XXXXXX);
> +        mkdir src build; cd src;
>           tar -xf /dev/rld1a;
> -        ./configure --python=python2.7 {configure_opts};
> +        cd ../build
> +        ../src/configure --python=python3.7 --disable-opengl {configure_opts};
>           gmake --output-sync -j{jobs} {target} {verbose};
>       """
> +    poweroff = "/sbin/poweroff"
>   
>       # Workaround for NetBSD + IPv6 + slirp issues.
>       # NetBSD seems to ignore the ICMPv6 Destination Unreachable
> @@ -36,14 +70,149 @@ class NetBSDVM(basevm.BaseVM):
>       ipv6 = False
>   
>       def build_image(self, img):
> -        cimg = self._download_with_cache("http://download.patchew.org/netbsd-7.1-amd64.img.xz",
> -                                         sha256sum='b633d565b0eac3d02015cd0c81440bd8a7a8df8512615ac1ee05d318be015732')
> -        img_tmp_xz = img + ".tmp.xz"
> +        cimg = self._download_with_cache(self.link)
>           img_tmp = img + ".tmp"
> -        sys.stderr.write("Extracting the image...\n")
> -        subprocess.check_call(["ln", "-f", cimg, img_tmp_xz])
> -        subprocess.check_call(["xz", "--keep", "-dvf", img_tmp_xz])
> +        iso = img + ".install.iso"
> +
> +        self.print_step("Preparing iso and disk image")
> +        subprocess.check_call(["ln", "-f", cimg, iso])
> +        subprocess.check_call(["qemu-img", "create", "-f", "qcow2",
> +                               img_tmp, self.size])
> +
> +        self.print_step("Booting installer")
> +        self.boot(img_tmp, extra_args = [
> +            "-bios", "pc-bios/bios-256k.bin",
> +            "-machine", "graphics=off",
> +            "-cdrom", iso
> +        ])
> +        self.console_init()
> +        self.console_wait("Primary Bootstrap")
> +
> +        # serial console boot menu output doesn't work for some
> +        # reason, so we have to fly blind ...
> +        for char in list("5consdev com0\n"):
> +            time.sleep(0.2)
> +            self.console_send(char)
> +            self.console_wait("")
> +        self.console_wait_send("> ", "boot\n")
> +
> +        self.console_wait_send("Terminal type",            "xterm\n")
> +        self.console_wait_send("a: Installation messages", "a\n")
> +        self.console_wait_send("b: US-English",            "b\n")
> +        self.console_wait_send("a: Install NetBSD",        "a\n")
> +        self.console_wait("Shall we continue?")
> +        self.console_wait_send("b: Yes",                   "b\n")
> +
> +        self.console_wait_send("a: ld0",                   "a\n")
> +        self.console_wait_send("a: This is the correct",   "a\n")
> +        self.console_wait_send("b: Use the entire disk",   "b\n")
> +        self.console_wait("NetBSD bootcode")
> +        self.console_wait_send("a: Yes",                   "a\n")
> +        self.console_wait_send("b: Use existing part",     "b\n")
> +        self.console_wait_send("x: Partition sizes ok",    "x\n")
> +        self.console_wait_send("for your NetBSD disk",     "\n")
> +        self.console_wait("Shall we continue?")
> +        self.console_wait_send("b: Yes",                   "b\n")
> +
> +        self.console_wait_send("b: Use serial port com0",  "b\n")
> +        self.console_wait_send("f: Set serial baud rate",  "f\n")
> +        self.console_wait_send("a: 9600",                  "a\n")
> +        self.console_wait_send("x: Exit",                  "x\n")
> +
> +        self.console_wait_send("a: Full installation",     "a\n")
> +        self.console_wait_send("a: CD-ROM",                "a\n")
> +
> +        self.print_step("Installation started now, this will take a while")
> +        self.console_wait_send("Hit enter to continue",    "\n")
> +
> +        self.console_wait_send("d: Change root password",  "d\n")
> +        self.console_wait_send("a: Yes",                   "a\n")
> +        self.console_wait("New password:")
> +        self.console_send("%s\n" % self.ROOT_PASS)
> +        self.console_wait("New password:")
> +        self.console_send("%s\n" % self.ROOT_PASS)
> +        self.console_wait("Retype new password:")
> +        self.console_send("%s\n" % self.ROOT_PASS)
> +
> +        self.console_wait_send("o: Add a user",            "o\n")
> +        self.console_wait("username")
> +        self.console_send("%s\n" % self.GUEST_USER)
> +        self.console_wait("to group wheel")
> +        self.console_wait_send("a: Yes",                   "a\n")
> +        self.console_wait_send("a: /bin/sh",               "a\n")
> +        self.console_wait("New password:")
> +        self.console_send("%s\n" % self.GUEST_PASS)
> +        self.console_wait("New password:")
> +        self.console_send("%s\n" % self.GUEST_PASS)
> +        self.console_wait("Retype new password:")
> +        self.console_send("%s\n" % self.GUEST_PASS)
> +
> +        self.console_wait_send("a: Configure network",     "a\n")
> +        self.console_wait_send("a: vioif0",                "a\n")
> +        self.console_wait_send("Network media type",       "\n")
> +        self.console_wait("autoconfiguration")
> +        self.console_wait_send("a: Yes",                   "a\n")
> +        self.console_wait_send("DNS domain",               "localnet\n")
> +        self.console_wait("Are they OK?")
> +        self.console_wait_send("a: Yes",                   "a\n")
> +        self.console_wait("installed in /etc")
> +        self.console_wait_send("a: Yes",                   "a\n")
> +
> +        self.console_wait_send("e: Enable install",        "e\n")
> +        proxy = os.environ.get("http_proxy")
> +        if not proxy is None:
> +            self.console_wait_send("f: Proxy",             "f\n")
> +            self.console_wait("Proxy")
> +            self.console_send("%s\n" % proxy)
> +        self.console_wait_send("x: Install pkgin",         "x\n")
> +        self.console_init(1200)
> +        self.console_wait_send("Hit enter to continue", "\n")
> +        self.console_init()
> +
> +        self.console_wait_send("g: Enable sshd",           "g\n")
> +        self.console_wait_send("x: Finished conf",         "x\n")
> +        self.console_wait_send("Hit enter to continue",    "\n")
> +
> +        self.print_step("Installation finished, rebooting")
> +        self.console_wait_send("d: Reboot the computer",   "d\n")
> +
> +        # setup qemu user
> +        prompt = "localhost$"
> +        self.console_ssh_init(prompt, self.GUEST_USER, self.GUEST_PASS)
> +        self.console_wait_send(prompt, "exit\n")
> +
> +        # setup root user
> +        prompt = "localhost#"
> +        self.console_ssh_init(prompt, "root", self.ROOT_PASS)
> +        self.console_sshd_config(prompt)
> +
> +        # setup virtio-blk #1 (tarfile)
> +        self.console_wait(prompt)
> +        self.console_send("echo 'chmod 666 /dev/rld1a' >> /etc/rc.local\n")
> +
> +        # turn off mprotect (conflicts with tcg)
> +        self.console_wait(prompt)
> +        self.console_send("echo security.pax.mprotect.enabled=0 >> /etc/sysctl.conf\n")
> +
> +        self.print_step("Configuration finished, rebooting")
> +        self.console_wait_send(prompt, "reboot\n")
> +        self.console_wait("login:")
> +        self.wait_ssh()
> +
> +        self.print_step("Installing packages")
> +        self.ssh_root_check("pkgin update\n")
> +        self.ssh_root_check("pkgin -y install %s\n" % " ".join(self.pkgs))
> +
> +        # shutdown
> +        self.ssh_root(self.poweroff)
> +        self.console_wait("entering state S5")
> +        self.wait()
> +
> +        if os.path.exists(img):
> +            os.remove(img)
>           os.rename(img_tmp, img)
> +        os.remove(iso)
> +        self.print_step("All done")
>   
>   if __name__ == "__main__":
>       sys.exit(basevm.main(NetBSDVM))
> 


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 2/6] tests/vm: add console_consume helper
  2019-11-04 17:36 ` [PATCH v1 2/6] tests/vm: add console_consume helper Alex Bennée
@ 2019-11-04 18:44   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 20+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-11-04 18:44 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel
  Cc: fam, berrange, stefanb, richard.henderson, f4bug, cota,
	Gerd Hoffmann, stefanha, marcandre.lureau, pbonzini, aurelien

On 11/4/19 6:36 PM, Alex Bennée wrote:
> From: Gerd Hoffmann <kraxel@redhat.com>
> 
> Helper function to read all console output.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>

> Message-Id: <20191031085306.28888-3-kraxel@redhat.com>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   tests/vm/basevm.py | 19 +++++++++++++++++++
>   1 file changed, 19 insertions(+)
> 
> diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py
> index 2929de23aa7..086bfb2c66d 100755
> --- a/tests/vm/basevm.py
> +++ b/tests/vm/basevm.py
> @@ -242,6 +242,25 @@ class BaseVM(object):
>               return False
>           return True
>   
> +    def console_consume(self):
> +        vm = self._guest
> +        output = ""
> +        vm.console_socket.setblocking(0)
> +        while True:
> +            try:
> +                chars = vm.console_socket.recv(1)
> +            except:
> +                break
> +            output += chars.decode("latin1")
> +            if "\r" in output or "\n" in output:
> +                lines = re.split("[\r\n]", output)
> +                output = lines.pop()
> +                if self.debug:
> +                    self.console_log("\n".join(lines))
> +        if self.debug:
> +            self.console_log(output)
> +        vm.console_socket.setblocking(1)
> +
>       def console_send(self, command):
>           vm = self._guest
>           if self.debug:
> 


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 4/6] tests/vm: update netbsd to version 8.1
  2019-11-04 17:36 ` [PATCH v1 4/6] tests/vm: update netbsd to version 8.1 Alex Bennée
@ 2019-11-04 18:45   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 20+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-11-04 18:45 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel
  Cc: fam, berrange, stefanb, richard.henderson, f4bug,
	Kamil Rytarowski, cota, Gerd Hoffmann, stefanha,
	marcandre.lureau, pbonzini, aurelien

On 11/4/19 6:36 PM, Alex Bennée wrote:
> From: Gerd Hoffmann <kraxel@redhat.com>
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>

> Message-Id: <20191031085306.28888-5-kraxel@redhat.com>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   tests/vm/netbsd | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tests/vm/netbsd b/tests/vm/netbsd
> index d1bccccfd01..33779402dd1 100755
> --- a/tests/vm/netbsd
> +++ b/tests/vm/netbsd
> @@ -22,7 +22,7 @@ class NetBSDVM(basevm.BaseVM):
>       name = "netbsd"
>       arch = "x86_64"
>   
> -    link = "https://cdn.netbsd.org/pub/NetBSD/NetBSD-8.0/images/NetBSD-8.0-amd64.iso"
> +    link = "https://cdn.netbsd.org/pub/NetBSD/NetBSD-8.1/images/NetBSD-8.1-amd64.iso"
>       size = "20G"
>       pkgs = [
>           # tools
> 


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 3/6] tests/vm: use console_consume for netbsd
  2019-11-04 17:36 ` [PATCH v1 3/6] tests/vm: use console_consume for netbsd Alex Bennée
@ 2019-11-04 18:46   ` Philippe Mathieu-Daudé
  2019-11-04 19:43     ` Alex Bennée
  0 siblings, 1 reply; 20+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-11-04 18:46 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel
  Cc: fam, berrange, stefanb, richard.henderson, f4bug,
	Kamil Rytarowski, cota, Gerd Hoffmann, stefanha,
	marcandre.lureau, pbonzini, aurelien

Hi Alex,

On 11/4/19 6:36 PM, Alex Bennée wrote:
> From: Gerd Hoffmann <kraxel@redhat.com>
> 
> Use new helper to read all pending console output,
> not just a single char.  Unblocks installer boot.

Again, why not use this by default for everything?

Anyway,
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>

> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> Message-Id: <20191031085306.28888-4-kraxel@redhat.com>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   tests/vm/netbsd | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tests/vm/netbsd b/tests/vm/netbsd
> index 5e04dcd9b16..d1bccccfd01 100755
> --- a/tests/vm/netbsd
> +++ b/tests/vm/netbsd
> @@ -93,7 +93,7 @@ class NetBSDVM(basevm.BaseVM):
>           for char in list("5consdev com0\n"):
>               time.sleep(0.2)
>               self.console_send(char)
> -            self.console_wait("")
> +            self.console_consume()
>           self.console_wait_send("> ", "boot\n")
>   
>           self.console_wait_send("Terminal type",            "xterm\n")
> 


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 6/6] tests/vm: support sites with sha512 checksums
  2019-11-04 17:36 ` [PATCH v1 6/6] tests/vm: support sites with sha512 checksums Alex Bennée
@ 2019-11-04 18:50   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 20+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-11-04 18:50 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel
  Cc: fam, berrange, stefanb, richard.henderson, f4bug, cota, stefanha,
	marcandre.lureau, pbonzini, aurelien

On 11/4/19 6:36 PM, Alex Bennée wrote:
> The NetBSD project uses SHA512 for its checksums so lets support that
> in the download helper.
> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   tests/vm/basevm.py | 10 ++++++++--
>   tests/vm/netbsd    |  3 ++-
>   2 files changed, 10 insertions(+), 3 deletions(-)
> 
> diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py
> index 086bfb2c66d..91a9226026d 100755
> --- a/tests/vm/basevm.py
> +++ b/tests/vm/basevm.py
> @@ -95,19 +95,25 @@ class BaseVM(object):
>               logging.info("KVM not available, not using -enable-kvm")
>           self._data_args = []
>   
> -    def _download_with_cache(self, url, sha256sum=None):
> +    def _download_with_cache(self, url, sha256sum=None, sha512sum=None):
>           def check_sha256sum(fname):
>               if not sha256sum:
>                   return True
>               checksum = subprocess.check_output(["sha256sum", fname]).split()[0]
>               return sha256sum == checksum.decode("utf-8")
>   
> +        def check_sha512sum(fname):
> +            if not sha512sum:
> +                return True
> +            checksum = subprocess.check_output(["sha512sum", fname]).split()[0]
> +            return sha512sum == checksum.decode("utf-8")
> +
>           cache_dir = os.path.expanduser("~/.cache/qemu-vm/download")
>           if not os.path.exists(cache_dir):
>               os.makedirs(cache_dir)
>           fname = os.path.join(cache_dir,
>                                hashlib.sha1(url.encode("utf-8")).hexdigest())
> -        if os.path.exists(fname) and check_sha256sum(fname):
> +        if os.path.exists(fname) and check_sha256sum(fname) and check_sha512sum(fname):
>               return fname
>           logging.debug("Downloading %s to %s...", url, fname)
>           subprocess.check_call(["wget", "-c", url, "-O", fname + ".download"],
> diff --git a/tests/vm/netbsd b/tests/vm/netbsd
> index 33779402dd1..89390e99fdd 100755
> --- a/tests/vm/netbsd
> +++ b/tests/vm/netbsd
> @@ -23,6 +23,7 @@ class NetBSDVM(basevm.BaseVM):
>       arch = "x86_64"
>   
>       link = "https://cdn.netbsd.org/pub/NetBSD/NetBSD-8.1/images/NetBSD-8.1-amd64.iso"
> +    csum = "718f275b7e0879599bdac95630c5e3f2184700032fdb6cdebf3bdd63687898c48ff3f08f57b89f4437a86cdd8ea07c01a39d432dbb37e1e4b008f4985f98da3f"
>       size = "20G"
>       pkgs = [
>           # tools
> @@ -70,7 +71,7 @@ class NetBSDVM(basevm.BaseVM):
>       ipv6 = False
>   
>       def build_image(self, img):
> -        cimg = self._download_with_cache(self.link)
> +        cimg = self._download_with_cache(self.link, sha512sum=self.csum)
>           img_tmp = img + ".tmp"
>           iso = img + ".install.iso"
>   
> 

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 1/6] tests/vm: netbsd autoinstall, using serial console
  2019-11-04 17:36 ` [PATCH v1 1/6] tests/vm: netbsd autoinstall, using serial console Alex Bennée
  2019-11-04 18:44   ` Philippe Mathieu-Daudé
@ 2019-11-04 18:57   ` Philippe Mathieu-Daudé
  2019-11-11 14:20   ` Thomas Huth
  2 siblings, 0 replies; 20+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-11-04 18:57 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel
  Cc: fam, Thomas Huth, berrange, Eduardo Habkost, stefanb,
	richard.henderson, f4bug, Kamil Rytarowski, cota, Gerd Hoffmann,
	stefanha, marcandre.lureau, pbonzini, Kamil Rytarowski, aurelien

On 11/4/19 6:36 PM, Alex Bennée wrote:
> From: Gerd Hoffmann <kraxel@redhat.com>
> 
> Instead of fetching the prebuilt image from patchew download the install
> iso and prepare the image locally.  Install to disk, using the serial
> console.  Create qemu user, configure ssh login.  Install packages
> needed for qemu builds.

It would be nice to be able to mount some host directory as target 
ccachedir and use ccache within the VM.

> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> Reviewed-by: Kamil Rytarowski <n54@gmx.com>
> Tested-by: Thomas Huth <thuth@redhat.com>
> [ehabkost: rebased to latest qemu.git master]
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> Message-Id: <20191031085306.28888-2-kraxel@redhat.com>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   tests/vm/netbsd | 189 +++++++++++++++++++++++++++++++++++++++++++++---
>   1 file changed, 179 insertions(+), 10 deletions(-)
> 
> diff --git a/tests/vm/netbsd b/tests/vm/netbsd
> index 18aa56ae826..5e04dcd9b16 100755
> --- a/tests/vm/netbsd
> +++ b/tests/vm/netbsd
> @@ -2,10 +2,11 @@
>   #
>   # NetBSD VM image
>   #
> -# Copyright 2017 Red Hat Inc.
> +# Copyright 2017-2019 Red Hat Inc.
>   #
>   # Authors:
>   #  Fam Zheng <famz@redhat.com>
> +#  Gerd Hoffmann <kraxel@redhat.com>
>   #
>   # This code is licensed under the GPL version 2 or later.  See
>   # the COPYING file in the top-level directory.
> @@ -13,20 +14,53 @@
>   
>   import os
>   import sys
> +import time
>   import subprocess
>   import basevm
>   
>   class NetBSDVM(basevm.BaseVM):
>       name = "netbsd"
>       arch = "x86_64"
> +
> +    link = "https://cdn.netbsd.org/pub/NetBSD/NetBSD-8.0/images/NetBSD-8.0-amd64.iso"
> +    size = "20G"
> +    pkgs = [
> +        # tools
> +        "git-base",
> +        "pkgconf",
> +        "xz",
> +        "python37",
> +
> +        # gnu tools
> +        "bash",
> +        "gmake",
> +        "gsed",
> +        "flex", "bison",
> +
> +        # libs: crypto
> +        "gnutls",
> +
> +        # libs: images
> +        "jpeg",
> +        "png",
> +
> +	# libs: ui
> +        "SDL2",
> +        "gtk3+",
> +        "libxkbcommon",
> +    ]
[...]


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH  v1 5/6] tests: only run ipmi-bt-test if CONFIG_LINUX
  2019-11-04 18:36   ` Corey Minyard
@ 2019-11-04 19:42     ` Alex Bennée
  0 siblings, 0 replies; 20+ messages in thread
From: Alex Bennée @ 2019-11-04 19:42 UTC (permalink / raw)
  To: cminyard
  Cc: fam, berrange, stefanb, richard.henderson, qemu-devel, f4bug,
	Kamil Rytarowski, cota, stefanha, marcandre.lureau, pbonzini,
	aurelien


Corey Minyard <cminyard@mvista.com> writes:

> On Mon, Nov 04, 2019 at 05:36:53PM +0000, Alex Bennée wrote:
>> This test has been unstable on NetBSD for awhile. It seems the
>> mechanism used to listen to a random port is a Linux-ism (although a
>> received wisdom Linux-ism rather than a well documented one). As
>
> Hmm.  I got reports of this issue and tried to reproduce, but I was
> never able to.  I thought I had fixed it via other means, but I had no
> idea this was the cause of the issue.
>
> It's not a Linux-ism, I don't think, Richard Steven's "Unix Network
> Programming" mentions that is how this works (at least on UDP), and that
> is pre-Linux.  That's probably where I got this technique.  I've saw
> some web pages mention that Solaris and Windows do it this way.
>
> However, it's not specified, so it's probably a bad idea.  The only way
> I can think to do it another way is to remove the bind() call, then it
> should randomly assign the port (per the spec, I think).  The trouble
> with that is the address will be INADDR_ANY, so it will be bound on
> other interfaces besides the loopback, which make me slightly worried
> from a security point of view.

The other option is to keep the bind but seed it ourselves with a random
port. However then you need to loop until you succeed and avoid locking
up if something fatal has gone wrong.

> I'm ok with this being linux-only, but I'd like to fix it so it works
> everywhere.

One option could be to use the glib networking stuff to set this up.
That has options for creating dynamic ports for incoming connections
although the docs are a bit light on details.
g_socket_listener_add_any_inet_port certainly seems to do the retry
approach (for a weirdly arbitrary 37 times). It leaves the fancy stuff
to a hopefully well tested library although I note QEMU's own use of
g_io APIs seems to be pretty sporadic.


>
> -corey
>
>> working around would add more hard to test complexity to the test I've
>> gone for the easier option of making it CONFIG_LINUX only.
>>
>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>> Cc: Corey Minyard <cminyard@mvista.com>
>> Cc: Kamil Rytarowski <kamil@netbsd.org>
>> ---
>>  tests/Makefile.include | 2 ++
>>  1 file changed, 2 insertions(+)
>>
>> diff --git a/tests/Makefile.include b/tests/Makefile.include
>> index 534ee487436..8566f5f119d 100644
>> --- a/tests/Makefile.include
>> +++ b/tests/Makefile.include
>> @@ -177,7 +177,9 @@ check-qtest-i386-$(CONFIG_SGA) += tests/boot-serial-test$(EXESUF)
>>  check-qtest-i386-$(CONFIG_SLIRP) += tests/pxe-test$(EXESUF)
>>  check-qtest-i386-y += tests/rtc-test$(EXESUF)
>>  check-qtest-i386-$(CONFIG_ISA_IPMI_KCS) += tests/ipmi-kcs-test$(EXESUF)
>> +ifdef CONFIG_LINUX
>>  check-qtest-i386-$(CONFIG_ISA_IPMI_BT) += tests/ipmi-bt-test$(EXESUF)
>> +endif
>>  check-qtest-i386-y += tests/i440fx-test$(EXESUF)
>>  check-qtest-i386-y += tests/fw_cfg-test$(EXESUF)
>>  check-qtest-i386-y += tests/device-plug-test$(EXESUF)
>> --
>> 2.20.1
>>


--
Alex Bennée


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 3/6] tests/vm: use console_consume for netbsd
  2019-11-04 18:46   ` Philippe Mathieu-Daudé
@ 2019-11-04 19:43     ` Alex Bennée
  0 siblings, 0 replies; 20+ messages in thread
From: Alex Bennée @ 2019-11-04 19:43 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé
  Cc: fam, berrange, stefanb, richard.henderson, qemu-devel, f4bug,
	Kamil Rytarowski, cota, Gerd Hoffmann, stefanha,
	marcandre.lureau, pbonzini, aurelien


Philippe Mathieu-Daudé <philmd@redhat.com> writes:

> Hi Alex,
>
> On 11/4/19 6:36 PM, Alex Bennée wrote:
>> From: Gerd Hoffmann <kraxel@redhat.com>
>> Use new helper to read all pending console output,
>> not just a single char.  Unblocks installer boot.
>
> Again, why not use this by default for everything?

I thought that has already got merged via other updates. Will double
check.

>
> Anyway,
> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
>
>> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
>> Message-Id: <20191031085306.28888-4-kraxel@redhat.com>
>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>> ---
>>   tests/vm/netbsd | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>> diff --git a/tests/vm/netbsd b/tests/vm/netbsd
>> index 5e04dcd9b16..d1bccccfd01 100755
>> --- a/tests/vm/netbsd
>> +++ b/tests/vm/netbsd
>> @@ -93,7 +93,7 @@ class NetBSDVM(basevm.BaseVM):
>>           for char in list("5consdev com0\n"):
>>               time.sleep(0.2)
>>               self.console_send(char)
>> -            self.console_wait("")
>> +            self.console_consume()
>>           self.console_wait_send("> ", "boot\n")
>>             self.console_wait_send("Terminal type",
>> "xterm\n")
>>


--
Alex Bennée


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 0/6] testing/next (netbsd stuff)
  2019-11-04 17:36 [PATCH v1 0/6] testing/next (netbsd stuff) Alex Bennée
                   ` (5 preceding siblings ...)
  2019-11-04 17:36 ` [PATCH v1 6/6] tests/vm: support sites with sha512 checksums Alex Bennée
@ 2019-11-07 17:46 ` Peter Maydell
  2019-11-07 17:53   ` Kamil Rytarowski
  6 siblings, 1 reply; 20+ messages in thread
From: Peter Maydell @ 2019-11-07 17:46 UTC (permalink / raw)
  To: Alex Bennée
  Cc: Fam Zheng, Daniel P. Berrange, Stefan Berger, Richard Henderson,
	Philippe Mathieu-Daudé,
	QEMU Developers, Kamil Rytarowski, Emilio G. Cota,
	Stefan Hajnoczi, Paolo Bonzini, Marc-André Lureau,
	Aurelien Jarno

On Mon, 4 Nov 2019 at 17:39, Alex Bennée <alex.bennee@linaro.org> wrote:
>
> Hi,
>
> As we approach hard-freeze I'm trying to temper what comes in through
> the testing/next tree. However it would be nice to get the NetBSD upto
> speed with the other NetBSDs. Although the serial install is working
> well for me this has had a rocky road so if others could also give it
> a good testing that would be great. I've also disabled one of the
> regular failing tests for non-Linux targets. There are other tests
> that still fail however including the tests/test-aio-multithread which
> asserts in the async utils around about 20% of the time:
>
>   assertion "QSLIST_EMPTY(&ctx->scheduled_coroutines)" failed: file
>     "/home/qemu/qemu-test.nS1czd/src/util/async.c", line 279, function
>     "aio_ctx_finalize"

This is unrelated to your NetBSD update in this series -- it's
one of the persistent intermittents I see on the BSDs:
https://lore.kernel.org/qemu-devel/20190916153312.GD25552@stefanha-x1.localdomain/t/

(though the failure rate I see is I think <20%, but I haven't
really carefully measured it.)

thanks
-- PMM


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 0/6] testing/next (netbsd stuff)
  2019-11-07 17:46 ` [PATCH v1 0/6] testing/next (netbsd stuff) Peter Maydell
@ 2019-11-07 17:53   ` Kamil Rytarowski
  2019-11-07 17:58     ` Peter Maydell
  0 siblings, 1 reply; 20+ messages in thread
From: Kamil Rytarowski @ 2019-11-07 17:53 UTC (permalink / raw)
  To: Peter Maydell, Alex Bennée
  Cc: Fam Zheng, Daniel P. Berrange, Stefan Berger, Richard Henderson,
	Philippe Mathieu-Daudé,
	QEMU Developers, Kamil Rytarowski, Emilio G. Cota,
	Stefan Hajnoczi, Paolo Bonzini, Marc-André Lureau,
	Aurelien Jarno


[-- Attachment #1.1: Type: text/plain, Size: 1409 bytes --]

On 07.11.2019 18:46, Peter Maydell wrote:
> On Mon, 4 Nov 2019 at 17:39, Alex Bennée <alex.bennee@linaro.org> wrote:
>>
>> Hi,
>>
>> As we approach hard-freeze I'm trying to temper what comes in through
>> the testing/next tree. However it would be nice to get the NetBSD upto
>> speed with the other NetBSDs. Although the serial install is working
>> well for me this has had a rocky road so if others could also give it
>> a good testing that would be great. I've also disabled one of the
>> regular failing tests for non-Linux targets. There are other tests
>> that still fail however including the tests/test-aio-multithread which
>> asserts in the async utils around about 20% of the time:
>>
>>   assertion "QSLIST_EMPTY(&ctx->scheduled_coroutines)" failed: file
>>     "/home/qemu/qemu-test.nS1czd/src/util/async.c", line 279, function
>>     "aio_ctx_finalize"
> 
> This is unrelated to your NetBSD update in this series -- it's
> one of the persistent intermittents I see on the BSDs:
> https://lore.kernel.org/qemu-devel/20190916153312.GD25552@stefanha-x1.localdomain/t/
> 
> (though the failure rate I see is I think <20%, but I haven't
> really carefully measured it.)
> 
> thanks
> -- PMM
> 

Does this patch rely on AIO API in the kernel? If so than this is
unreliable as of today on NetBSD. We plan to fix it, but there is no
expected time of accomplishment.


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 0/6] testing/next (netbsd stuff)
  2019-11-07 17:53   ` Kamil Rytarowski
@ 2019-11-07 17:58     ` Peter Maydell
  0 siblings, 0 replies; 20+ messages in thread
From: Peter Maydell @ 2019-11-07 17:58 UTC (permalink / raw)
  To: Kamil Rytarowski
  Cc: Fam Zheng, Daniel P. Berrange, Stefan Berger, Richard Henderson,
	QEMU Developers, Philippe Mathieu-Daudé,
	Kamil Rytarowski, Emilio G. Cota, Stefan Hajnoczi, Paolo Bonzini,
	Marc-André Lureau, Alex Bennée, Aurelien Jarno

On Thu, 7 Nov 2019 at 17:54, Kamil Rytarowski <n54@gmx.com> wrote:
>
> On 07.11.2019 18:46, Peter Maydell wrote:
> > On Mon, 4 Nov 2019 at 17:39, Alex Bennée <alex.bennee@linaro.org> wrote:
> >>
> >> Hi,
> >>
> >> As we approach hard-freeze I'm trying to temper what comes in through
> >> the testing/next tree. However it would be nice to get the NetBSD upto
> >> speed with the other NetBSDs. Although the serial install is working
> >> well for me this has had a rocky road so if others could also give it
> >> a good testing that would be great. I've also disabled one of the
> >> regular failing tests for non-Linux targets. There are other tests
> >> that still fail however including the tests/test-aio-multithread which
> >> asserts in the async utils around about 20% of the time:
> >>
> >>   assertion "QSLIST_EMPTY(&ctx->scheduled_coroutines)" failed: file
> >>     "/home/qemu/qemu-test.nS1czd/src/util/async.c", line 279, function
> >>     "aio_ctx_finalize"
> >
> > This is unrelated to your NetBSD update in this series -- it's
> > one of the persistent intermittents I see on the BSDs:
> > https://lore.kernel.org/qemu-devel/20190916153312.GD25552@stefanha-x1.localdomain/t/
> >
> > (though the failure rate I see is I think <20%, but I haven't
> > really carefully measured it.)

> Does this patch rely on AIO API in the kernel? If so than this is
> unreliable as of today on NetBSD. We plan to fix it, but there is no
> expected time of accomplishment.

No, we use our own AIO implementation which puts fds into non-blocking
mode and uses a thread which polls them to identify when they're
ready to actually perform IO (plus a lot of coroutine magic).

thanks
-- PMM


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v1 1/6] tests/vm: netbsd autoinstall, using serial console
  2019-11-04 17:36 ` [PATCH v1 1/6] tests/vm: netbsd autoinstall, using serial console Alex Bennée
  2019-11-04 18:44   ` Philippe Mathieu-Daudé
  2019-11-04 18:57   ` Philippe Mathieu-Daudé
@ 2019-11-11 14:20   ` Thomas Huth
  2 siblings, 0 replies; 20+ messages in thread
From: Thomas Huth @ 2019-11-11 14:20 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel
  Cc: fam, berrange, Eduardo Habkost, stefanb, richard.henderson,
	f4bug, Kamil Rytarowski, cota, Gerd Hoffmann, stefanha, pbonzini,
	marcandre.lureau, Kamil Rytarowski, Philippe Mathieu-Daudé,
	aurelien

On 04/11/2019 18.36, Alex Bennée wrote:
> From: Gerd Hoffmann <kraxel@redhat.com>
> 
> Instead of fetching the prebuilt image from patchew download the install
> iso and prepare the image locally.  Install to disk, using the serial
> console.  Create qemu user, configure ssh login.  Install packages
> needed for qemu builds.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> Reviewed-by: Kamil Rytarowski <n54@gmx.com>
> Tested-by: Thomas Huth <thuth@redhat.com>
> [ehabkost: rebased to latest qemu.git master]
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> Message-Id: <20191031085306.28888-2-kraxel@redhat.com>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>  tests/vm/netbsd | 189 +++++++++++++++++++++++++++++++++++++++++++++---
>  1 file changed, 179 insertions(+), 10 deletions(-)
[...]
> +        # shutdown
> +        self.ssh_root(self.poweroff)
> +        self.console_wait("entering state S5")
> +        self.wait()
> +
> +        if os.path.exists(img):
> +            os.remove(img)

What about removing the above two lines again?
(see commit fcd2060e8efff83b7bde)

 Thomas

>          os.rename(img_tmp, img)
> +        os.remove(iso)
> +        self.print_step("All done")
>  
>  if __name__ == "__main__":
>      sys.exit(basevm.main(NetBSDVM))
> 



^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2019-11-11 14:21 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-04 17:36 [PATCH v1 0/6] testing/next (netbsd stuff) Alex Bennée
2019-11-04 17:36 ` [PATCH v1 1/6] tests/vm: netbsd autoinstall, using serial console Alex Bennée
2019-11-04 18:44   ` Philippe Mathieu-Daudé
2019-11-04 18:57   ` Philippe Mathieu-Daudé
2019-11-11 14:20   ` Thomas Huth
2019-11-04 17:36 ` [PATCH v1 2/6] tests/vm: add console_consume helper Alex Bennée
2019-11-04 18:44   ` Philippe Mathieu-Daudé
2019-11-04 17:36 ` [PATCH v1 3/6] tests/vm: use console_consume for netbsd Alex Bennée
2019-11-04 18:46   ` Philippe Mathieu-Daudé
2019-11-04 19:43     ` Alex Bennée
2019-11-04 17:36 ` [PATCH v1 4/6] tests/vm: update netbsd to version 8.1 Alex Bennée
2019-11-04 18:45   ` Philippe Mathieu-Daudé
2019-11-04 17:36 ` [PATCH v1 5/6] tests: only run ipmi-bt-test if CONFIG_LINUX Alex Bennée
2019-11-04 18:36   ` Corey Minyard
2019-11-04 19:42     ` Alex Bennée
2019-11-04 17:36 ` [PATCH v1 6/6] tests/vm: support sites with sha512 checksums Alex Bennée
2019-11-04 18:50   ` Philippe Mathieu-Daudé
2019-11-07 17:46 ` [PATCH v1 0/6] testing/next (netbsd stuff) Peter Maydell
2019-11-07 17:53   ` Kamil Rytarowski
2019-11-07 17:58     ` Peter Maydell

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.