From: Yu Watanabe Date: Wed, 26 Sep 2018 13:51:57 +0000 (+0900) Subject: test: introduce test-udev-build-argv X-Git-Tag: v240~630^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bd206af40242c62cbae708fa0405f083eb266720;p=thirdparty%2Fsystemd.git test: introduce test-udev-build-argv This intends to clarify the rule udev_build_argv() uses. --- diff --git a/src/test/meson.build b/src/test/meson.build index 21a8c3b12b9..7e603cf1c0d 100644 --- a/src/test/meson.build +++ b/src/test/meson.build @@ -632,6 +632,18 @@ tests += [ libacl], '', 'manual', '-DLOG_REALM=LOG_REALM_UDEV'], + [['src/test/test-udev-build-argv.c'], + [libudev_core, + libudev_static, + libsystemd_network, + libshared], + [threads, + librt, + libblkid, + libkmod, + libacl], + '', '', '-DLOG_REALM=LOG_REALM_UDEV'], + [['src/test/test-id128.c'], [], []], diff --git a/src/test/test-udev-build-argv.c b/src/test/test-udev-build-argv.c new file mode 100644 index 00000000000..c71c706e2ef --- /dev/null +++ b/src/test/test-udev-build-argv.c @@ -0,0 +1,78 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ + +#include "alloc-util.h" +#include "string-util.h" +#include "strv.h" +#include "tests.h" +#include "udev.h" + +static void test_udev_build_argv_one(const char *c) { + _cleanup_strv_free_ char **a = NULL; + _cleanup_free_ char *arg = NULL; + char *argv[128], **p; + int argc; + size_t i; + + assert_se(a = strv_split_full(c, NULL, SPLIT_QUOTES | SPLIT_RELAX)); + + assert_se(arg = strdup(c)); + assert_se(udev_build_argv(arg, &argc, argv) >= 0); + + log_info("command: %s", c); + + i = 0; + log_info("strv_split:"); + STRV_FOREACH(p, a) + log_info("argv[%zu] = '%s'", i++, *p); + + i = 0; + log_info("udev_build_argv:"); + STRV_FOREACH(p, argv) + log_info("argv[%zu] = '%s'", i++, *p); + + assert_se(strv_equal(argv, a)); + assert_se(argc == (int) strv_length(a)); + +} + +static void test_udev_build_argv(void) { + test_udev_build_argv_one("one two three"); + test_udev_build_argv_one("one 'two three ' \" four five \" 'aaa bbb "); + test_udev_build_argv_one("/bin/echo -e \\101"); + test_udev_build_argv_one("/bin/echo -n special-device"); + test_udev_build_argv_one("/bin/echo -n special-device"); + test_udev_build_argv_one("/bin/echo test"); + test_udev_build_argv_one("/bin/echo -n test-%b"); + test_udev_build_argv_one("/bin/echo -n foo3 foo4 foo5 foo6 foo7 foo8 foo9"); + test_udev_build_argv_one("/bin/sh -c 'echo foo3 foo4 foo5 foo6 foo7 foo8 foo9 | sed s/foo9/bar9/'"); + test_udev_build_argv_one("/bin/echo -n 'foo3 foo4' 'foo5 foo6 foo7 foo8'"); + test_udev_build_argv_one("/bin/sh -c 'printf %%s \\\"foo1 foo2\\\" | grep \\\"foo1 foo2\\\"'"); + test_udev_build_argv_one("/bin/sh -c \\\"printf %%s 'foo1 foo2' | grep 'foo1 foo2'\\\""); + test_udev_build_argv_one("/bin/sh -c 'printf \\\"%%s %%s\\\" \\\"foo1 foo2\\\" \\\"foo3\\\"| grep \\\"foo1 foo2\\\"'"); + test_udev_build_argv_one("/bin/echo -n foo3 foo4 foo5 foo6 foo7 foo8 foo9"); + test_udev_build_argv_one("/bin/echo -n foo3 foo4 foo5 foo6 foo7 foo8 foo9"); + test_udev_build_argv_one("/bin/echo -n foo"); + test_udev_build_argv_one("/bin/echo -n usb-%b"); + test_udev_build_argv_one("/bin/echo -n scsi-%b"); + test_udev_build_argv_one("/bin/echo -n foo-%b"); + test_udev_build_argv_one("/bin/echo test"); + test_udev_build_argv_one("/bin/echo symlink test this"); + test_udev_build_argv_one("/bin/echo symlink test this"); + test_udev_build_argv_one("/bin/echo link test this"); + test_udev_build_argv_one("/bin/echo -n node link1 link2"); + test_udev_build_argv_one("/bin/echo -n node link1 link2 link3 link4"); + test_udev_build_argv_one("/usr/bin/test -b %N"); + test_udev_build_argv_one("/bin/echo -e name; (/usr/bin/badprogram)"); + test_udev_build_argv_one("/bin/echo -e \\xc3\\xbcber"); + test_udev_build_argv_one("/bin/echo -e \\xef\\xe8garbage"); + test_udev_build_argv_one("/bin/echo 1 1 0400"); + test_udev_build_argv_one("/bin/echo 0 0 0400letsdoabuffferoverflow0123456789012345789012345678901234567890"); +} + +int main(int argc, char *argv[]) { + test_setup_logging(LOG_DEBUG); + + test_udev_build_argv(); + + return 0; +}