[PATCH 0/3] Implement some BlkioParameters related APIs for test driver

- Implement virDomainGetBlkioParameters - Implement virDomainSetBlkioParameters - Add tests for these APIs Luke Yue (3): test_driver: Implement virDomainGetBlkioParameters test_driver: Implement virDomainSetBlkioParameters tests: Test BlkioParameters related functions for test driver examples/xml/test/testdomfv0.xml | 11 ++++ examples/xml/test/testnodeinline.xml | 11 ++++ src/test/meson.build | 1 + src/test/test_driver.c | 96 ++++++++++++++++++++++++++++ tests/virshtest.c | 36 +++++++++++ 5 files changed, 155 insertions(+) -- 2.32.0

Signed-off-by: Luke Yue <lukedyue@gmail.com> --- src/test/test_driver.c | 47 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/test/test_driver.c b/src/test/test_driver.c index ef0ddab54d..728b41ba6d 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -3158,6 +3158,52 @@ static char *testDomainGetXMLDesc(virDomainPtr domain, unsigned int flags) return ret; } +static int +testDomainGetBlkioParameters(virDomainPtr dom, + virTypedParameterPtr params, + int *nparams, + unsigned int flags) +{ + virDomainObj *vm = NULL; + virDomainDef *def = NULL; + int maxparams = 6; + int ret = -1; + + virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | + VIR_DOMAIN_AFFECT_CONFIG | + VIR_TYPED_PARAM_STRING_OKAY, -1); + + if ((*nparams) == 0) { + *nparams = 6; + return 0; + } else if (*nparams < maxparams) { + maxparams = *nparams; + } + + *nparams = 0; + + if (!(vm = testDomObjFromDomain(dom))) + return -1; + + if (!(def = virDomainObjGetOneDef(vm, flags))) + goto cleanup; + + if (virTypedParameterAssign(&(params[(*nparams)++]), + VIR_DOMAIN_BLKIO_WEIGHT, + VIR_TYPED_PARAM_UINT, + def->blkio.weight) < 0) + goto cleanup; + + if (virDomainGetBlkioParametersAssignFromDef(def, params, nparams, + maxparams) < 0) + goto cleanup; + + ret = 0; + + cleanup: + virDomainObjEndAPI(&vm); + return ret; +} #define TEST_SET_PARAM(index, name, type, value) \ if (index < *nparams && \ @@ -9367,6 +9413,7 @@ static virHypervisorDriver testHypervisorDriver = { .domainGetInterfaceParameters = testDomainGetInterfaceParameters, /* 5.6.0 */ .domainSetBlockIoTune = testDomainSetBlockIoTune, /* 5.7.0 */ .domainGetBlockIoTune = testDomainGetBlockIoTune, /* 5.7.0 */ + .domainGetBlkioParameters = testDomainGetBlkioParameters, /* 7.6.0 */ .connectListDefinedDomains = testConnectListDefinedDomains, /* 0.1.11 */ .connectNumOfDefinedDomains = testConnectNumOfDefinedDomains, /* 0.1.11 */ .domainCreate = testDomainCreate, /* 0.1.11 */ -- 2.32.0

Signed-off-by: Luke Yue <lukedyue@gmail.com> --- src/test/meson.build | 1 + src/test/test_driver.c | 49 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/src/test/meson.build b/src/test/meson.build index f54585adfd..c0174ad856 100644 --- a/src/test/meson.build +++ b/src/test/meson.build @@ -17,6 +17,7 @@ if conf.has('WITH_TEST') ], include_directories: [ conf_inc_dir, + hypervisor_inc_dir, ], ) diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 728b41ba6d..2a83cb4198 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -40,6 +40,7 @@ #include "interface_conf.h" #include "checkpoint_conf.h" #include "domain_conf.h" +#include "domain_driver.h" #include "domain_event.h" #include "network_event.h" #include "snapshot_conf.h" @@ -3158,6 +3159,53 @@ static char *testDomainGetXMLDesc(virDomainPtr domain, unsigned int flags) return ret; } +static int +testDomainSetBlkioParameters(virDomainPtr dom, + virTypedParameterPtr params, + int nparams, + unsigned int flags) +{ + virDomainObj *vm = NULL; + virDomainDef *def; + int ret = -1; + + virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | + VIR_DOMAIN_AFFECT_CONFIG, -1); + + if (virTypedParamsValidate(params, nparams, + VIR_DOMAIN_BLKIO_WEIGHT, + VIR_TYPED_PARAM_UINT, + VIR_DOMAIN_BLKIO_DEVICE_WEIGHT, + VIR_TYPED_PARAM_STRING, + VIR_DOMAIN_BLKIO_DEVICE_READ_IOPS, + VIR_TYPED_PARAM_STRING, + VIR_DOMAIN_BLKIO_DEVICE_WRITE_IOPS, + VIR_TYPED_PARAM_STRING, + VIR_DOMAIN_BLKIO_DEVICE_READ_BPS, + VIR_TYPED_PARAM_STRING, + VIR_DOMAIN_BLKIO_DEVICE_WRITE_BPS, + VIR_TYPED_PARAM_STRING, + NULL) < 0) + return -1; + + if (!(vm = testDomObjFromDomain(dom))) + return -1; + + if (!(def = virDomainObjGetOneDef(vm, flags))) + goto cleanup; + + ret = 0; + + ret = virDomainDriverSetupPersistentDefBlkioParams(def, + params, + nparams); + + cleanup: + virDomainObjEndAPI(&vm); + return ret; +} + + static int testDomainGetBlkioParameters(virDomainPtr dom, virTypedParameterPtr params, @@ -9413,6 +9461,7 @@ static virHypervisorDriver testHypervisorDriver = { .domainGetInterfaceParameters = testDomainGetInterfaceParameters, /* 5.6.0 */ .domainSetBlockIoTune = testDomainSetBlockIoTune, /* 5.7.0 */ .domainGetBlockIoTune = testDomainGetBlockIoTune, /* 5.7.0 */ + .domainSetBlkioParameters = testDomainSetBlkioParameters, /* 7.6.0 */ .domainGetBlkioParameters = testDomainGetBlkioParameters, /* 7.6.0 */ .connectListDefinedDomains = testConnectListDefinedDomains, /* 0.1.11 */ .connectNumOfDefinedDomains = testConnectNumOfDefinedDomains, /* 0.1.11 */ -- 2.32.0

Signed-off-by: Luke Yue <lukedyue@gmail.com> --- examples/xml/test/testdomfv0.xml | 11 +++++++++ examples/xml/test/testnodeinline.xml | 11 +++++++++ tests/virshtest.c | 36 ++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+) diff --git a/examples/xml/test/testdomfv0.xml b/examples/xml/test/testdomfv0.xml index fc209cce29..e60b5d69b7 100644 --- a/examples/xml/test/testdomfv0.xml +++ b/examples/xml/test/testdomfv0.xml @@ -38,4 +38,15 @@ </disk> <graphics type='vnc' port='5904'/> </devices> + <blkiotune> + <weight>800</weight> + <device> + <path>/dev/hda</path> + <weight>700</weight> + <read_bytes_sec>700</read_bytes_sec> + <write_bytes_sec>700</write_bytes_sec> + <read_iops_sec>700</read_iops_sec> + <write_iops_sec>700</write_iops_sec> + </device> + </blkiotune> </domain> diff --git a/examples/xml/test/testnodeinline.xml b/examples/xml/test/testnodeinline.xml index 0ec0f1ace6..78f3c6a671 100644 --- a/examples/xml/test/testnodeinline.xml +++ b/examples/xml/test/testnodeinline.xml @@ -48,6 +48,17 @@ </disk> <graphics type="vnc" port="5904"/> </devices> + <blkiotune> + <weight>800</weight> + <device> + <path>/dev/hda</path> + <weight>700</weight> + <read_bytes_sec>700</read_bytes_sec> + <write_bytes_sec>700</write_bytes_sec> + <read_iops_sec>700</read_iops_sec> + <write_iops_sec>700</write_iops_sec> + </device> + </blkiotune> </domain> <domain type="test"> <name>fc4</name> diff --git a/tests/virshtest.c b/tests/virshtest.c index c1974c46cb..43daf8b9c2 100644 --- a/tests/virshtest.c +++ b/tests/virshtest.c @@ -22,6 +22,7 @@ main(void) # define DOM_UUID "ef861801-45b9-11cb-88e3-afbfe5370493" # define SECURITY_LABEL "libvirt-test (enforcing)" +# define BLKIO_PARAMETER "/dev/hda,700" static const char *dominfo_fc4 = "\ Id: 2\n\ @@ -43,6 +44,14 @@ static const char *domuuid_fc4 = DOM_UUID "\n\n"; static const char *domid_fc4 = "2\n\n"; static const char *domname_fc4 = "fc4\n\n"; static const char *domstate_fc4 = "running\n\n"; +static const char *blkioparameters = "\ +weight : 800\n\ +device_weight : " BLKIO_PARAMETER "\n\ +device_read_iops_sec: " BLKIO_PARAMETER "\n\ +device_write_iops_sec: " BLKIO_PARAMETER "\n\ +device_read_bytes_sec: " BLKIO_PARAMETER "\n\ +device_write_bytes_sec: " BLKIO_PARAMETER "\n\ +\n"; static int testFilterLine(char *buffer, const char *toRemove) @@ -250,6 +259,25 @@ static int testCompareDomstateByName(const void *data G_GNUC_UNUSED) return testCompareOutputLit(exp, NULL, argv); } +static int testCompareGetBlkioParameters(const void *data G_GNUC_UNUSED) +{ + const char *const argv[] = { VIRSH_CUSTOM, "blkiotune", "fv0", NULL }; + const char *exp = blkioparameters; + return testCompareOutputLit(exp, NULL, argv); +} + +static int testCompareSetBlkioParameters(const void *data G_GNUC_UNUSED) +{ + const char *const argv[] = { VIRSH_CUSTOM, "blkiotune", "fv0", + "--device-weights", "/dev/hda,500", + "--device-read-iops-sec", "/dev/hda,1000", + "--device-write-iops-sec", "/dev/hda,1000", + "--device-read-bytes-sec", "/dev/hda,26214400", + "--device-write-bytes-sec", "/dev/hda,26214400", NULL }; + const char *exp = "\n"; + return testCompareOutputLit(exp, NULL, argv); +} + struct testInfo { const char *const *argv; const char *result; @@ -334,6 +362,14 @@ mymain(void) testCompareDomstateByName, NULL) != 0) ret = -1; + if (virTestRun("virsh blkiotune (get parameters)", + testCompareGetBlkioParameters, NULL) != 0) + ret = -1; + + if (virTestRun("virsh blkiotune (set parameters)", + testCompareSetBlkioParameters, NULL) != 0) + ret = -1; + /* It's a bit awkward listing result before argument, but that's a * limitation of C99 vararg macros. */ # define DO_TEST(i, result, ...) \ -- 2.32.0

On Tue, Jul 13, 2021 at 01:42:14PM +0800, Luke Yue wrote:
Signed-off-by: Luke Yue <lukedyue@gmail.com> --- examples/xml/test/testdomfv0.xml | 11 +++++++++ examples/xml/test/testnodeinline.xml | 11 +++++++++ tests/virshtest.c | 36 ++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+)
diff --git a/examples/xml/test/testdomfv0.xml b/examples/xml/test/testdomfv0.xml index fc209cce29..e60b5d69b7 100644 --- a/examples/xml/test/testdomfv0.xml +++ b/examples/xml/test/testdomfv0.xml @@ -38,4 +38,15 @@ </disk> <graphics type='vnc' port='5904'/> </devices> + <blkiotune> + <weight>800</weight> + <device> + <path>/dev/hda</path> + <weight>700</weight> + <read_bytes_sec>700</read_bytes_sec> + <write_bytes_sec>700</write_bytes_sec> + <read_iops_sec>700</read_iops_sec> + <write_iops_sec>700</write_iops_sec> + </device> + </blkiotune> </domain> diff --git a/examples/xml/test/testnodeinline.xml b/examples/xml/test/testnodeinline.xml index 0ec0f1ace6..78f3c6a671 100644 --- a/examples/xml/test/testnodeinline.xml +++ b/examples/xml/test/testnodeinline.xml @@ -48,6 +48,17 @@ </disk> <graphics type="vnc" port="5904"/> </devices> + <blkiotune> + <weight>800</weight> + <device> + <path>/dev/hda</path> + <weight>700</weight> + <read_bytes_sec>700</read_bytes_sec> + <write_bytes_sec>700</write_bytes_sec> + <read_iops_sec>700</read_iops_sec> + <write_iops_sec>700</write_iops_sec> + </device> + </blkiotune> </domain> <domain type="test"> <name>fc4</name> diff --git a/tests/virshtest.c b/tests/virshtest.c index c1974c46cb..43daf8b9c2 100644 --- a/tests/virshtest.c +++ b/tests/virshtest.c @@ -22,6 +22,7 @@ main(void)
# define DOM_UUID "ef861801-45b9-11cb-88e3-afbfe5370493" # define SECURITY_LABEL "libvirt-test (enforcing)" +# define BLKIO_PARAMETER "/dev/hda,700"
static const char *dominfo_fc4 = "\ Id: 2\n\ @@ -43,6 +44,14 @@ static const char *domuuid_fc4 = DOM_UUID "\n\n"; static const char *domid_fc4 = "2\n\n"; static const char *domname_fc4 = "fc4\n\n"; static const char *domstate_fc4 = "running\n\n"; +static const char *blkioparameters = "\ +weight : 800\n\ +device_weight : " BLKIO_PARAMETER "\n\ +device_read_iops_sec: " BLKIO_PARAMETER "\n\ +device_write_iops_sec: " BLKIO_PARAMETER "\n\ +device_read_bytes_sec: " BLKIO_PARAMETER "\n\ +device_write_bytes_sec: " BLKIO_PARAMETER "\n\ +\n";
static int testFilterLine(char *buffer, const char *toRemove) @@ -250,6 +259,25 @@ static int testCompareDomstateByName(const void *data G_GNUC_UNUSED) return testCompareOutputLit(exp, NULL, argv); }
+static int testCompareGetBlkioParameters(const void *data G_GNUC_UNUSED) +{ + const char *const argv[] = { VIRSH_CUSTOM, "blkiotune", "fv0", NULL }; + const char *exp = blkioparameters; + return testCompareOutputLit(exp, NULL, argv); +} + +static int testCompareSetBlkioParameters(const void *data G_GNUC_UNUSED) +{ + const char *const argv[] = { VIRSH_CUSTOM, "blkiotune", "fv0", + "--device-weights", "/dev/hda,500", + "--device-read-iops-sec", "/dev/hda,1000", + "--device-write-iops-sec", "/dev/hda,1000", + "--device-read-bytes-sec", "/dev/hda,26214400", + "--device-write-bytes-sec", "/dev/hda,26214400", NULL }; + const char *exp = "\n"; + return testCompareOutputLit(exp, NULL, argv); +} + struct testInfo { const char *const *argv; const char *result; @@ -334,6 +362,14 @@ mymain(void) testCompareDomstateByName, NULL) != 0) ret = -1;
+ if (virTestRun("virsh blkiotune (get parameters)", + testCompareGetBlkioParameters, NULL) != 0) + ret = -1; + + if (virTestRun("virsh blkiotune (set parameters)", + testCompareSetBlkioParameters, NULL) != 0) + ret = -1; +
Patches are fine, but please rebase them. I would also appreciate testing setting some different value and then checking it was set.
/* It's a bit awkward listing result before argument, but that's a * limitation of C99 vararg macros. */ # define DO_TEST(i, result, ...) \ -- 2.32.0

On Wed, 2021-08-18 at 14:37 +0200, Martin Kletzander wrote:
On Tue, Jul 13, 2021 at 01:42:14PM +0800, Luke Yue wrote:
Signed-off-by: Luke Yue <lukedyue@gmail.com> --- examples/xml/test/testdomfv0.xml | 11 +++++++++ examples/xml/test/testnodeinline.xml | 11 +++++++++ tests/virshtest.c | 36 ++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+)
diff --git a/examples/xml/test/testdomfv0.xml b/examples/xml/test/testdomfv0.xml index fc209cce29..e60b5d69b7 100644 --- a/examples/xml/test/testdomfv0.xml +++ b/examples/xml/test/testdomfv0.xml @@ -38,4 +38,15 @@ </disk> <graphics type='vnc' port='5904'/> </devices> + <blkiotune> + <weight>800</weight> + <device> + <path>/dev/hda</path> + <weight>700</weight> + <read_bytes_sec>700</read_bytes_sec> + <write_bytes_sec>700</write_bytes_sec> + <read_iops_sec>700</read_iops_sec> + <write_iops_sec>700</write_iops_sec> + </device> + </blkiotune> </domain> diff --git a/examples/xml/test/testnodeinline.xml b/examples/xml/test/testnodeinline.xml index 0ec0f1ace6..78f3c6a671 100644 --- a/examples/xml/test/testnodeinline.xml +++ b/examples/xml/test/testnodeinline.xml @@ -48,6 +48,17 @@ </disk> <graphics type="vnc" port="5904"/> </devices> + <blkiotune> + <weight>800</weight> + <device> + <path>/dev/hda</path> + <weight>700</weight> + <read_bytes_sec>700</read_bytes_sec> + <write_bytes_sec>700</write_bytes_sec> + <read_iops_sec>700</read_iops_sec> + <write_iops_sec>700</write_iops_sec> + </device> + </blkiotune> </domain> <domain type="test"> <name>fc4</name> diff --git a/tests/virshtest.c b/tests/virshtest.c index c1974c46cb..43daf8b9c2 100644 --- a/tests/virshtest.c +++ b/tests/virshtest.c @@ -22,6 +22,7 @@ main(void)
# define DOM_UUID "ef861801-45b9-11cb-88e3-afbfe5370493" # define SECURITY_LABEL "libvirt-test (enforcing)" +# define BLKIO_PARAMETER "/dev/hda,700"
static const char *dominfo_fc4 = "\ Id: 2\n\ @@ -43,6 +44,14 @@ static const char *domuuid_fc4 = DOM_UUID "\n\n"; static const char *domid_fc4 = "2\n\n"; static const char *domname_fc4 = "fc4\n\n"; static const char *domstate_fc4 = "running\n\n"; +static const char *blkioparameters = "\ +weight : 800\n\ +device_weight : " BLKIO_PARAMETER "\n\ +device_read_iops_sec: " BLKIO_PARAMETER "\n\ +device_write_iops_sec: " BLKIO_PARAMETER "\n\ +device_read_bytes_sec: " BLKIO_PARAMETER "\n\ +device_write_bytes_sec: " BLKIO_PARAMETER "\n\ +\n";
static int testFilterLine(char *buffer, const char *toRemove) @@ -250,6 +259,25 @@ static int testCompareDomstateByName(const void *data G_GNUC_UNUSED) return testCompareOutputLit(exp, NULL, argv); }
+static int testCompareGetBlkioParameters(const void *data G_GNUC_UNUSED) +{ + const char *const argv[] = { VIRSH_CUSTOM, "blkiotune", "fv0", NULL }; + const char *exp = blkioparameters; + return testCompareOutputLit(exp, NULL, argv); +} + +static int testCompareSetBlkioParameters(const void *data G_GNUC_UNUSED) +{ + const char *const argv[] = { VIRSH_CUSTOM, "blkiotune", "fv0", + "--device-weights", "/dev/hda,500", + "--device-read-iops-sec", "/dev/hda,1000", + "--device-write-iops-sec", "/dev/hda,1000", + "--device-read-bytes-sec", "/dev/hda,26214400", + "--device-write-bytes-sec", "/dev/hda,26214400", NULL }; + const char *exp = "\n"; + return testCompareOutputLit(exp, NULL, argv); +} + struct testInfo { const char *const *argv; const char *result; @@ -334,6 +362,14 @@ mymain(void) testCompareDomstateByName, NULL) != 0) ret = -1;
+ if (virTestRun("virsh blkiotune (get parameters)", + testCompareGetBlkioParameters, NULL) != 0) + ret = -1; + + if (virTestRun("virsh blkiotune (set parameters)", + testCompareSetBlkioParameters, NULL) != 0) + ret = -1; +
Patches are fine, but please rebase them. I would also appreciate testing setting some different value and then checking it was set.
Thanks for the review! I will send v2 soon with improvements in tests.
/* It's a bit awkward listing result before argument, but that's a * limitation of C99 vararg macros. */ # define DO_TEST(i, result, ...) \ -- 2.32.0

On Tue, 2021-07-13 at 13:42 +0800, Luke Yue wrote:
- Implement virDomainGetBlkioParameters - Implement virDomainSetBlkioParameters - Add tests for these APIs
Luke Yue (3): test_driver: Implement virDomainGetBlkioParameters test_driver: Implement virDomainSetBlkioParameters tests: Test BlkioParameters related functions for test driver
examples/xml/test/testdomfv0.xml | 11 ++++ examples/xml/test/testnodeinline.xml | 11 ++++ src/test/meson.build | 1 + src/test/test_driver.c | 96 ++++++++++++++++++++++++++++ tests/virshtest.c | 36 +++++++++++ 5 files changed, 155 insertions(+)
Polite ping
participants (2)
-
Luke Yue
-
Martin Kletzander