all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* [bug#56813] [PATCH 0/2] Add a test for qemu-guest-agent service
@ 2022-07-28 14:57 Timotej Lazar
  2022-07-28 15:03 ` [bug#56813] [PATCH 1/2] services: qemu-guest-agent: Fix arguments to qemu-ga Timotej Lazar
  2022-08-09 15:23 ` bug#56813: [PATCH 0/2] Add a test for qemu-guest-agent service Ludovic Courtès
  0 siblings, 2 replies; 4+ messages in thread
From: Timotej Lazar @ 2022-07-28 14:57 UTC (permalink / raw)
  To: 56813

Hi,

these patches fix some issues with the QEMU guest agent service, and add
a system test for it. The test runs the service in a marionette VM and
tries communicating with it. For that, I enabled the guest agent serial
device in marionette QEMU options. This change touches all system tests,
but should be harmless.

I’m not sure if it would be better instead to add a keyword argument to
make-marionette for (extra) extra QEMU options. In any case, all tests
that pass on master still pass after this change, at least on x86_64
(most installation tests currently fail here).

Please let me know if I should change or improve anything. Thanks!

Timotej Lazar (2):
  services: qemu-guest-agent: Fix arguments to qemu-ga.
  tests: Add qemu-guest-agent system test.

 gnu/build/marionette.scm        |  5 +-
 gnu/services/virtualization.scm | 12 ++---
 gnu/tests/virtualization.scm    | 84 +++++++++++++++++++++++++++++++++
 3 files changed, 93 insertions(+), 8 deletions(-)

-- 
2.36.1




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

* [bug#56813] [PATCH 1/2] services: qemu-guest-agent: Fix arguments to qemu-ga.
  2022-07-28 14:57 [bug#56813] [PATCH 0/2] Add a test for qemu-guest-agent service Timotej Lazar
@ 2022-07-28 15:03 ` Timotej Lazar
  2022-07-28 15:03   ` [bug#56813] [PATCH 2/2] tests: Add qemu-guest-agent system test Timotej Lazar
  2022-08-09 15:23 ` bug#56813: [PATCH 0/2] Add a test for qemu-guest-agent service Ludovic Courtès
  1 sibling, 1 reply; 4+ messages in thread
From: Timotej Lazar @ 2022-07-28 15:03 UTC (permalink / raw)
  To: 56813; +Cc: Timotej Lazar

Fix the check for empty device path. Do not use --daemonize, since that is
handled by make-forkexec-constructor. Drop the --pidfile option which is
unused without --daemonize.

* gnu/services/virtualization.scm (qemu-guest-agent-shepherd-service): Modify
command arguments.
---
 gnu/services/virtualization.scm | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/gnu/services/virtualization.scm b/gnu/services/virtualization.scm
index 41afe451c1..406752b35c 100644
--- a/gnu/services/virtualization.scm
+++ b/gnu/services/virtualization.scm
@@ -879,13 +879,11 @@ (define (qemu-guest-agent-shepherd-service config)
       (provision '(qemu-guest-agent))
       (documentation "Run the QEMU guest agent.")
       (start #~(make-forkexec-constructor
-                `(,(string-append #$qemu "/bin/qemu-ga") "--daemon"
-                  "--pidfile=/var/run/qemu-ga.pid"
-                  "--statedir=/var/run"
-                  ,@(if #$device
-                        (list (string-append "--path=" #$device))
-                        '()))
-                #:pid-file "/var/run/qemu-ga.pid"
+                `(,(string-append #$qemu "/bin/qemu-ga")
+                  "--statedir" "/var/run"
+                  ,@(if (string-null? #$device)
+                        '()
+                        (list "--path" #$device)))
                 #:log-file "/var/log/qemu-ga.log"))
       (stop #~(make-kill-destructor))))))
 
-- 
2.36.1





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

* [bug#56813] [PATCH 2/2] tests: Add qemu-guest-agent system test.
  2022-07-28 15:03 ` [bug#56813] [PATCH 1/2] services: qemu-guest-agent: Fix arguments to qemu-ga Timotej Lazar
@ 2022-07-28 15:03   ` Timotej Lazar
  0 siblings, 0 replies; 4+ messages in thread
From: Timotej Lazar @ 2022-07-28 15:03 UTC (permalink / raw)
  To: 56813; +Cc: Timotej Lazar

Enable the QEMU guest agent interface in marionette VMs, run the
qemu-guest-agent service in one and try talking to it.

* gnu/build/marionette.scm (make-marionette): Enable the guest agent device.
* gnu/tests/virtualization.scm (run-qemu-guest-agent-test): New procedure.
(%test-qemu-guest-agent): New variable.
---
 gnu/build/marionette.scm     |  5 ++-
 gnu/tests/virtualization.scm | 84 ++++++++++++++++++++++++++++++++++++
 2 files changed, 88 insertions(+), 1 deletion(-)

diff --git a/gnu/build/marionette.scm b/gnu/build/marionette.scm
index 0d2af642c8..2b241d19e8 100644
--- a/gnu/build/marionette.scm
+++ b/gnu/build/marionette.scm
@@ -105,11 +105,14 @@ (define extra-options
           "-monitor" (string-append "unix:" socket-directory "/monitor")
           "-chardev" (string-append "socket,id=repl,path=" socket-directory
                                     "/repl")
+          "-chardev" (string-append "socket,id=qga,server=on,wait=off,path="
+                                    socket-directory "/qemu-ga")
 
           ;; See
           ;; <http://www.linux-kvm.org/page/VMchannel_Requirements#Invocation>.
           "-device" "virtio-serial"
-          "-device" "virtserialport,chardev=repl,name=org.gnu.guix.port.0"))
+          "-device" "virtserialport,chardev=repl,name=org.gnu.guix.port.0"
+          "-device" "virtserialport,chardev=qga,name=org.qemu.guest_agent.0"))
 
   (define (accept* port)
     (match (select (list port) '() (list port) timeout)
diff --git a/gnu/tests/virtualization.scm b/gnu/tests/virtualization.scm
index 299acc4945..4bd56e5d9d 100644
--- a/gnu/tests/virtualization.scm
+++ b/gnu/tests/virtualization.scm
@@ -37,6 +37,7 @@ (define-module (gnu tests virtualization)
   #:use-module (guix records)
   #:use-module (guix store)
   #:export (%test-libvirt
+            %test-qemu-guest-agent
             %test-childhurd))
 
 \f
@@ -115,6 +116,89 @@ (define %test-libvirt
    (description "Connect to the running LIBVIRT service.")
    (value (run-libvirt-test))))
 
+\f
+;;;
+;;; QEMU Guest Agent service.
+;;;
+
+(define %qemu-guest-agent-os
+  (simple-operating-system
+   (service qemu-guest-agent-service-type)))
+
+(define (run-qemu-guest-agent-test)
+  "Run tests in %QEMU-GUEST-AGENT-OS."
+  (define os
+    (marionette-operating-system
+     %qemu-guest-agent-os
+     #:imported-modules '((gnu services herd))))
+
+  (define vm
+    (virtual-machine
+     (operating-system os)
+     (port-forwardings '())))
+
+  (define test
+    (with-imported-modules '((gnu build marionette))
+      #~(begin
+          (use-modules (gnu build marionette)
+                       (ice-9 rdelim)
+                       (srfi srfi-64))
+
+          (define marionette
+            ;; Ensure we look for the socket in the correct place below.
+            (make-marionette (list #$vm) #:socket-directory "/tmp"))
+
+          (define* (try-read port #:optional (attempts 10))
+            ;; Try reading from a port several times before giving up.
+            (cond ((char-ready? port)
+                   (let ((response (read-line port)))
+                     (close-port port)
+                     response))
+                  ((> attempts 1)
+                   (sleep 1)
+                   (try-read port (- attempts 1)))
+                  (else "")))
+
+          (define (run command)
+            ;; Run a QEMU guest agent command and return the response.
+            (let ((s (socket PF_UNIX SOCK_STREAM 0)))
+              (connect s AF_UNIX "/tmp/qemu-ga")
+              (display command s)
+              (try-read s)))
+
+          (test-runner-current (system-test-runner #$output))
+          (test-begin "qemu-guest-agent")
+
+          (test-assert "service running"
+            (marionette-eval
+             '(begin
+                (use-modules (gnu services herd))
+                (match (start-service 'qemu-guest-agent)
+                  (#f #f)
+                  (('service response-parts ...)
+                   (match (assq-ref response-parts 'running)
+                     ((pid) (number? pid))))))
+             marionette))
+
+          (test-equal "ping guest"
+            "{\"return\": {}}"
+            (run "{\"execute\": \"guest-ping\"}"))
+
+          (test-assert "get network interfaces"
+            (string-contains
+             (run "{\"execute\": \"guest-network-get-interfaces\"}")
+             "127.0.0.1"))
+
+          (test-end))))
+
+  (gexp->derivation "qemu-guest-agent-test" test))
+
+(define %test-qemu-guest-agent
+  (system-test
+   (name "qemu-guest-agent")
+   (description "Run commands in a virtual machine using QEMU guest agent.")
+   (value (run-qemu-guest-agent-test))))
+
 \f
 ;;;
 ;;; GNU/Hurd virtual machines, aka. childhurds.
-- 
2.36.1





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

* bug#56813: [PATCH 0/2] Add a test for qemu-guest-agent service
  2022-07-28 14:57 [bug#56813] [PATCH 0/2] Add a test for qemu-guest-agent service Timotej Lazar
  2022-07-28 15:03 ` [bug#56813] [PATCH 1/2] services: qemu-guest-agent: Fix arguments to qemu-ga Timotej Lazar
@ 2022-08-09 15:23 ` Ludovic Courtès
  1 sibling, 0 replies; 4+ messages in thread
From: Ludovic Courtès @ 2022-08-09 15:23 UTC (permalink / raw)
  To: Timotej Lazar; +Cc: 56813-done

Hi Timotej,

Timotej Lazar <timotej.lazar@araneo.si> skribis:

> these patches fix some issues with the QEMU guest agent service, and add
> a system test for it. The test runs the service in a marionette VM and
> tries communicating with it. For that, I enabled the guest agent serial
> device in marionette QEMU options. This change touches all system tests,
> but should be harmless.

Yes, sounds good.

> I’m not sure if it would be better instead to add a keyword argument to
> make-marionette for (extra) extra QEMU options. In any case, all tests
> that pass on master still pass after this change, at least on x86_64
> (most installation tests currently fail here).

Perfect.

>   services: qemu-guest-agent: Fix arguments to qemu-ga.
>   tests: Add qemu-guest-agent system test.

Applied, thanks!

Ludo’.




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

end of thread, other threads:[~2022-08-09 15:24 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-28 14:57 [bug#56813] [PATCH 0/2] Add a test for qemu-guest-agent service Timotej Lazar
2022-07-28 15:03 ` [bug#56813] [PATCH 1/2] services: qemu-guest-agent: Fix arguments to qemu-ga Timotej Lazar
2022-07-28 15:03   ` [bug#56813] [PATCH 2/2] tests: Add qemu-guest-agent system test Timotej Lazar
2022-08-09 15:23 ` bug#56813: [PATCH 0/2] Add a test for qemu-guest-agent service Ludovic Courtès

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

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.