qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 2/3] libqtest: Add a generic function to run a c


From: Thomas Huth
Subject: Re: [Qemu-devel] [PATCH 2/3] libqtest: Add a generic function to run a callback function for every machine
Date: Tue, 28 Mar 2017 08:35:11 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0

On 27.03.2017 16:24, Dr. David Alan Gilbert wrote:
> * Thomas Huth (address@hidden) wrote:
>> Some tests need to run single tests for every available machine of the
>> current QEMU binary. To avoid code duplication, let's extract this
>> code that deals with 'query-machines' into a separate function.
>>
>> Signed-off-by: Thomas Huth <address@hidden>
> 
> Having queued it, it's failing my test.
> 
> The reason is that qom-tests.c has a blacklist which blacklists Xen;
> however your new generic function doesn't have the blacklist, so when
> you run HMP commands on all machines it tries to run it on Xen since
> my PC has the Xen libraries installed (so builds with Xen support) but
> isn't a Xen guest.
> 
> It fails with:
> xen be core: xen be core: can't connect to xenstored
> can't connect to xenstored
> xen_init_pv: xen backend core setup failed
> Broken pipe
> 
> I suggest you probably need to share the blacklist as well.
> 
> (Unqueued)
> 
> Dave
> 
>> ---
>>  tests/libqtest.c    | 30 +++++++++++++++++
>>  tests/libqtest.h    |  8 +++++
>>  tests/pc-cpu-test.c | 95 
>> ++++++++++++++++++++---------------------------------
>>  tests/qom-test.c    | 36 ++++----------------
>>  4 files changed, 80 insertions(+), 89 deletions(-)
>>
>> diff --git a/tests/libqtest.c b/tests/libqtest.c
>> index c9b2d76..d8b8066 100644
>> --- a/tests/libqtest.c
>> +++ b/tests/libqtest.c
>> @@ -938,3 +938,33 @@ bool qtest_big_endian(QTestState *s)
>>  {
>>      return s->big_endian;
>>  }
>> +
>> +void qtest_cb_for_every_machine(void (*cb)(const char *machine))
>> +{
>> +    QDict *response, *minfo;
>> +    QList *list;
>> +    const QListEntry *p;
>> +    QObject *qobj;
>> +    QString *qstr;
>> +    const char *mname;
>> +
>> +    qtest_start("-machine none");
>> +    response = qmp("{ 'execute': 'query-machines' }");
>> +    g_assert(response);
>> +    list = qdict_get_qlist(response, "return");
>> +    g_assert(list);
>> +
>> +    for (p = qlist_first(list); p; p = qlist_next(p)) {
>> +        minfo = qobject_to_qdict(qlist_entry_obj(p));
>> +        g_assert(minfo);
>> +        qobj = qdict_get(minfo, "name");
>> +        g_assert(qobj);
>> +        qstr = qobject_to_qstring(qobj);
>> +        g_assert(qstr);
>> +        mname = qstring_get_str(qstr);
>> +        cb(mname);
>> +    }
>> +
>> +    qtest_end();
>> +    QDECREF(response);
>> +}
[...]
>> diff --git a/tests/qom-test.c b/tests/qom-test.c
>> index d48f890..ab0595d 100644
>> --- a/tests/qom-test.c
>> +++ b/tests/qom-test.c
>> @@ -107,46 +107,22 @@ static void test_machine(gconstpointer data)
>>      g_free((void *)machine);
>>  }
>>  
>> -static void add_machine_test_cases(void)
>> +static void add_machine_test_case(const char *mname)
>>  {
>>      const char *arch = qtest_get_arch();
>> -    QDict *response, *minfo;
>> -    QList *list;
>> -    const QListEntry *p;
>> -    QObject *qobj;
>> -    QString *qstr;
>> -    const char *mname;
>>  
>> -    qtest_start("-machine none");
>> -    response = qmp("{ 'execute': 'query-machines' }");
>> -    g_assert(response);
>> -    list = qdict_get_qlist(response, "return");
>> -    g_assert(list);
>> -
>> -    for (p = qlist_first(list); p; p = qlist_next(p)) {
>> -        minfo = qobject_to_qdict(qlist_entry_obj(p));
>> -        g_assert(minfo);
>> -        qobj = qdict_get(minfo, "name");
>> -        g_assert(qobj);
>> -        qstr = qobject_to_qstring(qobj);
>> -        g_assert(qstr);
>> -        mname = qstring_get_str(qstr);
>> -        if (!is_blacklisted(arch, mname)) {
>> -            char *path = g_strdup_printf("qom/%s", mname);
>> -            qtest_add_data_func(path, g_strdup(mname), test_machine);
>> -            g_free(path);
>> -        }
>> +    if (!is_blacklisted(arch, mname)) {
>> +        char *path = g_strdup_printf("qom/%s", mname);
>> +        qtest_add_data_func(path, g_strdup(mname), test_machine);
>> +        g_free(path);
>>      }

Not sure what is going wrong here ... the "!is_blacklisted" check is
still here, so why is it trying to start a xen machine here?

Looks like I need to install those xen libraries here, too ...

 Thomas




reply via email to

[Prev in Thread] Current Thread [Next in Thread]