From 0dffca8f9561b8266b82bbc8c7c7ab4622a9b719 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Thu, 1 Apr 2021 17:54:09 +0200 Subject: [PATCH] virCommandSetDryRun: Rework resetting of the dry run data MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit While virCommandSetDryRun is used in tests only, there were some cases when error paths would not call the function with NULL arguments to reset the dry run infrastructure. Introduce virCommandDryRunToken type which must be allocated via virCommandDryRunTokenNew and passed to virCommandSetDryRun. This way we can use automatic variable cleaning to trigger the cleanup of virCommandSetDryRun parameters and also the use of the token variable ensures that all callers of virCommandSetDryRun clean up after themselves and also that the token isn't left unused in the code. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko Reviewed-by: Pavel Hrdina --- src/libvirt_private.syms | 2 ++ src/util/vircommand.c | 43 +++++++++++++++++++++++++++++++- src/util/vircommandpriv.h | 9 ++++++- tests/networkxml2firewalltest.c | 4 +-- tests/nodedevmdevctltest.c | 12 ++++----- tests/nwfilterebiptablestest.c | 28 ++++++++++----------- tests/nwfilterxml2firewalltest.c | 4 +-- tests/sysinfotest.c | 4 +-- tests/virfirewalltest.c | 40 ++++++++++++++--------------- tests/viriscsitest.c | 12 ++++----- tests/virkmodtest.c | 8 +++--- tests/virnetdevbandwidthtest.c | 4 +-- 12 files changed, 110 insertions(+), 60 deletions(-) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index fb79884bf3..119768496b 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1988,6 +1988,8 @@ virCommandAllowCap; virCommandClearCaps; virCommandDaemonize; virCommandDoAsyncIO; +virCommandDryRunTokenFree; +virCommandDryRunTokenNew; virCommandExec; virCommandFree; virCommandGetArgList; diff --git a/src/util/vircommand.c b/src/util/vircommand.c index 07e64c92dd..192613ed0a 100644 --- a/src/util/vircommand.c +++ b/src/util/vircommand.c @@ -3087,8 +3087,45 @@ virCommandDoAsyncIO(virCommandPtr cmd) cmd->flags |= VIR_EXEC_ASYNC_IO | VIR_EXEC_NONBLOCK; } + +struct _virCommandDryRunToken { + int dummy; +}; + + +/** + * virCommandDryRunTokenNew: + * + * Returns a token which is used with virCommandSetDryRun. Freeing the token + * with the appropriate automatic cleanup function ensures that the dry run + * environment is reset. + */ +virCommandDryRunToken * +virCommandDryRunTokenNew(void) +{ + return g_new0(virCommandDryRunToken, 1); +} + + +/** + * virCommandDryRunTokenFree: + * + * Helper to free a virCommandDryRunToken. Do not use this function directly, + * always declare virCommandDryRunToken as a g_autoptr. + */ +void +virCommandDryRunTokenFree(virCommandDryRunToken *tok) +{ + dryRunBuffer = NULL; + dryRunCallback = NULL; + dryRunOpaque = NULL; + g_free(tok); +} + + /** * virCommandSetDryRun: + * @tok: a virCommandDryRunToken obtained from virCommandDryRunTokenNew * @buf: buffer to store stringified commands * @callback: callback to process input/output/args * @@ -3120,10 +3157,14 @@ virCommandDoAsyncIO(virCommandPtr cmd) * To cancel this effect pass NULL for @buf and @callback. */ void -virCommandSetDryRun(virBufferPtr buf, +virCommandSetDryRun(virCommandDryRunToken *tok, + virBufferPtr buf, virCommandDryRunCallback cb, void *opaque) { + if (!tok) + abort(); + dryRunBuffer = buf; dryRunCallback = cb; dryRunOpaque = opaque; diff --git a/src/util/vircommandpriv.h b/src/util/vircommandpriv.h index 80f1d1376c..d06a8f5e30 100644 --- a/src/util/vircommandpriv.h +++ b/src/util/vircommandpriv.h @@ -35,6 +35,13 @@ typedef void (*virCommandDryRunCallback)(const char *const*args, int *status, void *opaque); -void virCommandSetDryRun(virBufferPtr buf, +typedef struct _virCommandDryRunToken virCommandDryRunToken; + +virCommandDryRunToken * virCommandDryRunTokenNew(void); +void virCommandDryRunTokenFree(virCommandDryRunToken *token); +G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCommandDryRunToken, virCommandDryRunTokenFree); + +void virCommandSetDryRun(virCommandDryRunToken *tok, + virBufferPtr buf, virCommandDryRunCallback cb, void *opaque); diff --git a/tests/networkxml2firewalltest.c b/tests/networkxml2firewalltest.c index d358f12897..952c076a19 100644 --- a/tests/networkxml2firewalltest.c +++ b/tests/networkxml2firewalltest.c @@ -96,8 +96,9 @@ static int testCompareXMLToArgvFiles(const char *xml, virNetworkDefPtr def = NULL; int ret = -1; char *actual; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); - virCommandSetDryRun(&buf, testCommandDryRun, NULL); + virCommandSetDryRun(dryRunToken, &buf, testCommandDryRun, NULL); if (!(def = virNetworkDefParseFile(xml, NULL))) goto cleanup; @@ -107,7 +108,6 @@ static int testCompareXMLToArgvFiles(const char *xml, actual = actualargv = virBufferContentAndReset(&buf); virTestClearCommandPath(actualargv); - virCommandSetDryRun(NULL, NULL, NULL); /* The first network to be created populates the * libvirt global chains. We must skip args for diff --git a/tests/nodedevmdevctltest.c b/tests/nodedevmdevctltest.c index 050424116f..cb9dbe5431 100644 --- a/tests/nodedevmdevctltest.c +++ b/tests/nodedevmdevctltest.c @@ -75,6 +75,7 @@ testMdevctlStartOrDefine(const char *virt_type, g_autofree char *errmsg = NULL; g_autofree char *stdinbuf = NULL; g_autoptr(virCommand) cmd = NULL; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); if (!(def = virNodeDeviceDefParseFile(mdevxml, create, virt_type))) goto cleanup; @@ -86,7 +87,7 @@ testMdevctlStartOrDefine(const char *virt_type, if (!cmd) goto cleanup; - virCommandSetDryRun(&buf, testCommandDryRunCallback, &stdinbuf); + virCommandSetDryRun(dryRunToken, &buf, testCommandDryRunCallback, &stdinbuf); if (virCommandRun(cmd, NULL) < 0) goto cleanup; @@ -102,7 +103,6 @@ testMdevctlStartOrDefine(const char *virt_type, ret = 0; cleanup: - virCommandSetDryRun(NULL, NULL, NULL); virNodeDeviceObjEndAPI(&obj); return ret; } @@ -152,13 +152,14 @@ testMdevctlUuidCommand(const char *uuid, GetStopUndefineCmdFunc func, const char int ret = -1; g_autoptr(virCommand) cmd = NULL; g_autofree char *errmsg = NULL; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); cmd = func(uuid, &errmsg); if (!cmd) goto cleanup; - virCommandSetDryRun(&buf, NULL, NULL); + virCommandSetDryRun(dryRunToken, &buf, NULL, NULL); if (virCommandRun(cmd, NULL) < 0) goto cleanup; @@ -171,7 +172,6 @@ testMdevctlUuidCommand(const char *uuid, GetStopUndefineCmdFunc func, const char ret = 0; cleanup: - virCommandSetDryRun(NULL, NULL, NULL); return ret; } @@ -214,13 +214,14 @@ testMdevctlListDefined(const void *data G_GNUC_UNUSED) g_autofree char *cmdlinefile = g_strdup_printf("%s/nodedevmdevctldata/mdevctl-list-defined.argv", abs_srcdir); + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); cmd = nodeDeviceGetMdevctlListCommand(true, &output, &errmsg); if (!cmd) goto cleanup; - virCommandSetDryRun(&buf, NULL, NULL); + virCommandSetDryRun(dryRunToken, &buf, NULL, NULL); if (virCommandRun(cmd, NULL) < 0) goto cleanup; @@ -234,7 +235,6 @@ testMdevctlListDefined(const void *data G_GNUC_UNUSED) cleanup: virBufferFreeAndReset(&buf); - virCommandSetDryRun(NULL, NULL, NULL); return ret; } diff --git a/tests/nwfilterebiptablestest.c b/tests/nwfilterebiptablestest.c index f47b4f1dfd..36df17d1c1 100644 --- a/tests/nwfilterebiptablestest.c +++ b/tests/nwfilterebiptablestest.c @@ -103,8 +103,9 @@ testNWFilterEBIPTablesAllTeardown(const void *opaque G_GNUC_UNUSED) "ebtables --concurrent -t nat -X libvirt-O-vnet0\n"; char *actual = NULL; int ret = -1; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); - virCommandSetDryRun(&buf, NULL, NULL); + virCommandSetDryRun(dryRunToken, &buf, NULL, NULL); if (ebiptables_driver.allTeardown("vnet0") < 0) goto cleanup; @@ -119,7 +120,6 @@ testNWFilterEBIPTablesAllTeardown(const void *opaque G_GNUC_UNUSED) ret = 0; cleanup: - virCommandSetDryRun(NULL, NULL, NULL); VIR_FREE(actual); return ret; } @@ -170,8 +170,9 @@ testNWFilterEBIPTablesTearOldRules(const void *opaque G_GNUC_UNUSED) "ebtables --concurrent -t nat -E libvirt-P-vnet0 libvirt-O-vnet0\n"; char *actual = NULL; int ret = -1; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); - virCommandSetDryRun(&buf, NULL, NULL); + virCommandSetDryRun(dryRunToken, &buf, NULL, NULL); if (ebiptables_driver.tearOldRules("vnet0") < 0) goto cleanup; @@ -186,7 +187,6 @@ testNWFilterEBIPTablesTearOldRules(const void *opaque G_GNUC_UNUSED) ret = 0; cleanup: - virCommandSetDryRun(NULL, NULL, NULL); VIR_FREE(actual); return ret; } @@ -215,8 +215,9 @@ testNWFilterEBIPTablesRemoveBasicRules(const void *opaque G_GNUC_UNUSED) "ebtables --concurrent -t nat -X libvirt-P-vnet0\n"; char *actual = NULL; int ret = -1; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); - virCommandSetDryRun(&buf, NULL, NULL); + virCommandSetDryRun(dryRunToken, &buf, NULL, NULL); if (ebiptables_driver.removeBasicRules("vnet0") < 0) goto cleanup; @@ -231,7 +232,6 @@ testNWFilterEBIPTablesRemoveBasicRules(const void *opaque G_GNUC_UNUSED) ret = 0; cleanup: - virCommandSetDryRun(NULL, NULL, NULL); VIR_FREE(actual); return ret; } @@ -245,8 +245,9 @@ testNWFilterEBIPTablesTearNewRules(const void *opaque G_GNUC_UNUSED) VIR_NWFILTER_NEW_RULES_TEARDOWN; char *actual = NULL; int ret = -1; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); - virCommandSetDryRun(&buf, NULL, NULL); + virCommandSetDryRun(dryRunToken, &buf, NULL, NULL); if (ebiptables_driver.tearNewRules("vnet0") < 0) goto cleanup; @@ -261,7 +262,6 @@ testNWFilterEBIPTablesTearNewRules(const void *opaque G_GNUC_UNUSED) ret = 0; cleanup: - virCommandSetDryRun(NULL, NULL, NULL); VIR_FREE(actual); return ret; } @@ -313,8 +313,9 @@ testNWFilterEBIPTablesApplyBasicRules(const void *opaque G_GNUC_UNUSED) char *actual = NULL; int ret = -1; virMacAddr mac = { .addr = { 0x10, 0x20, 0x30, 0x40, 0x50, 0x60 } }; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); - virCommandSetDryRun(&buf, NULL, NULL); + virCommandSetDryRun(dryRunToken, &buf, NULL, NULL); if (ebiptables_driver.applyBasicRules("vnet0", &mac) < 0) goto cleanup; @@ -329,7 +330,6 @@ testNWFilterEBIPTablesApplyBasicRules(const void *opaque G_GNUC_UNUSED) ret = 0; cleanup: - virCommandSetDryRun(NULL, NULL, NULL); VIR_FREE(actual); return ret; } @@ -399,8 +399,9 @@ testNWFilterEBIPTablesApplyDHCPOnlyRules(const void *opaque G_GNUC_UNUSED) } } }; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); - virCommandSetDryRun(&buf, NULL, NULL); + virCommandSetDryRun(dryRunToken, &buf, NULL, NULL); if (ebiptables_driver.applyDHCPOnlyRules("vnet0", &mac, &val, false) < 0) goto cleanup; @@ -415,7 +416,6 @@ testNWFilterEBIPTablesApplyDHCPOnlyRules(const void *opaque G_GNUC_UNUSED) ret = 0; cleanup: - virCommandSetDryRun(NULL, NULL, NULL); VIR_FREE(actual); return ret; } @@ -468,8 +468,9 @@ testNWFilterEBIPTablesApplyDropAllRules(const void *opaque G_GNUC_UNUSED) "ebtables --concurrent -t nat -E libvirt-P-vnet0 libvirt-O-vnet0\n"; char *actual = NULL; int ret = -1; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); - virCommandSetDryRun(&buf, NULL, NULL); + virCommandSetDryRun(dryRunToken, &buf, NULL, NULL); if (ebiptables_driver.applyDropAllRules("vnet0") < 0) goto cleanup; @@ -484,7 +485,6 @@ testNWFilterEBIPTablesApplyDropAllRules(const void *opaque G_GNUC_UNUSED) ret = 0; cleanup: - virCommandSetDryRun(NULL, NULL, NULL); VIR_FREE(actual); return ret; } diff --git a/tests/nwfilterxml2firewalltest.c b/tests/nwfilterxml2firewalltest.c index 3e2ab0b0ba..38f2ab7040 100644 --- a/tests/nwfilterxml2firewalltest.c +++ b/tests/nwfilterxml2firewalltest.c @@ -371,10 +371,11 @@ static int testCompareXMLToArgvFiles(const char *xml, GHashTable *vars = virHashNew(virNWFilterVarValueHashFree); virNWFilterInst inst; int ret = -1; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); memset(&inst, 0, sizeof(inst)); - virCommandSetDryRun(&buf, NULL, NULL); + virCommandSetDryRun(dryRunToken, &buf, NULL, NULL); if (!vars) goto cleanup; @@ -392,7 +393,6 @@ static int testCompareXMLToArgvFiles(const char *xml, actualargv = virBufferContentAndReset(&buf); virTestClearCommandPath(actualargv); - virCommandSetDryRun(NULL, NULL, NULL); testRemoveCommonRules(actualargv); diff --git a/tests/sysinfotest.c b/tests/sysinfotest.c index e40a4564a7..5d028d2fd3 100644 --- a/tests/sysinfotest.c +++ b/tests/sysinfotest.c @@ -96,17 +96,17 @@ testSysinfo(const void *data) g_autofree char *sysinfo = NULL; g_autofree char *cpuinfo = NULL; g_autofree char *expected = NULL; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); sysinfo = g_strdup_printf("%s/sysinfodata/%ssysinfo.data", abs_srcdir, testdata->name); cpuinfo = g_strdup_printf("%s/sysinfodata/%scpuinfo.data", abs_srcdir, testdata->name); expected = g_strdup_printf("%s/sysinfodata/%ssysinfo.expect", abs_srcdir, testdata->name); - virCommandSetDryRun(NULL, testDMIDecodeDryRun, sysinfo); + virCommandSetDryRun(dryRunToken, NULL, testDMIDecodeDryRun, sysinfo); virSysinfoSetup(sysinfo, cpuinfo); ret = testdata->func(); - virCommandSetDryRun(NULL, NULL, NULL); if (!ret) return -1; diff --git a/tests/virfirewalltest.c b/tests/virfirewalltest.c index 8bd73311fd..5515da4b4d 100644 --- a/tests/virfirewalltest.c +++ b/tests/virfirewalltest.c @@ -189,6 +189,7 @@ testFirewallSingleGroup(const void *opaque) IPTABLES_PATH " -w -A INPUT --source 192.168.122.1 --jump ACCEPT\n" IPTABLES_PATH " -w -A INPUT --source '!192.168.122.1' --jump REJECT\n"; const struct testFirewallData *data = opaque; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); fwDisabled = data->fwDisabled; if (virFirewallSetBackend(data->tryBackend) < 0) @@ -196,7 +197,7 @@ testFirewallSingleGroup(const void *opaque) if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT || data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD) - virCommandSetDryRun(&cmdbuf, NULL, NULL); + virCommandSetDryRun(dryRunToken, &cmdbuf, NULL, NULL); else fwBuf = &cmdbuf; @@ -226,7 +227,6 @@ testFirewallSingleGroup(const void *opaque) ret = 0; cleanup: fwBuf = NULL; - virCommandSetDryRun(NULL, NULL, NULL); return ret; } @@ -243,6 +243,7 @@ testFirewallRemoveRule(const void *opaque) IPTABLES_PATH " -w -A INPUT --source '!192.168.122.1' --jump REJECT\n"; const struct testFirewallData *data = opaque; virFirewallRulePtr fwrule; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); fwDisabled = data->fwDisabled; if (virFirewallSetBackend(data->tryBackend) < 0) @@ -250,7 +251,7 @@ testFirewallRemoveRule(const void *opaque) if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT || data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD) - virCommandSetDryRun(&cmdbuf, NULL, NULL); + virCommandSetDryRun(dryRunToken, &cmdbuf, NULL, NULL); else fwBuf = &cmdbuf; @@ -286,7 +287,6 @@ testFirewallRemoveRule(const void *opaque) ret = 0; cleanup: fwBuf = NULL; - virCommandSetDryRun(NULL, NULL, NULL); return ret; } @@ -304,6 +304,7 @@ testFirewallManyGroups(const void *opaque G_GNUC_UNUSED) IPTABLES_PATH " -w -A OUTPUT --source 192.168.122.1 --jump ACCEPT\n" IPTABLES_PATH " -w -A OUTPUT --jump DROP\n"; const struct testFirewallData *data = opaque; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); fwDisabled = data->fwDisabled; if (virFirewallSetBackend(data->tryBackend) < 0) @@ -311,7 +312,7 @@ testFirewallManyGroups(const void *opaque G_GNUC_UNUSED) if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT || data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD) - virCommandSetDryRun(&cmdbuf, NULL, NULL); + virCommandSetDryRun(dryRunToken, &cmdbuf, NULL, NULL); else fwBuf = &cmdbuf; @@ -353,7 +354,6 @@ testFirewallManyGroups(const void *opaque G_GNUC_UNUSED) ret = 0; cleanup: fwBuf = NULL; - virCommandSetDryRun(NULL, NULL, NULL); return ret; } @@ -392,6 +392,7 @@ testFirewallIgnoreFailGroup(const void *opaque G_GNUC_UNUSED) IPTABLES_PATH " -w -A OUTPUT --source 192.168.122.1 --jump ACCEPT\n" IPTABLES_PATH " -w -A OUTPUT --jump DROP\n"; const struct testFirewallData *data = opaque; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); fwDisabled = data->fwDisabled; if (virFirewallSetBackend(data->tryBackend) < 0) @@ -399,7 +400,7 @@ testFirewallIgnoreFailGroup(const void *opaque G_GNUC_UNUSED) if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT || data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD) { - virCommandSetDryRun(&cmdbuf, testFirewallRollbackHook, NULL); + virCommandSetDryRun(dryRunToken, &cmdbuf, testFirewallRollbackHook, NULL); } else { fwBuf = &cmdbuf; fwError = true; @@ -443,7 +444,6 @@ testFirewallIgnoreFailGroup(const void *opaque G_GNUC_UNUSED) ret = 0; cleanup: fwBuf = NULL; - virCommandSetDryRun(NULL, NULL, NULL); return ret; } @@ -461,6 +461,7 @@ testFirewallIgnoreFailRule(const void *opaque G_GNUC_UNUSED) IPTABLES_PATH " -w -A OUTPUT --source 192.168.122.1 --jump ACCEPT\n" IPTABLES_PATH " -w -A OUTPUT --jump DROP\n"; const struct testFirewallData *data = opaque; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); fwDisabled = data->fwDisabled; if (virFirewallSetBackend(data->tryBackend) < 0) @@ -468,7 +469,7 @@ testFirewallIgnoreFailRule(const void *opaque G_GNUC_UNUSED) if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT || data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD) { - virCommandSetDryRun(&cmdbuf, testFirewallRollbackHook, NULL); + virCommandSetDryRun(dryRunToken, &cmdbuf, testFirewallRollbackHook, NULL); } else { fwBuf = &cmdbuf; fwError = true; @@ -511,7 +512,6 @@ testFirewallIgnoreFailRule(const void *opaque G_GNUC_UNUSED) ret = 0; cleanup: fwBuf = NULL; - virCommandSetDryRun(NULL, NULL, NULL); return ret; } @@ -527,6 +527,7 @@ testFirewallNoRollback(const void *opaque G_GNUC_UNUSED) IPTABLES_PATH " -w -A INPUT --source 192.168.122.1 --jump ACCEPT\n" IPTABLES_PATH " -w -A INPUT --source 192.168.122.255 --jump REJECT\n"; const struct testFirewallData *data = opaque; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); fwDisabled = data->fwDisabled; if (virFirewallSetBackend(data->tryBackend) < 0) @@ -534,7 +535,7 @@ testFirewallNoRollback(const void *opaque G_GNUC_UNUSED) if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT || data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD) { - virCommandSetDryRun(&cmdbuf, testFirewallRollbackHook, NULL); + virCommandSetDryRun(dryRunToken, &cmdbuf, testFirewallRollbackHook, NULL); } else { fwBuf = &cmdbuf; fwError = true; @@ -573,7 +574,6 @@ testFirewallNoRollback(const void *opaque G_GNUC_UNUSED) ret = 0; cleanup: fwBuf = NULL; - virCommandSetDryRun(NULL, NULL, NULL); return ret; } @@ -591,6 +591,7 @@ testFirewallSingleRollback(const void *opaque G_GNUC_UNUSED) IPTABLES_PATH " -w -D INPUT --source 192.168.122.255 --jump REJECT\n" IPTABLES_PATH " -w -D INPUT --source '!192.168.122.1' --jump REJECT\n"; const struct testFirewallData *data = opaque; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); fwDisabled = data->fwDisabled; if (virFirewallSetBackend(data->tryBackend) < 0) @@ -598,7 +599,7 @@ testFirewallSingleRollback(const void *opaque G_GNUC_UNUSED) if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT || data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD) { - virCommandSetDryRun(&cmdbuf, testFirewallRollbackHook, NULL); + virCommandSetDryRun(dryRunToken, &cmdbuf, testFirewallRollbackHook, NULL); } else { fwError = true; fwBuf = &cmdbuf; @@ -654,7 +655,6 @@ testFirewallSingleRollback(const void *opaque G_GNUC_UNUSED) ret = 0; cleanup: fwBuf = NULL; - virCommandSetDryRun(NULL, NULL, NULL); return ret; } @@ -671,6 +671,7 @@ testFirewallManyRollback(const void *opaque G_GNUC_UNUSED) IPTABLES_PATH " -w -D INPUT --source 192.168.122.255 --jump REJECT\n" IPTABLES_PATH " -w -D INPUT --source '!192.168.122.1' --jump REJECT\n"; const struct testFirewallData *data = opaque; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); fwDisabled = data->fwDisabled; if (virFirewallSetBackend(data->tryBackend) < 0) @@ -678,7 +679,7 @@ testFirewallManyRollback(const void *opaque G_GNUC_UNUSED) if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT || data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD) { - virCommandSetDryRun(&cmdbuf, testFirewallRollbackHook, NULL); + virCommandSetDryRun(dryRunToken, &cmdbuf, testFirewallRollbackHook, NULL); } else { fwBuf = &cmdbuf; fwError = true; @@ -738,7 +739,6 @@ testFirewallManyRollback(const void *opaque G_GNUC_UNUSED) ret = 0; cleanup: fwBuf = NULL; - virCommandSetDryRun(NULL, NULL, NULL); return ret; } @@ -759,6 +759,7 @@ testFirewallChainedRollback(const void *opaque G_GNUC_UNUSED) IPTABLES_PATH " -w -D INPUT --source 192.168.122.255 --jump REJECT\n" IPTABLES_PATH " -w -D INPUT --source '!192.168.122.1' --jump REJECT\n"; const struct testFirewallData *data = opaque; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); fwDisabled = data->fwDisabled; if (virFirewallSetBackend(data->tryBackend) < 0) @@ -766,7 +767,7 @@ testFirewallChainedRollback(const void *opaque G_GNUC_UNUSED) if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT || data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD) { - virCommandSetDryRun(&cmdbuf, testFirewallRollbackHook, NULL); + virCommandSetDryRun(dryRunToken, &cmdbuf, testFirewallRollbackHook, NULL); } else { fwBuf = &cmdbuf; fwError = true; @@ -852,7 +853,6 @@ testFirewallChainedRollback(const void *opaque G_GNUC_UNUSED) ret = 0; cleanup: fwBuf = NULL; - virCommandSetDryRun(NULL, NULL, NULL); return ret; } @@ -953,6 +953,7 @@ testFirewallQuery(const void *opaque G_GNUC_UNUSED) IPTABLES_PATH " -w -A INPUT --source 192.168.122.128 --jump REJECT\n" IPTABLES_PATH " -w -A INPUT --source '!192.168.122.1' --jump REJECT\n"; const struct testFirewallData *data = opaque; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); expectedLineNum = 0; expectedLineError = false; @@ -962,7 +963,7 @@ testFirewallQuery(const void *opaque G_GNUC_UNUSED) if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT || data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD) { - virCommandSetDryRun(&cmdbuf, testFirewallQueryHook, NULL); + virCommandSetDryRun(dryRunToken, &cmdbuf, testFirewallQueryHook, NULL); } else { fwBuf = &cmdbuf; fwError = true; @@ -1030,7 +1031,6 @@ testFirewallQuery(const void *opaque G_GNUC_UNUSED) ret = 0; cleanup: fwBuf = NULL; - virCommandSetDryRun(NULL, NULL, NULL); return ret; } diff --git a/tests/viriscsitest.c b/tests/viriscsitest.c index e86d3970b6..e673b69ed6 100644 --- a/tests/viriscsitest.c +++ b/tests/viriscsitest.c @@ -212,10 +212,11 @@ testISCSIGetSession(const void *data) struct testIscsiadmCbData cbData = { 0 }; char *actual_session = NULL; int ret = -1; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); cbData.output_version = info->output_version; - virCommandSetDryRun(NULL, testIscsiadmCb, &cbData); + virCommandSetDryRun(dryRunToken, NULL, testIscsiadmCb, &cbData); actual_session = virISCSIGetSession(info->device_path, true); @@ -230,7 +231,6 @@ testISCSIGetSession(const void *data) ret = 0; cleanup: - virCommandSetDryRun(NULL, NULL, NULL); VIR_FREE(actual_session); return ret; } @@ -250,8 +250,9 @@ testISCSIScanTargets(const void *data) char **targets = NULL; int ret = -1; size_t i; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); - virCommandSetDryRun(NULL, testIscsiadmCb, NULL); + virCommandSetDryRun(dryRunToken, NULL, testIscsiadmCb, NULL); if (virISCSIScanTargets(info->portal, NULL, false, &ntargets, &targets) < 0) @@ -276,7 +277,6 @@ testISCSIScanTargets(const void *data) ret = 0; cleanup: - virCommandSetDryRun(NULL, NULL, NULL); for (i = 0; i < ntargets; i++) VIR_FREE(targets[i]); VIR_FREE(targets); @@ -297,15 +297,15 @@ testISCSIConnectionLogin(const void *data) const struct testConnectionInfoLogin *info = data; struct testIscsiadmCbData cbData = { 0 }; int ret = -1; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); - virCommandSetDryRun(NULL, testIscsiadmCb, &cbData); + virCommandSetDryRun(dryRunToken, NULL, testIscsiadmCb, &cbData); if (virISCSIConnectionLogin(info->portal, info->initiatoriqn, info->target) < 0) goto cleanup; ret = 0; cleanup: - virCommandSetDryRun(NULL, NULL, NULL); return ret; } diff --git a/tests/virkmodtest.c b/tests/virkmodtest.c index 369eb8baca..d278032aec 100644 --- a/tests/virkmodtest.c +++ b/tests/virkmodtest.c @@ -61,8 +61,9 @@ testKModLoad(const void *args G_GNUC_UNUSED) int ret = -1; char *errbuf = NULL; g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); - virCommandSetDryRun(&buf, NULL, NULL); + virCommandSetDryRun(dryRunToken, &buf, NULL, NULL); errbuf = virKModLoad(MODNAME); if (errbuf) { @@ -76,7 +77,6 @@ testKModLoad(const void *args G_GNUC_UNUSED) ret = 0; cleanup: - virCommandSetDryRun(NULL, NULL, NULL); VIR_FREE(errbuf); return ret; } @@ -88,8 +88,9 @@ testKModUnload(const void *args G_GNUC_UNUSED) int ret = -1; char *errbuf = NULL; g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); - virCommandSetDryRun(&buf, NULL, NULL); + virCommandSetDryRun(dryRunToken, &buf, NULL, NULL); errbuf = virKModUnload(MODNAME); if (errbuf) { @@ -103,7 +104,6 @@ testKModUnload(const void *args G_GNUC_UNUSED) ret = 0; cleanup: - virCommandSetDryRun(NULL, NULL, NULL); VIR_FREE(errbuf); return ret; } diff --git a/tests/virnetdevbandwidthtest.c b/tests/virnetdevbandwidthtest.c index 6f3cab27be..52742dff05 100644 --- a/tests/virnetdevbandwidthtest.c +++ b/tests/virnetdevbandwidthtest.c @@ -72,13 +72,14 @@ testVirNetDevBandwidthSet(const void *data) g_autoptr(virNetDevBandwidth) band = NULL; g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER; char *actual_cmd = NULL; + g_autoptr(virCommandDryRunToken) dryRunToken = virCommandDryRunTokenNew(); PARSE(info->band, band); if (!iface) iface = "eth0"; - virCommandSetDryRun(&buf, NULL, NULL); + virCommandSetDryRun(dryRunToken, &buf, NULL, NULL); if (virNetDevBandwidthSet(iface, band, info->hierarchical_class, true) < 0) goto cleanup; @@ -97,7 +98,6 @@ testVirNetDevBandwidthSet(const void *data) ret = 0; cleanup: - virCommandSetDryRun(NULL, NULL, NULL); VIR_FREE(actual_cmd); return ret; }