[libvirt] [PATCH v2] tests: dynamically replace dnsmasq path
Eric Blake
eblake at redhat.com
Thu Feb 2 00:03:16 UTC 2012
On 01/30/2012 10:13 AM, Philipp Hahn wrote:
> 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.)
>
> v2:
> - Use VIR_REALLOC_N() instead of realloc()
> - Use memcpy() for replacement
> - Skip shrinking buffer
> - Add missing update of token_end
> - simplify code after the changes above
> - unit-test the unit-test:
> #include <assert.h>
> #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");
Nice. If we ever need to generalize this into the common testutils.c
for sharing with other tests, then we should probably also make that a
formal unit test at that time.
> TEST("<AAAA", "AA", "BBB", "<BBBBBB");
> alarm(1); /* no infinit loop */
s/infinit/infinite/
> + 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 shrinkt the buffer here... */
s/shrinkt/shrink/
ACK and pushed.
--
Eric Blake eblake at redhat.com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120201/5af8723c/attachment-0001.sig>
More information about the libvir-list
mailing list