<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from text --><style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<meta content="text/html; charset=UTF-8">
<style type="text/css" style="">
<!--
p
{margin-top:0;
margin-bottom:0}
-->
</style>
<div dir="ltr">
<div id="x_divtagdefaultwrapper" style="font-size:12pt; color:#000000; background-color:#FFFFFF; font-family:Calibri,Arial,Helvetica,sans-serif">
<p>Hello again.</p>
<p>Please, drop the commit message for this patch.</p>
<p>Use the following one:</p>
<p>Added XML 2 XML tests for fspool and item.</p>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> Olga Krishtal<br>
<b>Sent:</b> Thursday, September 15, 2016 10:39:01 AM<br>
<b>To:</b> openstack-devel<br>
<b>Cc:</b> Maxim Nestratov; Nikolay Shirokovskiy<br>
<b>Subject:</b> Re: [PATCH 8/8] fspools: docs and tests for fspool directory backend</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:10pt;">
<div class="PlainText">On 26/08/16 17:17, Olga Krishtal wrote:<br>
Pleas, drop the commit message, test is present for both: item and fspool.<br>
> At the moment only pool test is implemented.<br>
> You need to inplement item test.<br>
><br>
> Signed-off-by: Olga Krishtal <okrishtal@virtuozzo.com><br>
> ---<br>
> docs/schemas/fsitem.rng | 69 ++++++++++++++<br>
> docs/schemas/fspool.rng | 83 ++++++++++++++++<br>
> tests/fsitemxml2xmltest.c | 105 +++++++++++++++++++++<br>
> .../dir-missing-target-path-invalid.xml | 12 +++<br>
> tests/fspoolxml2xmlin/fspool-dir.xml | 17 ++++<br>
> tests/fspoolxml2xmlout/fspool-dir.xml | 17 ++++<br>
> tests/fspoolxml2xmltest.c | 82 ++++++++++++++++<br>
> 7 files changed, 385 insertions(+)<br>
> create mode 100644 docs/schemas/fsitem.rng<br>
> create mode 100644 docs/schemas/fspool.rng<br>
> create mode 100644 tests/fsitemxml2xmltest.c<br>
> create mode 100644 tests/fspoolschemadata/dir-missing-target-path-invalid.xml<br>
> create mode 100644 tests/fspoolxml2xmlin/fspool-dir.xml<br>
> create mode 100644 tests/fspoolxml2xmlout/fspool-dir.xml<br>
> create mode 100644 tests/fspoolxml2xmltest.c<br>
><br>
> diff --git a/docs/schemas/fsitem.rng b/docs/schemas/fsitem.rng<br>
> new file mode 100644<br>
> index 0000000..a41659c<br>
> --- /dev/null<br>
> +++ b/docs/schemas/fsitem.rng<br>
> @@ -0,0 +1,69 @@<br>
> +<?xml version="1.0"?><br>
> +<!-- A Relax NG schema for the libvirt storage volume XML format --><br>
> +<grammar xmlns="<a href="http://relaxng.org/ns/structure/1.0">http://relaxng.org/ns/structure/1.0</a>"<br>
> + datatypeLibrary="<a href="http://www.w3.org/2001/XMLSchema-datatypes">http://www.w3.org/2001/XMLSchema-datatypes</a>"><br>
> + <include href='basictypes.rng'/><br>
> + <start><br>
> + <ref name='vol'/><br>
> + </start><br>
> +<br>
> + <include href='storagecommon.rng'/><br>
> +<br>
> +<br>
> + <define name='item'><br>
> + <element name='fsitem'><br>
> + <optional><br>
> + <attribute name='type'><br>
> + <value>dir</value><br>
> + </attribute><br>
> + </optional><br>
> + <interleave><br>
> + <element name='name'><br>
> + <ref name='volName'/><br>
> + </element><br>
> + <optional><br>
> + <element name='key'><br>
> + <text/><br>
> + </element><br>
> + </optional><br>
> + <ref name='sizing'/><br>
> + <ref name='target'/><br>
> + </interleave><br>
> + </element><br>
> + </define><br>
> +<br>
> + <define name='sizing'><br>
> + <interleave><br>
> + <optional><br>
> + <element name='capacity'><br>
> + <ref name='scaledInteger'/><br>
> + </element><br>
> + </optional><br>
> + <optional><br>
> + <element name='allocation'><br>
> + <ref name='scaledInteger'/><br>
> + </element><br>
> + </optional><br>
> + </interleave><br>
> + </define><br>
> +<br>
> + <define name='target'><br>
> + <element name='target'><br>
> + <interleave><br>
> + <optional><br>
> + <element name='path'><br>
> + <choice><br>
> + <data type='anyURI'/><br>
> + <ref name='absFilePath'/><br>
> + </choice><br>
> + </element><br>
> + </optional><br>
> + <ref name='permissions'/><br>
> + <optional><br>
> + <ref name='fileFormatFeatures'/><br>
> + </optional><br>
> + </interleave><br>
> + </element><br>
> + </define><br>
> +<br>
> +</grammar><br>
> diff --git a/docs/schemas/fspool.rng b/docs/schemas/fspool.rng<br>
> new file mode 100644<br>
> index 0000000..132b65c<br>
> --- /dev/null<br>
> +++ b/docs/schemas/fspool.rng<br>
> @@ -0,0 +1,83 @@<br>
> +<?xml version="1.0"?><br>
> +<!-- A Relax NG schema for the libvirt storage pool XML format --><br>
> +<grammar xmlns="<a href="http://relaxng.org/ns/structure/1.0">http://relaxng.org/ns/structure/1.0</a>"<br>
> + datatypeLibrary="<a href="http://www.w3.org/2001/XMLSchema-datatypes">http://www.w3.org/2001/XMLSchema-datatypes</a>"><br>
> + <include href='basictypes.rng'/><br>
> + <include href='storagecommon.rng'/><br>
> + <start><br>
> + <ref name='pool'/><br>
> + </start><br>
> +<br>
> +<br>
> + <define name='fspool'><br>
> + <element name='fspool'><br>
> + <choice><br>
> + <ref name='fspooldir'/><br>
> + </choice><br>
> + </element><br>
> + </define><br>
> +<br>
> + <define name='fspooldir'><br>
> + <attribute name='type'><br>
> + <value>dir</value><br>
> + </attribute><br>
> + <interleave><br>
> + <ref name='commonmetadata'/><br>
> + <ref name='sizing'/><br>
> + <ref name='sourcedir'/><br>
> + <ref name='target'/><br>
> + </interleave><br>
> + </define><br>
> +<br>
> + <define name='commonmetadata'><br>
> + <interleave><br>
> + <element name='name'><br>
> + <ref name='genericName'/><br>
> + </element><br>
> + <optional><br>
> + <element name='uuid'><br>
> + <ref name='UUID'/><br>
> + </element><br>
> + </optional><br>
> + </interleave><br>
> + </define><br>
> +<br>
> + <define name='sizing'><br>
> + <interleave><br>
> + <optional><br>
> + <element name='capacity'><br>
> + <ref name='scaledInteger'/><br>
> + </element><br>
> + </optional><br>
> + <optional><br>
> + <element name='allocation'><br>
> + <ref name='scaledInteger'/><br>
> + </element><br>
> + </optional><br>
> + <optional><br>
> + <element name='available'><br>
> + <ref name='scaledInteger'/><br>
> + </element><br>
> + </optional><br>
> + </interleave><br>
> + </define><br>
> +<br>
> + <define name='target'><br>
> + <element name='target'><br>
> + <interleave><br>
> + <element name='path'><br>
> + <ref name='absFilePath'/><br>
> + </element><br>
> + <ref name='permissions'/><br>
> + </interleave><br>
> + </element><br>
> + </define><br>
> +<br>
> + <define name='sourcedir'><br>
> + <optional><br>
> + <element name='source'><br>
> + </element><br>
> + </optional><br>
> + </define><br>
> +<br>
> +</grammar><br>
> diff --git a/tests/fsitemxml2xmltest.c b/tests/fsitemxml2xmltest.c<br>
> new file mode 100644<br>
> index 0000000..87a24e3<br>
> --- /dev/null<br>
> +++ b/tests/fsitemxml2xmltest.c<br>
> @@ -0,0 +1,105 @@<br>
> +#include <config.h><br>
> +<br>
> +#include <stdio.h><br>
> +#include <stdlib.h><br>
> +#include <unistd.h><br>
> +#include <string.h><br>
> +<br>
> +#include <sys/types.h><br>
> +#include <fcntl.h><br>
> +<br>
> +#include "internal.h"<br>
> +#include "testutils.h"<br>
> +#include "storage_conf.h"<br>
> +#include "testutilsqemu.h"<br>
> +#include "virstring.h"<br>
> +<br>
> +#define VIR_FROM_THIS VIR_FROM_NONE<br>
> +<br>
> +static int<br>
> +testCompareXMLToXMLFiles(const char *poolxml, const char *inxml,<br>
> + const char *outxml, unsigned int flags)<br>
> +{<br>
> + char *actual = NULL;<br>
> + int ret = -1;<br>
> + virFSPoolDefPtr pool = NULL;<br>
> + virFSItemDefPtr dev = NULL;<br>
> +<br>
> + if (!(pool = virFSPoolDefParseFile(poolxml)))<br>
> + goto fail;<br>
> +<br>
> + if (!(dev = virFSItemDefParseFile(pool, inxml, flags)))<br>
> + goto fail;<br>
> +<br>
> + if (!(actual = virFSItemDefFormat(pool, dev)))<br>
> + goto fail;<br>
> +<br>
> + if (virTestCompareToFile(actual, outxml) < 0)<br>
> + goto fail;<br>
> +<br>
> + ret = 0;<br>
> +<br>
> + fail:<br>
> + VIR_FREE(actual);<br>
> + virFSPoolDefFree(pool);<br>
> + virFSItemDefFree(dev);<br>
> + return ret;<br>
> +}<br>
> +<br>
> +struct testInfo {<br>
> + const char *pool;<br>
> + const char *name;<br>
> + unsigned int flags;<br>
> +};<br>
> +<br>
> +static int<br>
> +testCompareXMLToXMLHelper(const void *data)<br>
> +{<br>
> + int result = -1;<br>
> + const struct testInfo *info = data;<br>
> + char *poolxml = NULL;<br>
> + char *inxml = NULL;<br>
> + char *outxml = NULL;<br>
> +<br>
> + if (virAsprintf(&poolxml, "%s/storagepoolxml2xmlin/%s.xml",<br>
> + abs_srcdir, info->pool) < 0 ||<br>
> + virAsprintf(&inxml, "%s/storagevolxml2xmlin/%s.xml",<br>
> + abs_srcdir, info->name) < 0 ||<br>
> + virAsprintf(&outxml, "%s/storagevolxml2xmlout/%s.xml",<br>
> + abs_srcdir, info->name) < 0) {<br>
> + goto cleanup;<br>
> + }<br>
> +<br>
> + result = testCompareXMLToXMLFiles(poolxml, inxml, outxml, info->flags);<br>
> +<br>
> + cleanup:<br>
> + VIR_FREE(poolxml);<br>
> + VIR_FREE(inxml);<br>
> + VIR_FREE(outxml);<br>
> +<br>
> + return result;<br>
> +}<br>
> +<br>
> +<br>
> +static int<br>
> +mymain(void)<br>
> +{<br>
> + int ret = 0;<br>
> +<br>
> +#define DO_TEST_FULL(pool, name, flags) \<br>
> + do { \<br>
> + struct testInfo info = { pool, name, flags }; \<br>
> + if (virTestRun("FS Item XML-2-XML " name, \<br>
> + testCompareXMLToXMLHelper, &info) < 0) \<br>
> + ret = -1; \<br>
> + } \<br>
> + while (0);<br>
> +<br>
> +#define DO_TEST(pool, name) DO_TEST_FULL(pool, name, 0)<br>
> +<br>
> + DO_TEST("pool-dir", "vol-file");<br>
> +<br>
> + return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;<br>
> +}<br>
> +<br>
> +VIRT_TEST_MAIN(mymain)<br>
> diff --git a/tests/fspoolschemadata/dir-missing-target-path-invalid.xml b/tests/fspoolschemadata/dir-missing-target-path-invalid.xml<br>
> new file mode 100644<br>
> index 0000000..a52bf49<br>
> --- /dev/null<br>
> +++ b/tests/fspoolschemadata/dir-missing-target-path-invalid.xml<br>
> @@ -0,0 +1,12 @@<br>
> +<fspool type='dir'><br>
> + <name>test</name><br>
> + <source><br>
> + </source><br>
> + <target><br>
> + <permissions><br>
> + <mode>0700</mode><br>
> + <owner>-1</owner><br>
> + <group>-1</group><br>
> + </permissions><br>
> + </target><br>
> +</fspool><br>
> diff --git a/tests/fspoolxml2xmlin/fspool-dir.xml b/tests/fspoolxml2xmlin/fspool-dir.xml<br>
> new file mode 100644<br>
> index 0000000..a3a1639<br>
> --- /dev/null<br>
> +++ b/tests/fspoolxml2xmlin/fspool-dir.xml<br>
> @@ -0,0 +1,17 @@<br>
> +<fspool type='dir'><br>
> + <name>virtfs</name><br>
> + <uuid>5584ee21-db40-4e98-980e-44802c47b62f</uuid><br>
> + <capacity unit='bytes'>0</capacity><br>
> + <allocation unit='bytes'>0</allocation><br>
> + <available unit='bytes'>0</available><br>
> + <source><br>
> + </source><br>
> + <target><br>
> + <path>///var/////lib/libvirt/fs//</path><br>
> + <permissions><br>
> + <mode>0700</mode><br>
> + <owner>-1</owner><br>
> + <group>-1</group><br>
> + </permissions><br>
> + </target><br>
> +</fspool><br>
> diff --git a/tests/fspoolxml2xmlout/fspool-dir.xml b/tests/fspoolxml2xmlout/fspool-dir.xml<br>
> new file mode 100644<br>
> index 0000000..30aca89<br>
> --- /dev/null<br>
> +++ b/tests/fspoolxml2xmlout/fspool-dir.xml<br>
> @@ -0,0 +1,17 @@<br>
> +<fspool type='dir'><br>
> + <name>virtfs</name><br>
> + <uuid> 5584ee21-db40-4e98-980e-44802c47b62f</uuid><br>
> + <capacity unit='bytes'>0</capacity><br>
> + <allocation unit='bytes'>0</allocation><br>
> + <available unit='bytes'>0</available><br>
> + <source><br>
> + </source><br>
> + <target><br>
> + <path>/var/lib/libvirt/fs</path><br>
> + <permissions><br>
> + <mode>0700</mode><br>
> + <owner>-1</owner><br>
> + <group>-1</group><br>
> + </permissions><br>
> + </target><br>
> +</fspool><br>
> diff --git a/tests/fspoolxml2xmltest.c b/tests/fspoolxml2xmltest.c<br>
> new file mode 100644<br>
> index 0000000..b66e959<br>
> --- /dev/null<br>
> +++ b/tests/fspoolxml2xmltest.c<br>
> @@ -0,0 +1,82 @@<br>
> +#include <config.h><br>
> +<br>
> +#include <stdio.h><br>
> +#include <stdlib.h><br>
> +#include <unistd.h><br>
> +#include <string.h><br>
> +<br>
> +#include <sys/types.h><br>
> +#include <fcntl.h><br>
> +<br>
> +#include "internal.h"<br>
> +#include "testutils.h"<br>
> +#include "fs_conf.h"<br>
> +#include "testutilsqemu.h"<br>
> +#include "virstring.h"<br>
> +<br>
> +#define VIR_FROM_THIS VIR_FROM_NONE<br>
> +<br>
> +static int<br>
> +testCompareXMLToXMLFiles(const char *inxml, const char *outxml)<br>
> +{<br>
> + char *actual = NULL;<br>
> + int ret = -1;<br>
> + virFSPoolDefPtr dev = NULL;<br>
> +<br>
> + if (!(dev = virFSPoolDefParseFile(inxml)))<br>
> + goto fail;<br>
> +<br>
> + if (!(actual = virFSPoolDefFormat(dev)))<br>
> + goto fail;<br>
> +<br>
> + if (virTestCompareToFile(actual, outxml) < 0)<br>
> + goto fail;<br>
> +<br>
> + ret = 0;<br>
> +<br>
> + fail:<br>
> + VIR_FREE(actual);<br>
> + virFSPoolDefFree(dev);<br>
> + return ret;<br>
> +}<br>
> +<br>
> +static int<br>
> +testCompareXMLToXMLHelper(const void *data)<br>
> +{<br>
> + int result = -1;<br>
> + char *inxml = NULL;<br>
> + char *outxml = NULL;<br>
> +<br>
> + if (virAsprintf(&inxml, "%s/fspoolxml2xmlin/%s.xml",<br>
> + abs_srcdir, (const char*)data) < 0 ||<br>
> + virAsprintf(&outxml, "%s/fspoolxml2xmlout/%s.xml",<br>
> + abs_srcdir, (const char*)data) < 0) {<br>
> + goto cleanup;<br>
> + }<br>
> +<br>
> + result = testCompareXMLToXMLFiles(inxml, outxml);<br>
> +<br>
> + cleanup:<br>
> + VIR_FREE(inxml);<br>
> + VIR_FREE(outxml);<br>
> +<br>
> + return result;<br>
> +}<br>
> +<br>
> +static int<br>
> +mymain(void)<br>
> +{<br>
> + int ret = 0;<br>
> +<br>
> +#define DO_TEST(name) \<br>
> + if (virTestRun("FS Pool XML-2-XML " name, \<br>
> + testCompareXMLToXMLHelper, (name)) < 0) \<br>
> + ret = -1<br>
> +<br>
> + DO_TEST("pool-dir");<br>
> +#endif<br>
> +<br>
> + return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;<br>
> +}<br>
> +<br>
> +VIRT_TEST_MAIN(mymain)<br>
<br>
<br>
</div>
</span></font>
</body>
</html>