<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>