On Fri, 2014-05-30 at 18:24 +0100, Daniel P. Berrange wrote: > At the Xen Hackathon I learnt that libxl provides an API which > can serialize a libxl_domain_config instance to a JSON document. > This is exactly what we need for testing the XML -> libxl_domain_config > conversion process, so I spent the afternoon trying to get such a test > working. The result is that we can now just add pairs of XML, JSON > files to libvirt to test handling of new config features. > > I hit a couple of small issues with libxl, which I worked around, when > writing this test which I why I'm copying xen-devel > > - libxl_ctx_alloc() will call xs_daemon_open and xc_interface_open, > and stat /var/run/xenstored.pid to see if Xen is actually running. > This fails when run on non-Xen hosts (and also possibly if run > unprivileged). > > I used an evil LD_PRELOAD hack to stub out xs_daemon_open and > xc_interface_open to return (void*)0x1, and also turn > xc_interface_close and xs_daemon_close to no-ops, and make > stat() always return success for xenstored.pid. > > This works (evidenced by the fact that if something was needing > these xs/xc handles they would have crashed referencing 0x1), > but at the same time it might be an idea to have an officially > supported "non live" mode for libxl_ctx_alloc() turned on by a > flag of some sort. Yes, we absolutely should have this. > - The libxl_json.h header file is relying on conditionals that > are only set by Xen's build process > > eg HAVE_YAJL_YAJL_VERSION_H > It looks like this header has ended up with a mixture of library internal and user facing stuff, which is wrong. I think splitting the internal stuff into libxl_json_internal.h or similar would solve this. I'll take a look. > I hacked around this, but it is a little dirty too. libvirt > already links to libyajl for the QEMU driver, but we don't > really need the raw YAJL objects. It'd be nice to have a > > char * libxl_domain_config_as_json(libxl_domain_config *p) > > as a higher level wrapper around libxl_domain_config_gen_json > avoiding the pain of dealing with YAJL's different APIs. > > Ian J mentioned to me that he thought there was already such a > method, but AFAICT, the only such code is in the 'xl' command > line tool itself (xl_cmdimpl.c - printf_info_one_json) That was me not Ian J I think. The function you need is libxl_domain_config_to_json (which is autogenerated, so in _libxl_types.[hc]). I think the general libxl_*_to_json support has been there since Xen 4.2, but IIRC libxl_domain_config only got moved into the autogenerated/IDL layer in 4.3. For compatibility with 4.2 you could probably use libxl_*_to_json on the various members of libxl_domain_config individually, or just punt on the unit tests in that case of course... Ian. -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list