From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v6 13/18] libxl/gentest.py: test JSON parser Date: Mon, 9 Jun 2014 13:43:24 +0100 Message-ID: <1402317809-26833-14-git-send-email-wei.liu2@citrix.com> References: <1402317809-26833-1-git-send-email-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1402317809-26833-1-git-send-email-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org Cc: Wei Liu , ian.jackson@eu.citrix.com, ian.campbell@citrix.com List-Id: xen-devel@lists.xenproject.org The test is done in following steps: 1. initialise libxl_FOO struct 2. generate JSON string A for libxl_FOO struct FOO1 3. convert JSON string A to libxl_FOO struct FOO2 4. generate JSON string B for libxl_FOO struct FOO2 5. compare A and B If A and B are identical then we are good. Signed-off-by: Wei Liu Acked-by: Ian Campbell --- tools/libxl/gentest.py | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/tools/libxl/gentest.py b/tools/libxl/gentest.py index eb9a21b..b92d092 100644 --- a/tools/libxl/gentest.py +++ b/tools/libxl/gentest.py @@ -225,10 +225,11 @@ int main(int argc, char **argv) """) for ty in types: - f.write(" %s %s_val;\n" % (ty.typename, ty.typename)) + f.write(" %s %s_val, %s_val_new;\n" % \ + (ty.typename, ty.typename, ty.typename)) f.write(""" int rc; - char *s; + char *s, *new_s; xentoollog_logger_stdiostream *logger; libxl_ctx *ctx; @@ -240,20 +241,36 @@ int main(int argc, char **argv) exit(1); } """) - f.write(" printf(\"Testing TYPE_to_json()\\n\");\n") + f.write(" printf(\"Testing TYPE_to/from_json()\\n\");\n") f.write(" printf(\"----------------------\\n\");\n") f.write(" printf(\"\\n\");\n") for ty in [t for t in types if t.json_gen_fn is not None]: arg = ty.typename + "_val" f.write(" %s_rand_init(%s);\n" % (ty.typename, \ ty.pass_arg(arg, isref=False, passby=idl.PASS_BY_REFERENCE))) + if not isinstance(ty, idl.Enumeration): + f.write(" %s_init(%s_new);\n" % (ty.typename, \ + ty.pass_arg(arg, isref=False, passby=idl.PASS_BY_REFERENCE))) f.write(" s = %s_to_json(ctx, %s);\n" % \ (ty.typename, ty.pass_arg(arg, isref=False))) f.write(" printf(\"%%s: %%s\\n\", \"%s\", s);\n" % ty.typename) f.write(" if (s == NULL) abort();\n") + f.write(" rc = %s_from_json(ctx, &%s_val_new, s);\n" % \ + (ty.typename, ty.typename)) + f.write(" if (rc) abort();\n") + f.write(" new_s = %s_to_json(ctx, %s_new);\n" % \ + (ty.typename, ty.pass_arg(arg, isref=False))) + f.write(" if (new_s == NULL) abort();\n") + f.write(" if (strcmp(s, new_s)) {\n") + f.write(" printf(\"Huh? Regenerated string different from original string.\\n\");\n") + f.write(" printf(\"Regenerated string: %s\\n\", new_s);\n") + f.write(" abort();\n") + f.write(" }\n") f.write(" free(s);\n") + f.write(" free(new_s);\n") if ty.dispose_fn is not None: f.write(" %s(&%s_val);\n" % (ty.dispose_fn, ty.typename)) + f.write(" %s(&%s_val_new);\n" % (ty.dispose_fn, ty.typename)) f.write("\n") f.write(" printf(\"Testing Enumerations\\n\");\n") -- 1.7.10.4