From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37442) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1avp8y-0006h7-I9 for qemu-devel@nongnu.org; Thu, 28 Apr 2016 12:50:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1avp8s-0005TS-DZ for qemu-devel@nongnu.org; Thu, 28 Apr 2016 12:50:24 -0400 Received: from mx1.redhat.com ([209.132.183.28]:48845) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1avp8s-0005TH-8n for qemu-devel@nongnu.org; Thu, 28 Apr 2016 12:50:18 -0400 From: Markus Armbruster References: <1461801715-24307-1-git-send-email-eblake@redhat.com> <1461801715-24307-16-git-send-email-eblake@redhat.com> Date: Thu, 28 Apr 2016 18:50:15 +0200 In-Reply-To: <1461801715-24307-16-git-send-email-eblake@redhat.com> (Eric Blake's message of "Wed, 27 Apr 2016 18:01:47 -0600") Message-ID: <87bn4the48.fsf@dusky.pond.sub.org> MIME-Version: 1.0 Content-Type: text/plain Subject: Re: [Qemu-devel] [PATCH v15 15/23] qmp: Support explicit null during visits List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Eric Blake Cc: qemu-devel@nongnu.org, Michael Roth Eric Blake writes: > Implement the new type_null() callback for the qmp input and > output visitors. While we don't yet have a use for this in QAPI > input (the generator will need some tweaks first), some > potential usages have already been discussed on the list. > Meanwhile, the output visitor could already output explicit null > via type_any, but this gives us finer control. > > At any rate, it's easy to test that we can round-trip an explicit > null through manual use of visit_type_null() wrapped by a virtual > visit_start_struct() walk, even if we can't do the visit in a > QAPI type. Repurpose the test_visitor_out_empty test, > particularly since a future patch will tighten semantics to > forbid use of qmp_output_get_qobject() without at least one > intervening visit_type_*. > > Signed-off-by: Eric Blake [...] > diff --git a/tests/test-qmp-input-visitor.c b/tests/test-qmp-input-visitor.c > index c039806..3b6ae92 100644 > --- a/tests/test-qmp-input-visitor.c > +++ b/tests/test-qmp-input-visitor.c > @@ -279,6 +279,30 @@ static void test_visitor_in_any(TestInputVisitorData *data, > qobject_decref(res); > } > > +static void test_visitor_in_null(TestInputVisitorData *data, > + const void *unused) > +{ > + Visitor *v; > + Error *err = NULL; > + char *tmp; > + > + /* > + * FIXME: Since QAPI doesn't know the 'null' type yet, we can't > + * test visit_type_null() by reading into a QAPI struct then > + * checking that it was populated correctly. The best we can do > + * for now is ensure that we consumed null from the input, proven > + * by the fact that we can't re-read the key. > + */ > + > + v = visitor_input_test_init(data, "{ 'a': null }"); > + visit_start_struct(v, NULL, NULL, 0, &error_abort); > + visit_type_null(v, "a", &error_abort); > + visit_type_str(v, "a", &tmp, &err); > + g_assert(err); I'd prefer error_free_or_abort(). Can do on commit. > + g_assert(!tmp); > + visit_end_struct(v, &error_abort); > +} > + > static void test_visitor_in_union_flat(TestInputVisitorData *data, > const void *unused) > { [...]