[libvirt] [PATCH 4/6] tests: qemumonitorjsontest: Do some actual testing in qemuMonitorJSONTestAttachChardev

John Ferlan jferlan at redhat.com
Wed Oct 5 13:38:16 UTC 2016



On 09/27/2016 12:39 PM, Peter Krempa wrote:
> Until now the test was rather useless since it didn't check the
> arguments formatted and didn't use properly configured chardev objects.
> 
> Add the expected arguments and instrument the test to validate them.
> Modify some test cases to actually add valid data.
> 
> Note that the UDP test data is currently wrong due to a bug.
> ---
>  tests/qemumonitorjsontest.c | 93 +++++++++++++++++++++++++++++++++------------
>  1 file changed, 68 insertions(+), 25 deletions(-)
> 
> diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c
> index 23877f8..61344b7 100644
> --- a/tests/qemumonitorjsontest.c
> +++ b/tests/qemumonitorjsontest.c
> @@ -747,6 +747,7 @@ static int
>  qemuMonitorJSONTestAttachOneChardev(virDomainXMLOptionPtr xmlopt,
>                                      const char *label,
>                                      virDomainChrSourceDefPtr chr,
> +                                    const char *expectargs,
>                                      const char *reply,
>                                      const char *expectPty,
>                                      bool fail)
> @@ -772,7 +773,8 @@ qemuMonitorJSONTestAttachOneChardev(virDomainXMLOptionPtr xmlopt,
>      if (!(data.test = qemuMonitorTestNewSimple(true, xmlopt)))
>          goto cleanup;
> 
> -    if (qemuMonitorTestAddItem(data.test, "chardev-add", jsonreply) < 0)
> +    if (qemuMonitorTestAddItemExpect(data.test, "chardev-add",
> +                                     expectargs, true, jsonreply) < 0)

FWIW: The "knowledge" of whether the expectargs has an apostrophe would
seem to lie in the caller. If in fact you still keep the apostrophe
check in patch 2, then I would think the caller would be able to supply
true/false, but that's a minor thing.

Also, something that just occurred to me... 'expectargs' had better not
be NULL; otherwise, patch 2 will core at the while (*tmp != '\0')

ACK in principle - your call on the apostrophe thing - although perhaps
a check in patch 2 should be added for (apostrophe && data->expectArgs)
to protect from future mishaps...

John

>          goto cleanup;
> 
>      if (virTestRun(fulllabel, &testQemuMonitorJSONAttachChardev, &data) < 0)
> @@ -793,49 +795,90 @@ qemuMonitorJSONTestAttachChardev(virDomainXMLOptionPtr xmlopt)
>      virDomainChrSourceDef chr;
>      int ret = 0;
> 
> -#define CHECK(label, fail) \
> -    if (qemuMonitorJSONTestAttachOneChardev(xmlopt, label, &chr, NULL, NULL, \
> -                                            fail) < 0) \
> +#define CHECK(label, fail, expectargs)                                         \
> +    if (qemuMonitorJSONTestAttachOneChardev(xmlopt, label, &chr, expectargs,   \
> +                                            NULL, NULL, fail) < 0)             \
>          ret = -1
> 
>      chr = (virDomainChrSourceDef) { .type = VIR_DOMAIN_CHR_TYPE_NULL };
> -    CHECK("null", false);
> +    CHECK("null", false,
> +          "{'id':'alias','backend':{'type':'null','data':{}}}");
> 
>      chr = (virDomainChrSourceDef) { .type = VIR_DOMAIN_CHR_TYPE_VC };
> -    CHECK("vc", false);
> +    CHECK("vc", false,
> +          "{'id':'alias','backend':{'type':'null','data':{}}}");
> 
>      chr = (virDomainChrSourceDef) { .type = VIR_DOMAIN_CHR_TYPE_PTY };
>      if (qemuMonitorJSONTestAttachOneChardev(xmlopt, "pty", &chr,
> +                                            "{'id':'alias',"
> +                                             "'backend':{'type':'pty',"
> +                                                        "'data':{}}}",
>                                              "\"pty\" : \"/dev/pts/0\"",
>                                              "/dev/pts/0", false) < 0)
>          ret = -1;
> 
>      chr = (virDomainChrSourceDef) { .type = VIR_DOMAIN_CHR_TYPE_PTY };
> -    CHECK("pty missing path", true);
> -
> -    chr = (virDomainChrSourceDef) { .type = VIR_DOMAIN_CHR_TYPE_FILE };
> -    CHECK("file", false);
> -
> -    chr = (virDomainChrSourceDef) { .type = VIR_DOMAIN_CHR_TYPE_DEV };
> -    CHECK("device", false);
> -
> -    chr = (virDomainChrSourceDef) { .type = VIR_DOMAIN_CHR_TYPE_TCP };
> -    CHECK("tcp", false);
> -
> -    chr = (virDomainChrSourceDef) { .type = VIR_DOMAIN_CHR_TYPE_UDP };
> -    CHECK("udp", false);
> -
> -    chr = (virDomainChrSourceDef) { .type = VIR_DOMAIN_CHR_TYPE_UNIX };
> -    CHECK("unix", false);
> +    CHECK("pty missing path", true,
> +          "{'id':'alias','backend':{'type':'pty','data':{}}}");
> +
> +    memset(&chr, 0, sizeof(chr));
> +    chr.type = VIR_DOMAIN_CHR_TYPE_FILE;
> +    chr.data.file.path = (char *) "/test/path";
> +    CHECK("file", false,
> +          "{'id':'alias','backend':{'type':'file','data':{'out':'/test/path'}}}");
> +
> +    memset(&chr, 0, sizeof(chr));
> +    chr.type = VIR_DOMAIN_CHR_TYPE_DEV;
> +    chr.data.file.path = (char *) "/test/path";
> +    CHECK("device", false,
> +          "{'id':'alias','backend':{'type':'serial','data':{'device':'/test/path'}}}");
> +
> +    memset(&chr, 0, sizeof(chr));
> +    chr.type = VIR_DOMAIN_CHR_TYPE_TCP;
> +    chr.data.tcp.host = (char *) "example.com";
> +    chr.data.tcp.service = (char *) "1234";
> +    CHECK("tcp", false,
> +          "{'id':'alias',"
> +           "'backend':{'type':'socket',"
> +                      "'data':{'addr':{'type':'inet',"
> +                                      "'data':{'host':'example.com',"
> +                                              "'port':'1234'}},"
> +                              "'wait':false,"
> +                              "'telnet':false,"
> +                              "'server':false}}}");
> +
> +    memset(&chr, 0, sizeof(chr));
> +    chr.type = VIR_DOMAIN_CHR_TYPE_UDP;
> +    chr.data.udp.connectHost = (char *) "example.com";
> +    chr.data.udp.connectService = (char *) "1234";
> +    CHECK("udp", false,
> +          "{'id':'alias',"
> +           "'backend':{'type':'socket',"
> +                      "'data':{'addr':{'type':'inet',"
> +                                      "'data':{'host':'example.com',"
> +                                              "'port':'1234'}}}}}");
> +
> +    memset(&chr, 0, sizeof(chr));
> +    chr.type = VIR_DOMAIN_CHR_TYPE_UNIX;
> +    chr.data.nix.path = (char *) "/path/to/socket";
> +    CHECK("unix", false,
> +          "{'id':'alias',"
> +           "'backend':{'type':'socket',"
> +                      "'data':{'addr':{'type':'unix',"
> +                                      "'data':{'path':'/path/to/socket'}},"
> +                              "'wait':false,"
> +                              "'server':false}}}");
> 
>      chr = (virDomainChrSourceDef) { .type = VIR_DOMAIN_CHR_TYPE_SPICEVMC };
> -    CHECK("spicevmc", false);
> +    CHECK("spicevmc", false,
> +          "{'id':'alias','backend':{'type':'spicevmc','"
> +                                    "data':{'type':'vdagent'}}}");
> 
>      chr = (virDomainChrSourceDef) { .type = VIR_DOMAIN_CHR_TYPE_PIPE };
> -    CHECK("pipe", true);
> +    CHECK("pipe", true, "");
> 
>      chr = (virDomainChrSourceDef) { .type = VIR_DOMAIN_CHR_TYPE_STDIO };
> -    CHECK("stdio", true);
> +    CHECK("stdio", true, "");
>  #undef CHECK
> 
>      return ret;
> 




More information about the libvir-list mailing list