From: Philipp Hahn Date: Mon, 30 Jan 2012 17:13:08 +0000 (+0100) Subject: tests: dynamically replace dnsmasq path X-Git-Tag: v0.9.10-rc1~31 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=22ec60001e9a41fbd529922551313970224aad94;p=thirdparty%2Flibvirt.git tests: dynamically replace dnsmasq path The path to the dnsmasq binary can be configured while in the test data the path is hard-coded to /usr/bin/. This break the test suite if a the binary is located in a different location, like /usr/local/sbin/. Replace the hard coded path in the test data by a token, which is dynamically replaced in networkxml2argvtest with the configured path after the test data has been loaded. (Another option would have been to modify configure.ac to generate the test data during configure, but I do not know of an easy way do trick configure into mass-generate those test files without listing every single one, which I consider less flexible.) - unit-test the unit-test: #include #define TEST(in,token,rep,out) { char *buf = strdup(in); assert(!replaceTokens(&buf, token, rep) && !strcmp(buf, out)); free(buf); } TEST("", "AA", "B", ""); TEST("A", "AA", "B", "A"); TEST("AA", "AA", "B", "B"); TEST("AAA", "AA", "B", "BA"); TEST("AA", "AA", "BB", "BB"); TEST("AA", "AA", "BBB", "BBB"); TEST("", "AA", "B", "B>"); TEST("AA>", "AA", "BB", "BB>"); TEST("AA>", "AA", "BBB", "BBB>"); TEST("", "AA", "B", ""); TEST("", "AA", "BB", ""); TEST("", "AA", "BBB", ""); TEST("", "AA", "B", ""); TEST("", "AA", "BB", ""); TEST("", "AA", "BBB", ""); TEST("", "AA", "B", ""); TEST("", "AA", "BB", ""); TEST("", "AA", "BBB", ""); TEST("AAAA>", "AA", "B", "BB>"); TEST("AAAA>", "AA", "BB", "BBBB>"); TEST("AAAA>", "AA", "BBB", "BBBBBB>"); TEST(" --- diff --git a/tests/networkxml2argvdata/isolated-network.argv b/tests/networkxml2argvdata/isolated-network.argv index 7ea2e94404..a9beb05911 100644 --- a/tests/networkxml2argvdata/isolated-network.argv +++ b/tests/networkxml2argvdata/isolated-network.argv @@ -1,4 +1,4 @@ -/usr/sbin/dnsmasq --strict-order --bind-interfaces --conf-file= \ +@DNSMASQ@ --strict-order --bind-interfaces --conf-file= \ --except-interface lo --dhcp-option=3 --no-resolv \ --listen-address 192.168.152.1 \ --dhcp-range 192.168.152.2,192.168.152.254 \ diff --git a/tests/networkxml2argvdata/nat-network-dns-hosts.argv b/tests/networkxml2argvdata/nat-network-dns-hosts.argv index 2158df8702..c7e496797d 100644 --- a/tests/networkxml2argvdata/nat-network-dns-hosts.argv +++ b/tests/networkxml2argvdata/nat-network-dns-hosts.argv @@ -1,3 +1,3 @@ -/usr/sbin/dnsmasq --strict-order --bind-interfaces --domain example.com \ +@DNSMASQ@ --strict-order --bind-interfaces --domain example.com \ --conf-file= --except-interface lo --listen-address 192.168.122.1 \ --expand-hosts --addn-hosts=/var/lib/libvirt/dnsmasq/default.addnhosts\ diff --git a/tests/networkxml2argvdata/nat-network-dns-srv-record-minimal.argv b/tests/networkxml2argvdata/nat-network-dns-srv-record-minimal.argv index 021e8f07a5..ea1da6d5f8 100644 --- a/tests/networkxml2argvdata/nat-network-dns-srv-record-minimal.argv +++ b/tests/networkxml2argvdata/nat-network-dns-srv-record-minimal.argv @@ -1,4 +1,4 @@ -/usr/sbin/dnsmasq \ +@DNSMASQ@ \ --strict-order \ --bind-interfaces \ --conf-file= \ diff --git a/tests/networkxml2argvdata/nat-network-dns-srv-record.argv b/tests/networkxml2argvdata/nat-network-dns-srv-record.argv index 85afbba700..84c2d2f60d 100644 --- a/tests/networkxml2argvdata/nat-network-dns-srv-record.argv +++ b/tests/networkxml2argvdata/nat-network-dns-srv-record.argv @@ -1,4 +1,4 @@ -/usr/sbin/dnsmasq \ +@DNSMASQ@ \ --strict-order \ --bind-interfaces \ --conf-file= \ diff --git a/tests/networkxml2argvdata/nat-network-dns-txt-record.argv b/tests/networkxml2argvdata/nat-network-dns-txt-record.argv index be6ba4bff0..bed309ffe6 100644 --- a/tests/networkxml2argvdata/nat-network-dns-txt-record.argv +++ b/tests/networkxml2argvdata/nat-network-dns-txt-record.argv @@ -1,4 +1,4 @@ -/usr/sbin/dnsmasq --strict-order --bind-interfaces --conf-file= \ +@DNSMASQ@ --strict-order --bind-interfaces --conf-file= \ --except-interface lo --txt-record=example,example value \ --listen-address 192.168.122.1 --listen-address 192.168.123.1 \ --listen-address 2001:db8:ac10:fe01::1 \ diff --git a/tests/networkxml2argvdata/nat-network.argv b/tests/networkxml2argvdata/nat-network.argv index d7faee201a..80878a8eb0 100644 --- a/tests/networkxml2argvdata/nat-network.argv +++ b/tests/networkxml2argvdata/nat-network.argv @@ -1,4 +1,4 @@ -/usr/sbin/dnsmasq --strict-order --bind-interfaces --conf-file= \ +@DNSMASQ@ --strict-order --bind-interfaces --conf-file= \ --except-interface lo --listen-address 192.168.122.1 \ --listen-address 192.168.123.1 --listen-address 2001:db8:ac10:fe01::1 \ --listen-address 2001:db8:ac10:fd01::1 --listen-address 10.24.10.1 \ diff --git a/tests/networkxml2argvdata/netboot-network.argv b/tests/networkxml2argvdata/netboot-network.argv index 78e873c951..7ae5b75bc6 100644 --- a/tests/networkxml2argvdata/netboot-network.argv +++ b/tests/networkxml2argvdata/netboot-network.argv @@ -1,4 +1,4 @@ -/usr/sbin/dnsmasq --strict-order --bind-interfaces --domain example.com \ +@DNSMASQ@ --strict-order --bind-interfaces --domain example.com \ --conf-file= --except-interface lo --listen-address 192.168.122.1 \ --dhcp-range 192.168.122.2,192.168.122.254 \ --dhcp-leasefile=/var/lib/libvirt/dnsmasq/netboot.leases \ diff --git a/tests/networkxml2argvdata/netboot-proxy-network.argv b/tests/networkxml2argvdata/netboot-proxy-network.argv index 5fe1b8ef1b..2c5a0d5339 100644 --- a/tests/networkxml2argvdata/netboot-proxy-network.argv +++ b/tests/networkxml2argvdata/netboot-proxy-network.argv @@ -1,4 +1,4 @@ -/usr/sbin/dnsmasq --strict-order --bind-interfaces --domain example.com \ +@DNSMASQ@ --strict-order --bind-interfaces --domain example.com \ --conf-file= --except-interface lo --listen-address 192.168.122.1 \ --dhcp-range 192.168.122.2,192.168.122.254 \ --dhcp-leasefile=/var/lib/libvirt/dnsmasq/netboot.leases \ diff --git a/tests/networkxml2argvdata/routed-network.argv b/tests/networkxml2argvdata/routed-network.argv index d059630d80..75303e6ee4 100644 --- a/tests/networkxml2argvdata/routed-network.argv +++ b/tests/networkxml2argvdata/routed-network.argv @@ -1,2 +1,2 @@ -/usr/sbin/dnsmasq --strict-order --bind-interfaces --conf-file= \ +@DNSMASQ@ --strict-order --bind-interfaces --conf-file= \ --except-interface lo --listen-address 192.168.122.1\ diff --git a/tests/networkxml2argvtest.c b/tests/networkxml2argvtest.c index 2dd9b7f14a..5c6e29d2e0 100644 --- a/tests/networkxml2argvtest.c +++ b/tests/networkxml2argvtest.c @@ -15,6 +15,36 @@ #include "memory.h" #include "network/bridge_driver.h" +/* Replace all occurrences of @token in @buf by @replacement and adjust size of + * @buf accordingly. Returns 0 on success and -1 on out-of-memory errors. */ +static int replaceTokens(char **buf, const char *token, const char *replacement) { + char *token_start, *token_end; + size_t buf_len, rest_len; + const size_t token_len = strlen(token); + const size_t replacement_len = strlen(replacement); + const int diff = replacement_len - token_len; + + buf_len = rest_len = strlen(*buf) + 1; + token_end = *buf; + for (;;) { + token_start = strstr(token_end, token); + if (token_start == NULL) + break; + rest_len -= token_start + token_len - token_end; + token_end = token_start + token_len; + buf_len += diff; + if (diff > 0) + if (VIR_REALLOC_N(*buf, buf_len) < 0) + return -1; + if (diff != 0) + memmove(token_end + diff, token_end, rest_len); + memcpy(token_start, replacement, replacement_len); + token_end += diff; + } + /* if diff < 0, we could shrink the buffer here... */ + return 0; +} + static int testCompareXMLToArgvFiles(const char *inxml, const char *outargv) { char *inXmlData = NULL; char *outArgvData = NULL; @@ -32,6 +62,9 @@ static int testCompareXMLToArgvFiles(const char *inxml, const char *outargv) { if (virtTestLoadFile(outargv, &outArgvData) < 0) goto fail; + if (replaceTokens(&outArgvData, "@DNSMASQ@", DNSMASQ)) + goto fail; + if (!(dev = virNetworkDefParseString(inXmlData))) goto fail;