[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 20/26] test-string-input-visitor: Improve list covera
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PULL 20/26] test-string-input-visitor: Improve list coverage |
Date: |
Tue, 28 Feb 2017 20:06:30 +0100 |
Lists with elements above INT64_MAX don't work (known bug). Empty
lists don't work (weird).
Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Message-Id: <address@hidden>
---
tests/test-string-input-visitor.c | 85 +++++++++++++++++++++++++++++++++------
1 file changed, 72 insertions(+), 13 deletions(-)
diff --git a/tests/test-string-input-visitor.c
b/tests/test-string-input-visitor.c
index a32828c..72f8732 100644
--- a/tests/test-string-input-visitor.c
+++ b/tests/test-string-input-visitor.c
@@ -65,31 +65,90 @@ static void test_visitor_in_int(TestInputVisitorData *data,
error_free_or_abort(&err);
}
+static void check_ilist(Visitor *v, int64_t *expected, size_t n)
+{
+ int64List *res = NULL;
+ int64List *tail;
+ int i;
+
+ visit_type_int64List(v, NULL, &res, &error_abort);
+ tail = res;
+ for (i = 0; i < n; i++) {
+ g_assert(tail);
+ g_assert_cmpint(tail->value, ==, expected[i]);
+ tail = tail->next;
+ }
+ g_assert(!tail);
+
+ qapi_free_int64List(res);
+}
+
+static void check_ulist(Visitor *v, uint64_t *expected, size_t n)
+{
+ uint64List *res = NULL;
+ uint64List *tail;
+ int i;
+
+ /* BUG: unsigned numbers above INT64_MAX don't work */
+ for (i = 0; i < n; i++) {
+ if (expected[i] > INT64_MAX) {
+ Error *err = NULL;
+ visit_type_uint64List(v, NULL, &res, &err);
+ error_free_or_abort(&err);
+ return;
+ }
+ }
+
+ visit_type_uint64List(v, NULL, &res, &error_abort);
+ tail = res;
+ for (i = 0; i < n; i++) {
+ g_assert(tail);
+ g_assert_cmpuint(tail->value, ==, expected[i]);
+ tail = tail->next;
+ }
+ g_assert(!tail);
+
+ qapi_free_uint64List(res);
+}
+
static void test_visitor_in_intList(TestInputVisitorData *data,
const void *unused)
{
- int64_t value[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 20};
- int16List *res = NULL, *tmp;
+ /* Note: the visitor *sorts* ranges *unsigned* */
+ int64_t expect1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 20 };
+ int64_t expect2[] = { 32767, -32768, -32767 };
+ int64_t expect3[] = { INT64_MAX, INT64_MIN };
+ uint64_t expect4[] = { UINT64_MAX };
Error *err = NULL;
+ int64List *res = NULL;
Visitor *v;
- int i = 0;
+
+ /* Valid lists */
v = visitor_input_test_init(data, "1,2,0,2-4,20,5-9,1-8");
+ check_ilist(v, expect1, ARRAY_SIZE(expect1));
- visit_type_int16List(v, NULL, &res, &error_abort);
- tmp = res;
- while (i < sizeof(value) / sizeof(value[0])) {
- g_assert(tmp);
- g_assert_cmpint(tmp->value, ==, value[i++]);
- tmp = tmp->next;
- }
- g_assert(!tmp);
+ v = visitor_input_test_init(data, "32767,-32768--32767");
+ check_ilist(v, expect2, ARRAY_SIZE(expect2));
- qapi_free_int16List(res);
+ v = visitor_input_test_init(data,
+ "-9223372036854775808,9223372036854775807");
+ check_ilist(v, expect3, ARRAY_SIZE(expect3));
+
+ v = visitor_input_test_init(data, "18446744073709551615");
+ check_ulist(v, expect4, ARRAY_SIZE(expect4));
+
+ /* Empty list is invalid (weird) */
+
+ v = visitor_input_test_init(data, "");
+ visit_type_int64List(v, NULL, &res, &err);
+ error_free_or_abort(&err);
+
+ /* Not a list */
v = visitor_input_test_init(data, "not an int list");
- visit_type_int16List(v, NULL, &res, &err);
+ visit_type_int64List(v, NULL, &res, &err);
error_free_or_abort(&err);
g_assert(!res);
}
--
2.7.4
- [Qemu-devel] [PULL 06/26] qmp: Drop duplicated QMP command object checks, (continued)
- [Qemu-devel] [PULL 06/26] qmp: Drop duplicated QMP command object checks, Markus Armbruster, 2017/02/28
- [Qemu-devel] [PULL 01/26] qga: Fix crash on non-dictionary QMP argument, Markus Armbruster, 2017/02/28
- [Qemu-devel] [PULL 07/26] qmp: Eliminate silly QERR_QMP_* macros, Markus Armbruster, 2017/02/28
- [Qemu-devel] [PULL 09/26] qapi: Improve a QObject input visitor error message, Markus Armbruster, 2017/02/28
- [Qemu-devel] [PULL 05/26] qmp: Clean up how we enforce capability negotiation, Markus Armbruster, 2017/02/28
- [Qemu-devel] [PULL 13/26] qapi: Drop string input visitor method optional(), Markus Armbruster, 2017/02/28
- [Qemu-devel] [PULL 25/26] qapi: Fix object input visit beyond end of list, Markus Armbruster, 2017/02/28
- [Qemu-devel] [PULL 22/26] test-qobject-input-visitor: Cover missing nested struct member, Markus Armbruster, 2017/02/28
- [Qemu-devel] [PULL 19/26] test-string-input-visitor: Tear down existing test automatically, Markus Armbruster, 2017/02/28
- [Qemu-devel] [PULL 15/26] qom: Make object_property_set_qobject()'s input visitor strict, Markus Armbruster, 2017/02/28
- [Qemu-devel] [PULL 20/26] test-string-input-visitor: Improve list coverage,
Markus Armbruster <=
- [Qemu-devel] [PULL 26/26] qapi: Improve qobject visitor documentation, Markus Armbruster, 2017/02/28
- [Qemu-devel] [PULL 18/26] tests-qobject-input-strict: Merge into test-qobject-input-visitor, Markus Armbruster, 2017/02/28
- [Qemu-devel] [PULL 23/26] qapi: Make input visitors detect unvisited list tails, Markus Armbruster, 2017/02/28
- [Qemu-devel] [PULL 02/26] libqtest: Work around a "QMP wants a newline" bug, Markus Armbruster, 2017/02/28
- [Qemu-devel] [PULL 08/26] qmp: Improve QMP dispatch error messages, Markus Armbruster, 2017/02/28
- [Qemu-devel] [PULL 14/26] qapi: Make string input and opts visitor require non-null input, Markus Armbruster, 2017/02/28
- [Qemu-devel] [PULL 17/26] qapi: Drop unused non-strict qobject input visitor, Markus Armbruster, 2017/02/28
- [Qemu-devel] [PULL 24/26] tests: Cover input visit beyond end of list, Markus Armbruster, 2017/02/28
- [Qemu-devel] [PULL 12/26] qapi: Improve qobject input visitor error reporting, Markus Armbruster, 2017/02/28
- [Qemu-devel] [PULL 16/26] test-qobject-input-visitor: Use strict visitor, Markus Armbruster, 2017/02/28