From patchwork Thu Mar 21 18:29:29 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Berger X-Patchwork-Id: 229816 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id A6C532C00BC for ; Fri, 22 Mar 2013 06:14:29 +1100 (EST) Received: from localhost ([::1]:48812 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UIkwV-000331-Ew for incoming@patchwork.ozlabs.org; Thu, 21 Mar 2013 15:14:27 -0400 Received: from eggs.gnu.org ([208.118.235.92]:40076) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UIkLH-0000sI-4N for qemu-devel@nongnu.org; Thu, 21 Mar 2013 14:36:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UIkL9-0004S9-Bu for qemu-devel@nongnu.org; Thu, 21 Mar 2013 14:35:59 -0400 Received: from e9.ny.us.ibm.com ([32.97.182.139]:40355) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UIkFe-0002EN-4r for qemu-devel@nongnu.org; Thu, 21 Mar 2013 14:30:10 -0400 Received: from /spool/local by e9.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 21 Mar 2013 14:30:09 -0400 Received: from d01dlp01.pok.ibm.com (9.56.250.166) by e9.ny.us.ibm.com (192.168.1.109) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Thu, 21 Mar 2013 14:30:07 -0400 Received: from d01relay01.pok.ibm.com (d01relay01.pok.ibm.com [9.56.227.233]) by d01dlp01.pok.ibm.com (Postfix) with ESMTP id B3B7B38C8059 for ; Thu, 21 Mar 2013 14:30:06 -0400 (EDT) Received: from d01av02.pok.ibm.com (d01av02.pok.ibm.com [9.56.224.216]) by d01relay01.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r2LIU1Dr274618 for ; Thu, 21 Mar 2013 14:30:01 -0400 Received: from d01av02.pok.ibm.com (loopback [127.0.0.1]) by d01av02.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r2LITv7V014751 for ; Thu, 21 Mar 2013 15:30:01 -0300 Received: from k-d941f-5.watson.ibm.com (k-d941f-5.watson.ibm.com [9.2.141.165]) by d01av02.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r2LITsdK014312 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 21 Mar 2013 15:29:54 -0300 Received: from k-d941f-5.watson.ibm.com (localhost.localdomain [127.0.0.1]) by k-d941f-5.watson.ibm.com (8.14.5/8.14.3) with ESMTP id r2LITqWm015225; Thu, 21 Mar 2013 14:29:53 -0400 Received: (from root@localhost) by k-d941f-5.watson.ibm.com (8.14.5/8.14.5/Submit) id r2LITqrx015224; Thu, 21 Mar 2013 14:29:52 -0400 From: Stefan Berger To: stefanb@linux.vnet.ibm.com, qemu-devel@nongnu.org, anthony@codemonkey.ws Date: Thu, 21 Mar 2013 14:29:29 -0400 Message-Id: <1363890571-15146-8-git-send-email-stefanb@linux.vnet.ibm.com> X-Mailer: git-send-email 1.7.11.7 In-Reply-To: <1363890571-15146-1-git-send-email-stefanb@linux.vnet.ibm.com> References: <1363890571-15146-1-git-send-email-stefanb@linux.vnet.ibm.com> X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13032118-7182-0000-0000-000005E509FE X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x-2.6.x [generic] X-Received-From: 32.97.182.139 Cc: jschopp@linux.vnet.ibm.com, coreyb@linux.vnet.ibm.com, mdroth@linux.vnet.ibm.com, mst@redhat.com Subject: [Qemu-devel] [PATCH v4 7/9] Extend test-visitor-serialization with ASN.1 visitor(s) X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Add BER visitor hooks to test-visitor-serialization Cc: Michael Tsirkin Cc: Stefan Berger Signed-off-by: Joel Schopp --- tests/Makefile | 2 +- tests/test-visitor-serialization.c | 73 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 1 deletion(-) diff --git a/tests/Makefile b/tests/Makefile index 567e36e..578d732 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -124,7 +124,7 @@ tests/test-qmp-output-visitor$(EXESUF): tests/test-qmp-output-visitor.o $(test-q tests/test-qmp-input-visitor$(EXESUF): tests/test-qmp-input-visitor.o $(test-qapi-obj-y) libqemuutil.a libqemustub.a tests/test-qmp-input-strict$(EXESUF): tests/test-qmp-input-strict.o $(test-qapi-obj-y) libqemuutil.a libqemustub.a tests/test-qmp-commands$(EXESUF): tests/test-qmp-commands.o tests/test-qmp-marshal.o $(test-qapi-obj-y) qapi-types.o qapi-visit.o libqemuutil.a libqemustub.a -tests/test-visitor-serialization$(EXESUF): tests/test-visitor-serialization.o $(test-qapi-obj-y) libqemuutil.a libqemustub.a +tests/test-visitor-serialization$(EXESUF): tests/test-visitor-serialization.o $(test-qapi-obj-y) $(block-obj-y) libqemuutil.a libqemustub.a tests/test-mul64$(EXESUF): tests/test-mul64.o libqemuutil.a diff --git a/tests/test-visitor-serialization.c b/tests/test-visitor-serialization.c index 3c6b8df..ba07948 100644 --- a/tests/test-visitor-serialization.c +++ b/tests/test-visitor-serialization.c @@ -14,6 +14,7 @@ #include #include #include +#include #include "qemu-common.h" #include "test-qapi-types.h" @@ -23,6 +24,9 @@ #include "qapi/qmp-output-visitor.h" #include "qapi/string-input-visitor.h" #include "qapi/string-output-visitor.h" +#include "qapi/ber-input-visitor.h" +#include "qapi/ber-output-visitor.h" +#include "migration/qemu-file.h" typedef struct PrimitiveType { union { @@ -701,6 +705,60 @@ static void string_cleanup(void *datap) string_input_visitor_cleanup(d->siv); } + +typedef struct BERSerializeData { + BEROutputVisitor *sov; + QEMUFile *qoutfile; + BERInputVisitor *siv; + QEMUFile *qinfile; +} BERSerializeData; + +static void ber_serialize(void *native_in, void **datap, + VisitorFunc visit, Error **errp, + BERTypePC ber_type_pc) +{ + BERSerializeData *d = g_malloc0(sizeof(*d)); + + d->qoutfile = qemu_bufopen("w", NULL); + d->sov = ber_output_visitor_new(d->qoutfile, ber_type_pc); + visit(ber_output_get_visitor(d->sov), &native_in, errp); + *datap = d; +} + +static void ber_primitive_serialize(void *native_in, void **datap, + VisitorFunc visit, Error **errp) +{ + ber_serialize(native_in, datap, visit, errp, BER_TYPE_PRIMITIVE); +} + +static void ber_constructed_serialize(void *native_in, void **datap, + VisitorFunc visit, Error **errp) +{ + ber_serialize(native_in, datap, visit, errp, BER_TYPE_CONSTRUCTED); +} + +static void ber_deserialize(void **native_out, void *datap, + VisitorFunc visit, Error **errp) +{ + BERSerializeData *d = datap; + const QEMUSizedBuffer *qsb = qemu_buf_get(d->qoutfile); + QEMUSizedBuffer *new_qsb = qsb_clone(qsb); + g_assert(new_qsb != NULL); + + d->qinfile = qemu_bufopen("r", new_qsb); + + d->siv = ber_input_visitor_new(d->qinfile, ~0); + visit(ber_input_get_visitor(d->siv), native_out, errp); +} + +static void ber_cleanup(void *datap) +{ + BERSerializeData *d = datap; + ber_output_visitor_cleanup(d->sov); + ber_input_visitor_cleanup(d->siv); +} + + /* visitor registration, test harness */ /* note: to function interchangeably as a serialization mechanism your @@ -722,6 +780,21 @@ static const SerializeOps visitors[] = { .cleanup = string_cleanup, .caps = VCAP_PRIMITIVES }, + { + .type = "ASN.1 BER primitives", + .serialize = ber_primitive_serialize, + .deserialize = ber_deserialize, + .cleanup = ber_cleanup, + .caps = VCAP_PRIMITIVES + }, + { + .type = "ASN.1 BER constructed", + .serialize = ber_constructed_serialize, + .deserialize = ber_deserialize, + .cleanup = ber_cleanup, + .caps = VCAP_PRIMITIVES | VCAP_LISTS + }, + { NULL } };