From: Mark Andrews Date: Wed, 2 Sep 2020 08:22:21 +0000 (+1000) Subject: Add the ability to select tests to run X-Git-Tag: v9.17.6~19^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=76837484e7d6f9a70c8217f9bd7f5aa1784fe353;p=thirdparty%2Fbind9.git Add the ability to select tests to run task_test [-t ] --- diff --git a/lib/isc/Makefile.am b/lib/isc/Makefile.am index 2c84285b166..c6b63a410be 100644 --- a/lib/isc/Makefile.am +++ b/lib/isc/Makefile.am @@ -16,6 +16,7 @@ libisc_la_HEADERS = \ include/isc/bind9.h \ include/isc/buffer.h \ include/isc/bufferlist.h \ + include/isc/cmocka.h \ include/isc/commandline.h \ include/isc/counter.h \ include/isc/crc64.h \ diff --git a/lib/isc/include/isc/cmocka.h b/lib/isc/include/isc/cmocka.h new file mode 100644 index 00000000000..aadfcadab1c --- /dev/null +++ b/lib/isc/include/isc/cmocka.h @@ -0,0 +1,53 @@ +/* + * Copyright (C) Internet Systems Consortium, Inc. ("ISC") + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, you can obtain one at https://mozilla.org/MPL/2.0/. + * + * See the COPYRIGHT file distributed with this work for additional + * information regarding copyright ownership. + */ + +/*! \file isc/cmocka.h */ + +#pragma once + +#include + +#include + +ISC_LANG_BEGINDECLS + +/* + * Copy the test identified by 'name' from 'tests' to 'selected'. + */ +#define cmocka_add_test_byname(tests, name, selected) \ + _cmocka_add_test_byname(tests, sizeof(tests) / sizeof(tests[0]), name, \ + selected, \ + sizeof(selected) / sizeof(selected[0])) + +static inline bool +_cmocka_add_test_byname(const struct CMUnitTest *tests, size_t ntests, + const char *name, struct CMUnitTest *selected, + size_t nselected) { + size_t i, j; + + for (i = 0; i < ntests && tests[i].name != NULL; i++) { + if (strcmp(tests[i].name, name) != 0) { + continue; + } + for (j = 0; j < nselected && selected[j].name != NULL; j++) { + if (strcmp(tests[j].name, name) == 0) { + break; + } + } + if (j < nselected && selected[j].name == NULL) { + selected[j] = tests[i]; + } + return (true); + } + return (false); +} + +ISC_LANG_ENDDECLS diff --git a/lib/isc/tests/task_test.c b/lib/isc/tests/task_test.c index 00210c603af..b64566678b9 100644 --- a/lib/isc/tests/task_test.c +++ b/lib/isc/tests/task_test.c @@ -22,9 +22,9 @@ #include #define UNIT_TESTING -#include #include +#include #include #include #include @@ -1549,10 +1549,22 @@ main(int argc, char **argv) { cmocka_unit_test_setup_teardown(task_exclusive, _setup4, _teardown), }; + struct CMUnitTest selected[sizeof(tests) / sizeof(tests[0])]; int c; - while ((c = isc_commandline_parse(argc, argv, "v")) != -1) { + memset(selected, 0, sizeof(selected)); + + while ((c = isc_commandline_parse(argc, argv, "t:v")) != -1) { switch (c) { + case 't': + if (!cmocka_add_test_byname( + tests, isc_commandline_argument, selected)) + { + fprintf(stderr, "unknown test '%s'\n", + isc_commandline_argument); + exit(1); + } + break; case 'v': verbose = true; break; @@ -1561,7 +1573,11 @@ main(int argc, char **argv) { } } - return (cmocka_run_group_tests(tests, NULL, NULL)); + if (selected[0].name != NULL) { + return (cmocka_run_group_tests(selected, NULL, NULL)); + } else { + return (cmocka_run_group_tests(tests, NULL, NULL)); + } } #else /* HAVE_CMOCKA */ diff --git a/util/copyrights b/util/copyrights index e7594997b18..8f6d7c22a20 100644 --- a/util/copyrights +++ b/util/copyrights @@ -1791,6 +1791,7 @@ ./lib/isc/include/isc/bind9.h C 2009,2013,2016,2018,2019,2020 ./lib/isc/include/isc/buffer.h C 1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2010,2012,2014,2016,2017,2018,2019,2020 ./lib/isc/include/isc/bufferlist.h C 1999,2000,2001,2004,2005,2006,2007,2016,2018,2019,2020 +./lib/isc/include/isc/cmocka.h C 2020 ./lib/isc/include/isc/commandline.h C 1999,2000,2001,2004,2005,2006,2007,2015,2016,2018,2019,2020 ./lib/isc/include/isc/counter.h C 2014,2016,2018,2019,2020 ./lib/isc/include/isc/crc64.h C 2013,2016,2018,2019,2020