From: Ján Tomko <jtomko@redhat.com>
Separate the command line building to make it testable.
Signed-off-by: Ján Tomko <jtomko@redhat.com>
---
src/qemu/qemu_passt.c | 38 +++++++++++++++++++++++++++++---------
src/qemu/qemu_passt.h | 5 +++++
2 files changed, 34 insertions(+), 9 deletions(-)
diff --git a/src/qemu/qemu_passt.c b/src/qemu/qemu_passt.c
index fcc34de384..d8e281b7a1 100644
--- a/src/qemu/qemu_passt.c
+++ b/src/qemu/qemu_passt.c
@@ -194,15 +194,15 @@ qemuPasstPrepareVhostUser(virDomainObj *vm,
net->data.vhostuser->data.nix.reconnect.timeout = QEMU_PASST_RECONNECT_TIMEOUT;
}
-int
-qemuPasstStart(virDomainObj *vm,
- virDomainNetDef *net)
+virCommand *
+qemuPasstBuildCommand(char **socketName,
+ char **pidfileRet,
+ virDomainObj *vm,
+ virDomainNetDef *net)
{
- qemuDomainObjPrivate *priv = vm->privateData;
- virQEMUDriver *driver = priv->driver;
g_autofree char *passtSocketName = qemuPasstCreateSocketPath(vm, net);
- g_autoptr(virCommand) cmd = NULL;
g_autofree char *pidfile = qemuPasstCreatePidFilename(vm, net);
+ g_autoptr(virCommand) cmd = NULL;
size_t i;
cmd = virCommandNew(PASST);
@@ -238,7 +238,7 @@ qemuPasstStart(virDomainObj *vm,
* a single IPv4 and single IPv6 address
*/
if (!(addr = virSocketAddrFormat(&ip->address)))
- return -1;
+ return NULL;
virCommandAddArgList(cmd, "--address", addr, NULL);
@@ -266,14 +266,14 @@ qemuPasstStart(virDomainObj *vm,
/* validation guarantees this will never happen */
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Invalid portForward proto value %1$u"), pf->proto);
- return -1;
+ return NULL;
}
if (VIR_SOCKET_ADDR_VALID(&pf->address)) {
g_autofree char *addr = NULL;
if (!(addr = virSocketAddrFormat(&pf->address)))
- return -1;
+ return NULL;
virBufferAddStr(&buf, addr);
emitsep = true;
@@ -317,6 +317,26 @@ qemuPasstStart(virDomainObj *vm,
virCommandAddArg(cmd, virBufferCurrentContent(&buf));
}
+ if (socketName)
+ *socketName = g_steal_pointer(&passtSocketName);
+ if (pidfileRet)
+ *pidfileRet = g_steal_pointer(&pidfile);
+
+ return g_steal_pointer(&cmd);
+}
+
+int
+qemuPasstStart(virDomainObj *vm,
+ virDomainNetDef *net)
+{
+ qemuDomainObjPrivate *priv = vm->privateData;
+ g_autofree char *passtSocketName = NULL;
+ g_autofree char *pidfile = NULL;
+ virQEMUDriver *driver = priv->driver;
+ g_autoptr(virCommand) cmd = NULL;
+
+ if (!(cmd = qemuPasstBuildCommand(&passtSocketName, &pidfile, vm, net)))
+ return -1;
if (qemuExtDeviceLogCommand(driver, vm, cmd, "passt") < 0)
return -1;
diff --git a/src/qemu/qemu_passt.h b/src/qemu/qemu_passt.h
index ea545ccf38..e16d4c1119 100644
--- a/src/qemu/qemu_passt.h
+++ b/src/qemu/qemu_passt.h
@@ -27,6 +27,11 @@ qemuPasstAddNetProps(virDomainObj *vm,
virDomainNetDef *net,
virJSONValue **netprops);
+virCommand *qemuPasstBuildCommand(char **socketName,
+ char **pidfileRet,
+ virDomainObj *vm,
+ virDomainNetDef *net);
+
int qemuPasstStart(virDomainObj *vm,
virDomainNetDef *net);
--
2.50.1
On 9/9/25 8:05 AM, Ján Tomko via Devel wrote:
> From: Ján Tomko <jtomko@redhat.com>
>
> Separate the command line building to make it testable.
>
> Signed-off-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: Laine Stump <laine@redhat.com>
> ---
> src/qemu/qemu_passt.c | 38 +++++++++++++++++++++++++++++---------
> src/qemu/qemu_passt.h | 5 +++++
> 2 files changed, 34 insertions(+), 9 deletions(-)
>
> diff --git a/src/qemu/qemu_passt.c b/src/qemu/qemu_passt.c
> index fcc34de384..d8e281b7a1 100644
> --- a/src/qemu/qemu_passt.c
> +++ b/src/qemu/qemu_passt.c
> @@ -194,15 +194,15 @@ qemuPasstPrepareVhostUser(virDomainObj *vm,
> net->data.vhostuser->data.nix.reconnect.timeout = QEMU_PASST_RECONNECT_TIMEOUT;
> }
>
> -int
> -qemuPasstStart(virDomainObj *vm,
> - virDomainNetDef *net)
> +virCommand *
> +qemuPasstBuildCommand(char **socketName,
> + char **pidfileRet,
> + virDomainObj *vm,
> + virDomainNetDef *net)
> {
> - qemuDomainObjPrivate *priv = vm->privateData;
> - virQEMUDriver *driver = priv->driver;
> g_autofree char *passtSocketName = qemuPasstCreateSocketPath(vm, net);
> - g_autoptr(virCommand) cmd = NULL;
> g_autofree char *pidfile = qemuPasstCreatePidFilename(vm, net);
> + g_autoptr(virCommand) cmd = NULL;
> size_t i;
>
> cmd = virCommandNew(PASST);
> @@ -238,7 +238,7 @@ qemuPasstStart(virDomainObj *vm,
> * a single IPv4 and single IPv6 address
> */
> if (!(addr = virSocketAddrFormat(&ip->address)))
> - return -1;
> + return NULL;
>
> virCommandAddArgList(cmd, "--address", addr, NULL);
>
> @@ -266,14 +266,14 @@ qemuPasstStart(virDomainObj *vm,
> /* validation guarantees this will never happen */
> virReportError(VIR_ERR_INTERNAL_ERROR,
> _("Invalid portForward proto value %1$u"), pf->proto);
> - return -1;
> + return NULL;
> }
>
> if (VIR_SOCKET_ADDR_VALID(&pf->address)) {
> g_autofree char *addr = NULL;
>
> if (!(addr = virSocketAddrFormat(&pf->address)))
> - return -1;
> + return NULL;
>
> virBufferAddStr(&buf, addr);
> emitsep = true;
> @@ -317,6 +317,26 @@ qemuPasstStart(virDomainObj *vm,
> virCommandAddArg(cmd, virBufferCurrentContent(&buf));
> }
>
> + if (socketName)
> + *socketName = g_steal_pointer(&passtSocketName);
> + if (pidfileRet)
> + *pidfileRet = g_steal_pointer(&pidfile);
> +
> + return g_steal_pointer(&cmd);
> +}
> +
> +int
> +qemuPasstStart(virDomainObj *vm,
> + virDomainNetDef *net)
> +{
> + qemuDomainObjPrivate *priv = vm->privateData;
> + g_autofree char *passtSocketName = NULL;
> + g_autofree char *pidfile = NULL;
> + virQEMUDriver *driver = priv->driver;
> + g_autoptr(virCommand) cmd = NULL;
> +
> + if (!(cmd = qemuPasstBuildCommand(&passtSocketName, &pidfile, vm, net)))
> + return -1;
>
> if (qemuExtDeviceLogCommand(driver, vm, cmd, "passt") < 0)
> return -1;
> diff --git a/src/qemu/qemu_passt.h b/src/qemu/qemu_passt.h
> index ea545ccf38..e16d4c1119 100644
> --- a/src/qemu/qemu_passt.h
> +++ b/src/qemu/qemu_passt.h
> @@ -27,6 +27,11 @@ qemuPasstAddNetProps(virDomainObj *vm,
> virDomainNetDef *net,
> virJSONValue **netprops);
>
> +virCommand *qemuPasstBuildCommand(char **socketName,
> + char **pidfileRet,
> + virDomainObj *vm,
> + virDomainNetDef *net);
> +
> int qemuPasstStart(virDomainObj *vm,
> virDomainNetDef *net);
>
© 2016 - 2026 Red Hat, Inc.