[PATCH] test: unit test for qemuMonitorJSONAnnounceSelf()

Laine Stump via Devel posted 1 patch 3 days, 9 hours ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/20260604211911.1942137-1-laine@redhat.com
tests/qemumonitorjsontest.c | 79 +++++++++++++++++++++++++++++++++++++
1 file changed, 79 insertions(+)
[PATCH] test: unit test for qemuMonitorJSONAnnounceSelf()
Posted by Laine Stump via Devel 3 days, 9 hours ago
From: Laine Stump <laine@redhat.com>

Does this do what's needed for testing? (I haven't added any cases to
qemumonitorjsontest before, so it was a bit of an adventure to (I
hope) figure it out).

If this is correct, I'll squash it into Patch 1.

Signed-off-by: Laine Stump <laine@redhat.com>
---
 tests/qemumonitorjsontest.c | 79 +++++++++++++++++++++++++++++++++++++
 1 file changed, 79 insertions(+)

diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c
index e34dbad7cd..f59b97c1c3 100644
--- a/tests/qemumonitorjsontest.c
+++ b/tests/qemumonitorjsontest.c
@@ -2776,6 +2776,84 @@ testQemuMonitorJSONGetSEVInfo(const void *opaque)
 }
 
 
+static int
+testQemuMonitorJSONAnnounceInterface(const void *opaque)
+{
+    const testGenericData *data = opaque;
+    g_autoptr(qemuMonitorTest) test = NULL;
+
+    if (!(test = qemuMonitorTestNewSchema(data->xmlopt, data->schema)))
+        return -1;
+
+    /* Test 1 - all parameters are default */
+    if (qemuMonitorTestAddItemVerbatim(test,
+                                       "{"
+                                       "  \"execute\": \"announce-self\","
+                                       "  \"arguments\": {"
+                                       "    \"initial\": 50,"
+                                       "    \"max\": 550,"
+                                       "    \"rounds\": 5,"
+                                       "    \"step\": 50"
+                                       "  },"
+                                       "  \"id\":\"libvirt-1\""
+                                       "}",
+                                       NULL,
+                                       "{\"return\":{}}") < 0) {
+        return -1;
+    }
+
+
+    if (qemuMonitorJSONAnnounceSelf(qemuMonitorTestGetMonitor(test), NULL, 0, 0, 0, 0) < 0)
+        return -1;
+
+    /* Test 2 - interface device set, everything else default */
+    if (qemuMonitorTestAddItemVerbatim(test,
+                                       "{"
+                                       "  \"execute\": \"announce-self\","
+                                       "  \"arguments\": {"
+                                       "    \"interfaces\":[\"net0\"],"
+                                       "    \"initial\": 50,"
+                                       "    \"max\": 550,"
+                                       "    \"rounds\": 5,"
+                                       "    \"step\": 50"
+                                       "  },"
+                                       "  \"id\":\"libvirt-2\""
+                                       "}",
+                                       NULL,
+                                       "{\"return\":{}}") < 0) {
+        return -1;
+    }
+
+
+    if (qemuMonitorJSONAnnounceSelf(qemuMonitorTestGetMonitor(test), "net0", 0, 0, 0, 0) < 0)
+        return -1;
+
+    /* Test 3 - all parameters explicitly set */
+    if (qemuMonitorTestAddItemVerbatim(test,
+                                       "{"
+                                       "  \"execute\": \"announce-self\","
+                                       "  \"arguments\": {"
+                                       "    \"interfaces\":[\"skid00\"],"
+                                       "    \"initial\": 23,"
+                                       "    \"max\": 54,"
+                                       "    \"rounds\": 867,"
+                                       "    \"step\": 5309"
+                                       "  },"
+                                       "  \"id\":\"libvirt-3\""
+                                       "}",
+                                       NULL,
+                                       "{\"return\":{}}") < 0) {
+        return -1;
+    }
+
+
+    if (qemuMonitorJSONAnnounceSelf(qemuMonitorTestGetMonitor(test), "skid00", 23, 54, 867, 5309) < 0)
+        return -1;
+
+    return 0;
+}
+
+
 struct testQemuMonitorJSONGetGuestCPUData {
     const char *name;
     bool qomListGet;
@@ -2940,6 +3018,7 @@ mymain(void)
     DO_TEST(Transaction);
     DO_TEST(BlockExportAdd);
     DO_TEST(BlockdevReopen);
+    DO_TEST(AnnounceInterface);
     DO_TEST_SIMPLE("qmp_capabilities", qemuMonitorJSONSetCapabilities);
     DO_TEST_SIMPLE("system_powerdown", qemuMonitorJSONSystemPowerdown);
     DO_TEST_SIMPLE("system_reset", qemuMonitorJSONSystemReset);
-- 
2.54.0
Re: [PATCH] test: unit test for qemuMonitorJSONAnnounceSelf()
Posted by Peter Krempa via Devel 3 days, 1 hour ago
On Thu, Jun 04, 2026 at 17:17:01 -0400, Laine Stump wrote:
> From: Laine Stump <laine@redhat.com>
> 
> Does this do what's needed for testing? (I haven't added any cases to
> qemumonitorjsontest before, so it was a bit of an adventure to (I
> hope) figure it out).

Well, you did much more than I actually wanted and it's on me for not
being specific :).

It would be completely enough to just do the auto-generated tests
(GEN_TEST_FUNC, DO_TEST_GEN). Those, if you pass arguments which
excercise all parameters, are usually sufficient as they still do schema
validation.

Specifically 'qemuMonitorTestAddItemVerbatim' that you used is a bit
harder to maintain if you want to add new stuff later.

> 
> If this is correct, I'll squash it into Patch 1.

Anyways, it is correct; go ahead,

> 
> Signed-off-by: Laine Stump <laine@redhat.com>
> ---
>  tests/qemumonitorjsontest.c | 79 +++++++++++++++++++++++++++++++++++++
>  1 file changed, 79 insertions(+)
> 
> diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c
> index e34dbad7cd..f59b97c1c3 100644
> --- a/tests/qemumonitorjsontest.c
> +++ b/tests/qemumonitorjsontest.c
> @@ -2776,6 +2776,84 @@ testQemuMonitorJSONGetSEVInfo(const void *opaque)
>  }
>  
>  
> +static int
> +testQemuMonitorJSONAnnounceInterface(const void *opaque)
> +{
> +    const testGenericData *data = opaque;
> +    g_autoptr(qemuMonitorTest) test = NULL;
> +
> +    if (!(test = qemuMonitorTestNewSchema(data->xmlopt, data->schema)))
> +        return -1;
> +
> +    /* Test 1 - all parameters are default */
> +    if (qemuMonitorTestAddItemVerbatim(test,
> +                                       "{"
> +                                       "  \"execute\": \"announce-self\","
> +                                       "  \"arguments\": {"
> +                                       "    \"initial\": 50,"
> +                                       "    \"max\": 550,"
> +                                       "    \"rounds\": 5,"
> +                                       "    \"step\": 50"
> +                                       "  },"
> +                                       "  \"id\":\"libvirt-1\""
> +                                       "}",
> +                                       NULL,
> +                                       "{\"return\":{}}") < 0) {
> +        return -1;
> +    }
> +
> +
> +    if (qemuMonitorJSONAnnounceSelf(qemuMonitorTestGetMonitor(test), NULL, 0, 0, 0, 0) < 0)
> +        return -1;
> +
> +    /* Test 2 - interface device set, everything else default */
> +    if (qemuMonitorTestAddItemVerbatim(test,
> +                                       "{"
> +                                       "  \"execute\": \"announce-self\","
> +                                       "  \"arguments\": {"
> +                                       "    \"interfaces\":[\"net0\"],"
> +                                       "    \"initial\": 50,"
> +                                       "    \"max\": 550,"
> +                                       "    \"rounds\": 5,"
> +                                       "    \"step\": 50"
> +                                       "  },"
> +                                       "  \"id\":\"libvirt-2\""
> +                                       "}",
> +                                       NULL,
> +                                       "{\"return\":{}}") < 0) {
> +        return -1;
> +    }
> +
> +
> +    if (qemuMonitorJSONAnnounceSelf(qemuMonitorTestGetMonitor(test), "net0", 0, 0, 0, 0) < 0)
> +        return -1;
> +
> +    /* Test 3 - all parameters explicitly set */
> +    if (qemuMonitorTestAddItemVerbatim(test,
> +                                       "{"
> +                                       "  \"execute\": \"announce-self\","
> +                                       "  \"arguments\": {"
> +                                       "    \"interfaces\":[\"skid00\"],"
> +                                       "    \"initial\": 23,"
> +                                       "    \"max\": 54,"
> +                                       "    \"rounds\": 867,"
> +                                       "    \"step\": 5309"
> +                                       "  },"
> +                                       "  \"id\":\"libvirt-3\""
> +                                       "}",
> +                                       NULL,
> +                                       "{\"return\":{}}") < 0) {
> +        return -1;
> +    }
> +
> +
> +    if (qemuMonitorJSONAnnounceSelf(qemuMonitorTestGetMonitor(test), "skid00", 23, 54, 867, 5309) < 0)
> +        return -1;
> +
> +    return 0;
> +}
> +
> +
>  struct testQemuMonitorJSONGetGuestCPUData {
>      const char *name;
>      bool qomListGet;
> @@ -2940,6 +3018,7 @@ mymain(void)
>      DO_TEST(Transaction);
>      DO_TEST(BlockExportAdd);
>      DO_TEST(BlockdevReopen);
> +    DO_TEST(AnnounceInterface);
>      DO_TEST_SIMPLE("qmp_capabilities", qemuMonitorJSONSetCapabilities);
>      DO_TEST_SIMPLE("system_powerdown", qemuMonitorJSONSystemPowerdown);
>      DO_TEST_SIMPLE("system_reset", qemuMonitorJSONSystemReset);
> -- 
> 2.54.0
> 

Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Re: [PATCH] test: unit test for qemuMonitorJSONAnnounceSelf()
Posted by Laine Stump via Devel 2 days, 15 hours ago
On 6/5/26 12:44 AM, Peter Krempa via Devel wrote:
> On Thu, Jun 04, 2026 at 17:17:01 -0400, Laine Stump wrote:
>> From: Laine Stump <laine@redhat.com>
>>
>> Does this do what's needed for testing? (I haven't added any cases to
>> qemumonitorjsontest before, so it was a bit of an adventure to (I
>> hope) figure it out).
> 
> Well, you did much more than I actually wanted and it's on me for not
> being specific :).
> 
> It would be completely enough to just do the auto-generated tests
> (GEN_TEST_FUNC, DO_TEST_GEN). Those, if you pass arguments which
> excercise all parameters, are usually sufficient as they still do schema
> validation.
> 
> Specifically 'qemuMonitorTestAddItemVerbatim' that you used is a bit
> harder to maintain if you want to add new stuff later.

I guess the one thing this more verbose test does is make sure that 
parameters left to the default do get the intended default value, and 
when a parameter *isn't* default that it is set properly. Otherwise 
definitely it looks like those other macros would be huge time savers.

> 
>>
>> If this is correct, I'll squash it into Patch 1.
> 
> Anyways, it is correct; go ahead,

Okay, thanks!

> 
>>
>> Signed-off-by: Laine Stump <laine@redhat.com>
>> ---
>>   tests/qemumonitorjsontest.c | 79 +++++++++++++++++++++++++++++++++++++
>>   1 file changed, 79 insertions(+)
>>
>> diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c
>> index e34dbad7cd..f59b97c1c3 100644
>> --- a/tests/qemumonitorjsontest.c
>> +++ b/tests/qemumonitorjsontest.c
>> @@ -2776,6 +2776,84 @@ testQemuMonitorJSONGetSEVInfo(const void *opaque)
>>   }
>>   
>>   
>> +static int
>> +testQemuMonitorJSONAnnounceInterface(const void *opaque)
>> +{
>> +    const testGenericData *data = opaque;
>> +    g_autoptr(qemuMonitorTest) test = NULL;
>> +
>> +    if (!(test = qemuMonitorTestNewSchema(data->xmlopt, data->schema)))
>> +        return -1;
>> +
>> +    /* Test 1 - all parameters are default */
>> +    if (qemuMonitorTestAddItemVerbatim(test,
>> +                                       "{"
>> +                                       "  \"execute\": \"announce-self\","
>> +                                       "  \"arguments\": {"
>> +                                       "    \"initial\": 50,"
>> +                                       "    \"max\": 550,"
>> +                                       "    \"rounds\": 5,"
>> +                                       "    \"step\": 50"
>> +                                       "  },"
>> +                                       "  \"id\":\"libvirt-1\""
>> +                                       "}",
>> +                                       NULL,
>> +                                       "{\"return\":{}}") < 0) {
>> +        return -1;
>> +    }
>> +
>> +
>> +    if (qemuMonitorJSONAnnounceSelf(qemuMonitorTestGetMonitor(test), NULL, 0, 0, 0, 0) < 0)
>> +        return -1;
>> +
>> +    /* Test 2 - interface device set, everything else default */
>> +    if (qemuMonitorTestAddItemVerbatim(test,
>> +                                       "{"
>> +                                       "  \"execute\": \"announce-self\","
>> +                                       "  \"arguments\": {"
>> +                                       "    \"interfaces\":[\"net0\"],"
>> +                                       "    \"initial\": 50,"
>> +                                       "    \"max\": 550,"
>> +                                       "    \"rounds\": 5,"
>> +                                       "    \"step\": 50"
>> +                                       "  },"
>> +                                       "  \"id\":\"libvirt-2\""
>> +                                       "}",
>> +                                       NULL,
>> +                                       "{\"return\":{}}") < 0) {
>> +        return -1;
>> +    }
>> +
>> +
>> +    if (qemuMonitorJSONAnnounceSelf(qemuMonitorTestGetMonitor(test), "net0", 0, 0, 0, 0) < 0)
>> +        return -1;
>> +
>> +    /* Test 3 - all parameters explicitly set */
>> +    if (qemuMonitorTestAddItemVerbatim(test,
>> +                                       "{"
>> +                                       "  \"execute\": \"announce-self\","
>> +                                       "  \"arguments\": {"
>> +                                       "    \"interfaces\":[\"skid00\"],"
>> +                                       "    \"initial\": 23,"
>> +                                       "    \"max\": 54,"
>> +                                       "    \"rounds\": 867,"
>> +                                       "    \"step\": 5309"
>> +                                       "  },"
>> +                                       "  \"id\":\"libvirt-3\""
>> +                                       "}",
>> +                                       NULL,
>> +                                       "{\"return\":{}}") < 0) {
>> +        return -1;
>> +    }
>> +
>> +
>> +    if (qemuMonitorJSONAnnounceSelf(qemuMonitorTestGetMonitor(test), "skid00", 23, 54, 867, 5309) < 0)
>> +        return -1;
>> +
>> +    return 0;
>> +}
>> +
>> +
>>   struct testQemuMonitorJSONGetGuestCPUData {
>>       const char *name;
>>       bool qomListGet;
>> @@ -2940,6 +3018,7 @@ mymain(void)
>>       DO_TEST(Transaction);
>>       DO_TEST(BlockExportAdd);
>>       DO_TEST(BlockdevReopen);
>> +    DO_TEST(AnnounceInterface);
>>       DO_TEST_SIMPLE("qmp_capabilities", qemuMonitorJSONSetCapabilities);
>>       DO_TEST_SIMPLE("system_powerdown", qemuMonitorJSONSystemPowerdown);
>>       DO_TEST_SIMPLE("system_reset", qemuMonitorJSONSystemReset);
>> -- 
>> 2.54.0
>>
> 
> Reviewed-by: Peter Krempa <pkrempa@redhat.com>
>