From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38981) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1avrHc-0004nz-MT for qemu-devel@nongnu.org; Thu, 28 Apr 2016 15:07:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1avrHZ-0003g2-GL for qemu-devel@nongnu.org; Thu, 28 Apr 2016 15:07:28 -0400 Received: from mx1.redhat.com ([209.132.183.28]:57833) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1avrHZ-0003fy-7q for qemu-devel@nongnu.org; Thu, 28 Apr 2016 15:07:25 -0400 References: <1461801715-24307-1-git-send-email-eblake@redhat.com> <1461801715-24307-16-git-send-email-eblake@redhat.com> <87bn4the48.fsf@dusky.pond.sub.org> From: Eric Blake Message-ID: <57225F6A.70301@redhat.com> Date: Thu, 28 Apr 2016 13:07:22 -0600 MIME-Version: 1.0 In-Reply-To: <87bn4the48.fsf@dusky.pond.sub.org> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="vBi7uheAU75v3wf6EHjK2jDssmnbti5L8" 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: Markus Armbruster Cc: qemu-devel@nongnu.org, Michael Roth This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --vBi7uheAU75v3wf6EHjK2jDssmnbti5L8 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 04/28/2016 10:50 AM, Markus Armbruster wrote: > Eric Blake writes: >=20 >> 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-vis= itor.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(TestInputVisitorD= ata *data, >> qobject_decref(res); >> } >> >> +static void test_visitor_in_null(TestInputVisitorData *data, >> + const void *unused) >> +{ >> + Visitor *v; >> + Error *err =3D 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 =3D 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); >=20 > I'd prefer error_free_or_abort(). Can do on commit. Not just prefer, but needed to avoid a memleak. Thanks for the good catc= h. Also, I realized I don't do any negative test. Maybe this test could be expanded as: v =3D visitor_input_test_init(data, "{ 'a': null, 'b': '' }"); visit_start_struct(v, NULL, NULL, 0, &error_abort); visit_type_null(v, "a", &error_abort); visit_type_null(v, "a", &tmp, &err); error_free_or_abort(); visit_type_null(v, "b", &err); error_free_or_abort(); >=20 >> + g_assert(!tmp); >> + visit_end_struct(v, &error_abort); >> +} >> + >> static void test_visitor_in_union_flat(TestInputVisitorData *data, >> const void *unused) >> { > [...] >=20 --=20 Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org --vBi7uheAU75v3wf6EHjK2jDssmnbti5L8 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Public key at http://people.redhat.com/eblake/eblake.gpg Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQEcBAEBCAAGBQJXIl9qAAoJEKeha0olJ0NqqhQIAJgbaDaN7RSh6zb/hbeTVPam /ElO2u1QJFjK9K/ZExJkRY3iQbSGzNqupNuITAIsOTfi3HPaSuwLGW1MEnrB/76Q uDdkGY9IMxJagC4ADA+l/6mFp+SEcQJq0+ELBonJibRHSbo1CHOQrWd62rylu4LP Up7dLMH41xSZgMjkPv6J/efiDm56OFPNGm2f1lGWW2CocHMPBYEyXhbpOeCwekKc iYhRrUIUyhdWqjL1yXCKigSlWI60UiaJ8bjDE6XuyF9G4j4uejnM0HZb6Fim1tsb RPJ8G/YPjM+BNh5YU5yGxki2tuQKDOi1TOVC3dgUrlFdvSISyoIDMd7zTGfASAk= =U3cM -----END PGP SIGNATURE----- --vBi7uheAU75v3wf6EHjK2jDssmnbti5L8--