[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL for-2.9 03/17] test-keyval: Cover alternate and 'any'
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PULL for-2.9 03/17] test-keyval: Cover alternate and 'any' type |
Date: |
Wed, 22 Mar 2017 17:05:34 +0100 |
Signed-off-by: Markus Armbruster <address@hidden>
Message-Id: <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
---
tests/Makefile.include | 2 +-
tests/test-keyval.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 54 insertions(+), 1 deletion(-)
diff --git a/tests/Makefile.include b/tests/Makefile.include
index 402e71c..86f9490 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -736,7 +736,7 @@ tests/vhost-user-test$(EXESUF): tests/vhost-user-test.o
$(test-util-obj-y) \
$(chardev-obj-y)
tests/qemu-iotests/socket_scm_helper$(EXESUF):
tests/qemu-iotests/socket_scm_helper.o
tests/test-qemu-opts$(EXESUF): tests/test-qemu-opts.o $(test-util-obj-y)
-tests/test-keyval$(EXESUF): tests/test-keyval.o $(test-util-obj-y)
+tests/test-keyval$(EXESUF): tests/test-keyval.o $(test-util-obj-y)
$(test-qapi-obj-y)
tests/test-write-threshold$(EXESUF): tests/test-write-threshold.o
$(test-block-obj-y)
tests/test-netfilter$(EXESUF): tests/test-netfilter.o $(qtest-obj-y)
tests/test-filter-mirror$(EXESUF): tests/test-filter-mirror.o $(qtest-obj-y)
diff --git a/tests/test-keyval.c b/tests/test-keyval.c
index e97f6d5..ba19560 100644
--- a/tests/test-keyval.c
+++ b/tests/test-keyval.c
@@ -14,6 +14,7 @@
#include "qapi/error.h"
#include "qapi/qmp/qstring.h"
#include "qapi/qobject-input-visitor.h"
+#include "test-qapi-visit.h"
#include "qemu/cutils.h"
#include "qemu/option.h"
@@ -608,6 +609,56 @@ static void test_keyval_visit_optional(void)
visit_free(v);
}
+static void test_keyval_visit_alternate(void)
+{
+ Error *err = NULL;
+ Visitor *v;
+ QDict *qdict;
+ AltNumStr *ans;
+ AltNumInt *ani;
+
+ /*
+ * Can't do scalar alternate variants other than string. You get
+ * the string variant if there is one, else an error.
+ */
+ qdict = keyval_parse("a=1,b=2", NULL, &error_abort);
+ v = qobject_input_visitor_new_keyval(QOBJECT(qdict));
+ QDECREF(qdict);
+ visit_start_struct(v, NULL, NULL, 0, &error_abort);
+ visit_type_AltNumStr(v, "a", &ans, &error_abort);
+ g_assert_cmpint(ans->type, ==, QTYPE_QSTRING);
+ g_assert_cmpstr(ans->u.s, ==, "1");
+ visit_type_AltNumInt(v, "a", &ani, &err);
+ error_free_or_abort(&err);
+ visit_end_struct(v, NULL);
+ visit_free(v);
+}
+
+static void test_keyval_visit_any(void)
+{
+ Visitor *v;
+ QDict *qdict;
+ QObject *any;
+ QList *qlist;
+ QString *qstr;
+
+ qdict = keyval_parse("a.0=null,a.1=1", NULL, &error_abort);
+ v = qobject_input_visitor_new_keyval(QOBJECT(qdict));
+ QDECREF(qdict);
+ visit_start_struct(v, NULL, NULL, 0, &error_abort);
+ visit_type_any(v, "a", &any, &error_abort);
+ qlist = qobject_to_qlist(any);
+ g_assert(qlist);
+ qstr = qobject_to_qstring(qlist_pop(qlist));
+ g_assert_cmpstr(qstring_get_str(qstr), ==, "null");
+ qstr = qobject_to_qstring(qlist_pop(qlist));
+ g_assert_cmpstr(qstring_get_str(qstr), ==, "1");
+ g_assert(qlist_empty(qlist));
+ visit_check_struct(v, &error_abort);
+ visit_end_struct(v, NULL);
+ visit_free(v);
+}
+
int main(int argc, char *argv[])
{
g_test_init(&argc, &argv, NULL);
@@ -619,6 +670,8 @@ int main(int argc, char *argv[])
g_test_add_func("/keyval/visit/dict", test_keyval_visit_dict);
g_test_add_func("/keyval/visit/list", test_keyval_visit_list);
g_test_add_func("/keyval/visit/optional", test_keyval_visit_optional);
+ g_test_add_func("/keyval/visit/alternate", test_keyval_visit_alternate);
+ g_test_add_func("/keyval/visit/any", test_keyval_visit_any);
g_test_run();
return 0;
}
--
2.7.4
- [Qemu-devel] [PULL for-2.9 01/17] test-keyval: Tweaks to improve list coverage, (continued)
- [Qemu-devel] [PULL for-2.9 01/17] test-keyval: Tweaks to improve list coverage, Markus Armbruster, 2017/03/22
- [Qemu-devel] [PULL for-2.9 17/17] qapi: Fix QemuOpts visitor regression on unvisited input, Markus Armbruster, 2017/03/22
- [Qemu-devel] [PULL for-2.9 09/17] tests/qapi-schema: Make test-qapi.py print docs again, Markus Armbruster, 2017/03/22
- [Qemu-devel] [PULL for-2.9 05/17] MAINTAINERS: Add myself for files I touched recently, Markus Armbruster, 2017/03/22
- [Qemu-devel] [PULL for-2.9 10/17] tests/qapi-schema: Systematic positive doc comment tests, Markus Armbruster, 2017/03/22
- [Qemu-devel] [PULL for-2.9 04/17] keyval: Document issues with 'any' and alternate types, Markus Armbruster, 2017/03/22
- [Qemu-devel] [PULL for-2.9 11/17] qapi2texi: Fix translation of *strong* and _emphasized_, Markus Armbruster, 2017/03/22
- [Qemu-devel] [PULL for-2.9 06/17] qapi: Drop excessive Make dependencies on qapi2texi.py, Markus Armbruster, 2017/03/22
- [Qemu-devel] [PULL for-2.9 15/17] tests: Expose regression in QemuOpts visitor, Markus Armbruster, 2017/03/22
- [Qemu-devel] [PULL for-2.9 08/17] qapi: Drop unused QAPIDoc member optional, Markus Armbruster, 2017/03/22
- [Qemu-devel] [PULL for-2.9 03/17] test-keyval: Cover alternate and 'any' type,
Markus Armbruster <=