[PATCH v2 1/3] test_driver: Implement virDomainGetMessages
Luke Yue
lukedyue at gmail.com
Mon Jun 28 02:45:38 UTC 2021
On Thu, 2021-06-24 at 17:19 +0200, Martin Kletzander wrote:
> On Thu, Jun 24, 2021 at 06:59:59PM +0800, Luke Yue wrote:
> > Signed-off-by: Luke Yue <lukedyue at gmail.com>
> > ---
> > src/test/test_driver.c | 53
> > ++++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 53 insertions(+)
> >
> > diff --git a/src/test/test_driver.c b/src/test/test_driver.c
> > index 65710b78ef..dff96bceb6 100644
> > --- a/src/test/test_driver.c
> > +++ b/src/test/test_driver.c
> > @@ -9331,6 +9331,58 @@
> > testDomainCheckpointDelete(virDomainCheckpointPtr checkpoint,
> > return ret;
> > }
> >
> > +static int
> > +testDomainGetMessages(virDomainPtr dom,
> > + char ***msgs,
> > + unsigned int flags)
> > +{
> > + virDomainObj *vm = NULL;
> > + int rv = -1;
> > + size_t i, n;
> > + int nmsgs;
> > +
> > + virCheckFlags(VIR_DOMAIN_MESSAGE_DEPRECATION |
> > + VIR_DOMAIN_MESSAGE_TAINTING, -1);
> > +
> > + if (!(vm = testDomObjFromDomain(dom)))
> > + return -1;
> > +
> > + *msgs = NULL;
> > + nmsgs = 0;
> > + n = 0;
> > +
> > + if (!flags || (flags & VIR_DOMAIN_MESSAGE_TAINTING)) {
> > + nmsgs += __builtin_popcount(vm->taint);
> > + *msgs = g_renew(char *, *msgs, nmsgs+1);
> > +
> > + for (i = 0; i < VIR_DOMAIN_TAINT_LAST; i++) {
> > + if (vm->taint & (1 << i)) {
> > + (*msgs)[n++] = g_strdup_printf(
> > + _("tainted: %s"),
> > + _(virDomainTaintMessageTypeToString(i)));
> > + }
> > + }
> > + }
> > +
> > + if (!flags || (flags & VIR_DOMAIN_MESSAGE_DEPRECATION)) {
> > + nmsgs += vm->ndeprecations;
> > + *msgs = g_renew(char *, *msgs, nmsgs+1);
> > +
> > + for (i = 0; i < vm->ndeprecations; i++) {
> > + (*msgs)[n++] = g_strdup_printf(
> > + _("deprecated configuration: %s"),
> > + vm->deprecations[i]);
> > + }
> > + }
> > +
> > + (*msgs)[nmsgs] = NULL;
> > +
> > + rv = nmsgs;
> > +
> > + virDomainObjEndAPI(&vm);
> > + return rv;
> > +}
> > +
>
> As I mentioned in the review for v1, it is nice that someone can
> check how this
> API behaves without spinning up a VM, just using the test driver.
> However most
> of this code is copy-paste from the qemu driver and can hence be
> extracted to a
> separate function which would be called from both drivers (and maybe
> more than
> the ones mentioned here are using the same logic). That would make
> the codebase
> smaller, the library smaller, it would keep the test driver updated
> and it would
> actually test the codepath used in the qemu driver.
> >
I'm sorry, I forgot that. So if I want to extract a function like below
```
int
virDomainGetMessagesFromVM(virDomainObj *vm,
char **msgs,
unsigned int flags)
{
size_t i, n;
int nmsgs;
int rv = -1;
*msgs = NULL;
nmsgs = 0;
n = 0;
...
rv = nmsgs;
return rv;
}
```
Where should I place this function? In `domain_conf.c` or somewhere
else?
Thanks,
Luke
More information about the libvir-list
mailing list