[libvirt] [PATCH 3/3] networkxml2conftest: Fix build on BSD

Roman Bogorodskiy bogorodskiy at gmail.com
Sun Jan 1 08:35:02 UTC 2017


  Martin Kletzander wrote:

> On Fri, Dec 30, 2016 at 05:06:40PM +0100, Martin Kletzander wrote:
> >On Fri, Dec 30, 2016 at 04:00:21PM +0400, Roman Bogorodskiy wrote:
> >>  Martin Kletzander wrote:
> >>
> >>> Yet another way to fix the different loopback naming.  This variant
> >>> doesn't use multiple files, allows easy addition of more loopback
> >>> names and factoring out the naming code to a function (which would
> >>> programmatically get the loopback interface name) is very easy.  OTOH
> >>> we lose a way to regenerate the files (well, the *easy* way).
> >>>
> >>> Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
> >>> ---
> >>>
> >>> Notes:
> >>>     The build is *NOT* tested on any non-Linux patch after this change.  I
> >>>     feel like it's easier for someone else to try it out than for me to
> >>>     spin up a new VM, install FreeBSD, figure out what's needed for
> >>>     building libvirt there and all that during the holidays.
> >>
> >>This sounds like a process with a very high entertainment value. :-)
> >>
> >
> >I know, it's not like I haven't done that few times =D
> >
> >>Unfortunately, I have a FreeBSD installation already, so... spoiler
> >>alert, test results are below.
> >>
> >>>     So please, if someone is bored out of their mind, feel free to test it
> >>>     out ;)
> >>>
> >>>  tests/networkxml2confdata/dhcp6-nat-network.conf   |  2 +-
> >>>  tests/networkxml2confdata/dhcp6-network.conf       |  2 +-
> >>>  .../dhcp6host-routed-network.conf                  |  2 +-
> >>>  tests/networkxml2confdata/isolated-network.conf    |  2 +-
> >>>  .../nat-network-dns-forward-plain.conf             |  2 +-
> >>>  .../nat-network-dns-forwarders.conf                |  2 +-
> >>>  .../networkxml2confdata/nat-network-dns-hosts.conf |  2 +-
> >>>  .../nat-network-dns-local-domain.conf              |  2 +-
> >>>  .../nat-network-dns-srv-record-minimal.conf        |  2 +-
> >>>  .../nat-network-dns-srv-record.conf                |  2 +-
> >>>  .../nat-network-dns-txt-record.conf                |  2 +-
> >>>  .../nat-network-name-with-quotes.conf              |  2 +-
> >>>  tests/networkxml2confdata/nat-network.conf         |  2 +-
> >>>  tests/networkxml2confdata/netboot-network.conf     |  2 +-
> >>>  .../networkxml2confdata/netboot-proxy-network.conf |  2 +-
> >>>  tests/networkxml2confdata/open-network.conf        |  2 +-
> >>>  tests/networkxml2confdata/ptr-domains-auto.conf    |  2 +-
> >>>  .../networkxml2confdata/routed-network-no-dns.conf |  2 +-
> >>>  tests/networkxml2confdata/routed-network.conf      |  2 +-
> >>>  tests/networkxml2conftest.c                        | 41 ++++++++++++++++++++--
> >>>  20 files changed, 58 insertions(+), 21 deletions(-)
> >>>
> >>> diff --git a/tests/networkxml2conftest.c b/tests/networkxml2conftest.c
> >>> index 7ff243b98d20..8ff2c0d33d34 100644
> >>> --- a/tests/networkxml2conftest.c
> >>> +++ b/tests/networkxml2conftest.c
> >>> @@ -19,15 +19,25 @@
> >>>  #define VIR_FROM_THIS VIR_FROM_NONE
> >>>
> >>>  static int
> >>> -testCompareXMLToConfFiles(const char *inxml, const char *outconf, dnsmasqCapsPtr caps)
> >>> +testCompareXMLToConfFiles(const char *inxml,
> >>> +                          const char *outconf,
> >>> +                          dnsmasqCapsPtr caps)
> >>>  {
> >>>      char *actual = NULL;
> >>> +    char *expected = NULL;
> >>>      int ret = -1;
> >>>      virNetworkDefPtr dev = NULL;
> >>>      virNetworkObjPtr obj = NULL;
> >>>      virCommandPtr cmd = NULL;
> >>>      char *pidfile = NULL;
> >>>      dnsmasqContext *dctx = NULL;
> >>> +    const char *loopback_name = "lo";
> >>> +    const char *loopback_placeholder = "@LOOPBACK_NAME@";
> >>> +    char *tmp = NULL;
> >>> +
> >>> +#ifndef __linux__
> >>> +    loname = "lo0";
> >>       ^^^^^^
> >>             should be 'loopback_name'.
> >>
> >
> >🤦 so few rounds of refactoring will not be hidden under the covers.
> >OK, OK, I admit I didn't write it in one go =D
> >
> >>After that I have networkxml2conftest runs smoothly for me.
> >>
> >
> >Great!
> >
> >>> +#endif
> >>>
> >>>      if (!(dev = virNetworkDefParseFile(inxml)))
> >>>          goto fail;
> >>> @@ -45,13 +55,40 @@ testCompareXMLToConfFiles(const char *inxml, const char *outconf, dnsmasqCapsPtr
> >>>                                     dctx, caps) < 0)
> >>>          goto fail;
> >>>
> >>> -    if (virTestCompareToFile(actual, outconf) < 0)
> >>> +    /* Regeneration option is sacrificed so that we can have one file for both
> >>> +     * Linux and non-Linux outputs */
> >>> +    if (virTestLoadFile(outconf, &expected) < 0)
> >>>          goto fail;
> >>>
> >>> +    tmp = strstr(expected, loopback_placeholder);
> >>> +    if (tmp) {
> >>> +        size_t placeholder_len = strlen(loopback_placeholder);
> >>> +        size_t loname_len = strlen(loopback_name);
> >>> +
> >>> +        if (loname_len > placeholder_len) {
> >>> +            fprintf(stderr, "%s", "Increase the loopback placeholder size");
> >>> +            goto fail;
> >>> +        }
> >>> +
> >>> +        if (!virStrncpy(tmp, loopback_name, strlen(loopback_name), strlen(tmp)))
> >>> +            goto fail;
> >>> +
> >>> +        memmove(tmp + loname_len, tmp + placeholder_len,
> >>> +                strlen(tmp + placeholder_len) + 1);
> >>> +    }
> >>> +
> >>> +    if (STRNEQ_NULLABLE(actual, expected)) {
> >>> +        virTestDifferenceFullNoRegenerate(stderr,
> >>> +                                          expected, outconf,
> >>> +                                          actual, NULL);
> >>> +        goto fail;
> >>> +    }
> >>> +
> >>>      ret = 0;
> >>>
> >>>   fail:
> >>>      VIR_FREE(actual);
> >>> +    VIR_FREE(expected);
> >>>      VIR_FREE(pidfile);
> >>>      virCommandFree(cmd);
> >>>      virObjectUnref(obj);
> >>
> >>Out of curiosity, can we use virStringReplace() here? I still have this
> >
> >8-0 We have that?  I feel like I should've known... Or at least
> >should've tried looking for it.
> >
> >>working with the following change (along with the loname fix):
> >>
> >
> >Perfect.  ACK to your version if you're OK with it as well (the only
> >ACKs I've found in this mail are in the 'LOOPBACK' placeholder ;)), then
> >feel free to push it since you have the working commit handy.
> >
> 
> No rush, I see Michal has yet another proposal for this that we haven't
> considered and even though there are somedrawbacks to that as well, it
> looks nicer than this.
> 
> After all the ideas I'm starting to like the "gross" one the best.  Oh
> my =)
> 
> >Martin

My vote still goes to this solution, because having a placeholder seems
more explicit and easier to follow than doing s/lo/lo0/ directly.

Roman Bogorodskiy
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 455 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20170101/093f651c/attachment-0001.sig>


More information about the libvir-list mailing list