Patchwork qdev-monitor-test: simplify using g_assert_cmpstr()

login
register
mail settings
Submitter Stefan Hajnoczi
Date Dec. 18, 2013, 4:34 p.m.
Message ID <1387384489-25671-1-git-send-email-stefanha@redhat.com>
Download mbox | patch
Permalink /patch/302974/
State New
Headers show

Comments

Stefan Hajnoczi - Dec. 18, 2013, 4:34 p.m.
Use g_assert_cmpstr() instead of combining g_assert() and strcmp(3).
This simplifies the code since we no longer have to play games to
distinguish NULL from "" using "(null)".

gcc extension haters will also be happy that ?: was dropped.

Suggested-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 tests/qdev-monitor-test.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)
Markus Armbruster - Dec. 18, 2013, 5:11 p.m.
Stefan Hajnoczi <stefanha@redhat.com> writes:

> Use g_assert_cmpstr() instead of combining g_assert() and strcmp(3).
> This simplifies the code since we no longer have to play games to
> distinguish NULL from "" using "(null)".
>
> gcc extension haters will also be happy that ?: was dropped.
>
> Suggested-by: Markus Armbruster <armbru@redhat.com>
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> ---
>  tests/qdev-monitor-test.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/tests/qdev-monitor-test.c b/tests/qdev-monitor-test.c
> index ba7f9cc..eefaab8 100644
> --- a/tests/qdev-monitor-test.c
> +++ b/tests/qdev-monitor-test.c
> @@ -32,8 +32,9 @@ static void test_device_add(void)
>                     "}}");
>      g_assert(response);
>      error = qdict_get_qdict(response, "error");
> -    g_assert(!strcmp(qdict_get_try_str(error, "desc") ?: "",
> -                     "Device needs media, but drive is empty"));
> +    g_assert_cmpstr(qdict_get_try_str(error, "desc"),
> +                    ==,
> +                    "Device needs media, but drive is empty");
>      QDECREF(response);
>  
>      /* Delete the drive */

Outside this patch's scope, but here goes anyway: why do we test the
value of member desc?  Isn't that awfully fragile?

It broke once already, in Andreas's commit 75884af "virtio-blk: Convert
to QOM realize".  Andreas, do you remember why you tossed the class ==
GenericError check instead of the desc check?

> @@ -42,7 +43,7 @@ static void test_device_add(void)
>                     "   \"command-line\": \"drive_del drive0\""
>                     "}}");
>      g_assert(response);
> -    g_assert(!strcmp(qdict_get_try_str(response, "return") ?: "(null)", ""));
> +    g_assert_cmpstr(qdict_get_try_str(response, "return"), ==, "");
>      QDECREF(response);
>  
>      /* Try to re-add the drive.  This fails with duplicate IDs if a leaked
> @@ -53,8 +54,7 @@ static void test_device_add(void)
>                     "   \"command-line\": \"drive_add pci-addr=auto if=none,id=drive0\""
>                     "}}");
>      g_assert(response);
> -    g_assert(!strcmp(qdict_get_try_str(response, "return") ?: "",
> -                     "OK\r\n"));
> +    g_assert_cmpstr(qdict_get_try_str(response, "return"), ==, "OK\r\n");
>      QDECREF(response);
>  
>      qtest_end();

Reviewed-by: Markus Armbruster <armbru@redhat.com>
Andreas Färber - Dec. 18, 2013, 5:49 p.m.
Am 18.12.2013 18:11, schrieb Markus Armbruster:
> Stefan Hajnoczi <stefanha@redhat.com> writes:
> 
>> Use g_assert_cmpstr() instead of combining g_assert() and strcmp(3).
>> This simplifies the code since we no longer have to play games to
>> distinguish NULL from "" using "(null)".
>>
>> gcc extension haters will also be happy that ?: was dropped.
>>
>> Suggested-by: Markus Armbruster <armbru@redhat.com>
>> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
>> ---
>>  tests/qdev-monitor-test.c | 10 +++++-----
>>  1 file changed, 5 insertions(+), 5 deletions(-)
>>
>> diff --git a/tests/qdev-monitor-test.c b/tests/qdev-monitor-test.c
>> index ba7f9cc..eefaab8 100644
>> --- a/tests/qdev-monitor-test.c
>> +++ b/tests/qdev-monitor-test.c
>> @@ -32,8 +32,9 @@ static void test_device_add(void)
>>                     "}}");
>>      g_assert(response);
>>      error = qdict_get_qdict(response, "error");
>> -    g_assert(!strcmp(qdict_get_try_str(error, "desc") ?: "",
>> -                     "Device needs media, but drive is empty"));
>> +    g_assert_cmpstr(qdict_get_try_str(error, "desc"),
>> +                    ==,
>> +                    "Device needs media, but drive is empty");
>>      QDECREF(response);
>>  
>>      /* Delete the drive */
> 
> Outside this patch's scope, but here goes anyway: why do we test the
> value of member desc?  Isn't that awfully fragile?
> 
> It broke once already, in Andreas's commit 75884af "virtio-blk: Convert
> to QOM realize".  Andreas, do you remember why you tossed the class ==
> GenericError check instead of the desc check?

/me points to bonzini, who rebased it on my behalf. :)

I do agree that testing error descriptions is fragile in that people may
not think of running make check on a trivial textual change, e.g. typo fix.

Andreas

> 
>> @@ -42,7 +43,7 @@ static void test_device_add(void)
>>                     "   \"command-line\": \"drive_del drive0\""
>>                     "}}");
>>      g_assert(response);
>> -    g_assert(!strcmp(qdict_get_try_str(response, "return") ?: "(null)", ""));
>> +    g_assert_cmpstr(qdict_get_try_str(response, "return"), ==, "");
>>      QDECREF(response);
>>  
>>      /* Try to re-add the drive.  This fails with duplicate IDs if a leaked
>> @@ -53,8 +54,7 @@ static void test_device_add(void)
>>                     "   \"command-line\": \"drive_add pci-addr=auto if=none,id=drive0\""
>>                     "}}");
>>      g_assert(response);
>> -    g_assert(!strcmp(qdict_get_try_str(response, "return") ?: "",
>> -                     "OK\r\n"));
>> +    g_assert_cmpstr(qdict_get_try_str(response, "return"), ==, "OK\r\n");
>>      QDECREF(response);
>>  
>>      qtest_end();
> 
> Reviewed-by: Markus Armbruster <armbru@redhat.com>
>
Andreas Färber - Dec. 18, 2013, 6:31 p.m.
Am 18.12.2013 17:34, schrieb Stefan Hajnoczi:
> Use g_assert_cmpstr() instead of combining g_assert() and strcmp(3).

I vaguely remember that some such handy function was introduced only
after the minimum GLib version we require. Did you check on that?
But IIRC we already have higher requirements for qtest that for the
non-check code so it might not really matter...

Andreas

> This simplifies the code since we no longer have to play games to
> distinguish NULL from "" using "(null)".
> 
> gcc extension haters will also be happy that ?: was dropped.
> 
> Suggested-by: Markus Armbruster <armbru@redhat.com>
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> ---
>  tests/qdev-monitor-test.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/tests/qdev-monitor-test.c b/tests/qdev-monitor-test.c
> index ba7f9cc..eefaab8 100644
> --- a/tests/qdev-monitor-test.c
> +++ b/tests/qdev-monitor-test.c
> @@ -32,8 +32,9 @@ static void test_device_add(void)
>                     "}}");
>      g_assert(response);
>      error = qdict_get_qdict(response, "error");
> -    g_assert(!strcmp(qdict_get_try_str(error, "desc") ?: "",
> -                     "Device needs media, but drive is empty"));
> +    g_assert_cmpstr(qdict_get_try_str(error, "desc"),
> +                    ==,
> +                    "Device needs media, but drive is empty");
>      QDECREF(response);
>  
>      /* Delete the drive */
> @@ -42,7 +43,7 @@ static void test_device_add(void)
>                     "   \"command-line\": \"drive_del drive0\""
>                     "}}");
>      g_assert(response);
> -    g_assert(!strcmp(qdict_get_try_str(response, "return") ?: "(null)", ""));
> +    g_assert_cmpstr(qdict_get_try_str(response, "return"), ==, "");
>      QDECREF(response);
>  
>      /* Try to re-add the drive.  This fails with duplicate IDs if a leaked
> @@ -53,8 +54,7 @@ static void test_device_add(void)
>                     "   \"command-line\": \"drive_add pci-addr=auto if=none,id=drive0\""
>                     "}}");
>      g_assert(response);
> -    g_assert(!strcmp(qdict_get_try_str(response, "return") ?: "",
> -                     "OK\r\n"));
> +    g_assert_cmpstr(qdict_get_try_str(response, "return"), ==, "OK\r\n");
>      QDECREF(response);
>  
>      qtest_end();
>
Stefan Hajnoczi - Dec. 19, 2013, 3:38 p.m.
On Wed, Dec 18, 2013 at 07:31:48PM +0100, Andreas Färber wrote:
> Am 18.12.2013 17:34, schrieb Stefan Hajnoczi:
> > Use g_assert_cmpstr() instead of combining g_assert() and strcmp(3).
> 
> I vaguely remember that some such handy function was introduced only
> after the minimum GLib version we require. Did you check on that?
> But IIRC we already have higher requirements for qtest that for the
> non-check code so it might not really matter...

Yes, before using it I did git grep g_assert_cmpstr.  It's already used
in many other test cases like tests/check-qjson.c.

Stefan

Patch

diff --git a/tests/qdev-monitor-test.c b/tests/qdev-monitor-test.c
index ba7f9cc..eefaab8 100644
--- a/tests/qdev-monitor-test.c
+++ b/tests/qdev-monitor-test.c
@@ -32,8 +32,9 @@  static void test_device_add(void)
                    "}}");
     g_assert(response);
     error = qdict_get_qdict(response, "error");
-    g_assert(!strcmp(qdict_get_try_str(error, "desc") ?: "",
-                     "Device needs media, but drive is empty"));
+    g_assert_cmpstr(qdict_get_try_str(error, "desc"),
+                    ==,
+                    "Device needs media, but drive is empty");
     QDECREF(response);
 
     /* Delete the drive */
@@ -42,7 +43,7 @@  static void test_device_add(void)
                    "   \"command-line\": \"drive_del drive0\""
                    "}}");
     g_assert(response);
-    g_assert(!strcmp(qdict_get_try_str(response, "return") ?: "(null)", ""));
+    g_assert_cmpstr(qdict_get_try_str(response, "return"), ==, "");
     QDECREF(response);
 
     /* Try to re-add the drive.  This fails with duplicate IDs if a leaked
@@ -53,8 +54,7 @@  static void test_device_add(void)
                    "   \"command-line\": \"drive_add pci-addr=auto if=none,id=drive0\""
                    "}}");
     g_assert(response);
-    g_assert(!strcmp(qdict_get_try_str(response, "return") ?: "",
-                     "OK\r\n"));
+    g_assert_cmpstr(qdict_get_try_str(response, "return"), ==, "OK\r\n");
     QDECREF(response);
 
     qtest_end();