* [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.