mirror of
https://github.com/systemd/systemd.git
synced 2024-11-01 17:51:22 +03:00
test: make unit tests relocatable
It is useful to package test-* binaries and run them as root under autopkgtest or manually on particular machines. They currently have a built-in hardcoded absolute path to their test data, which does not work when running the test programs from any other path than the original build directory. By default, make the tests look for their data in <test_exe_directory>/testdata/ so that they can be called from any directory (provided that the corresponding test data is installed correctly). As we don't have a fixed static path in the build tree (as build and source tree are independent), set $TEST_DIR with "make check" to point to <srcdir>/test/, as we previously did with an automake variable.
This commit is contained in:
parent
ee3c7ff7c3
commit
f853c6efb5
@ -150,6 +150,7 @@ endif
|
||||
AM_TESTS_ENVIRONMENT = \
|
||||
export SYSTEMD_KBD_MODEL_MAP=$(abs_top_srcdir)/src/locale/kbd-model-map; \
|
||||
export SYSTEMD_LANGUAGE_FALLBACK_MAP=$(abs_top_srcdir)/src/locale/language-fallback-map; \
|
||||
export TEST_DIR=$(abs_top_srcdir)/test; \
|
||||
export PATH=$(abs_top_builddir):$$PATH;
|
||||
|
||||
if ENABLE_BASH_COMPLETION
|
||||
@ -218,7 +219,6 @@ AM_CPPFLAGS = \
|
||||
-DLIBDIR=\"$(libdir)\" \
|
||||
-DROOTLIBDIR=\"$(rootlibdir)\" \
|
||||
-DROOTLIBEXECDIR=\"$(rootlibexecdir)\" \
|
||||
-DTEST_DIR=\"$(abs_top_srcdir)/test\" \
|
||||
-I $(top_srcdir)/src \
|
||||
-I $(top_builddir)/src/basic \
|
||||
-I $(top_srcdir)/src/basic \
|
||||
@ -5637,7 +5637,8 @@ test_dns_packet_SOURCES = \
|
||||
$(basic_dns_sources)
|
||||
|
||||
test_dns_packet_CPPFLAGS = \
|
||||
$(AM_CPPFLAGS)
|
||||
$(AM_CPPFLAGS) \
|
||||
-I $(top_srcdir)/src/test
|
||||
|
||||
test_dns_packet_CFLAGS = \
|
||||
$(AM_CFLAGS) \
|
||||
|
@ -31,6 +31,8 @@
|
||||
#include "strv.h"
|
||||
#include "unaligned.h"
|
||||
|
||||
#include "test-helper.h"
|
||||
|
||||
#define HASH_KEY SD_ID128_MAKE(d3,1e,48,90,4b,fa,4c,fe,af,9d,d5,a1,d7,2e,8a,b1)
|
||||
|
||||
static void verify_rr_copy(DnsResourceRecord *rr) {
|
||||
@ -115,7 +117,7 @@ int main(int argc, char **argv) {
|
||||
N = argc - 1;
|
||||
fnames = argv + 1;
|
||||
} else {
|
||||
assert_se(glob(TEST_DIR "/test-resolve/*.pkts", GLOB_NOSORT, NULL, &g) == 0);
|
||||
assert_se(glob(TEST_DATA_DIR("/test-resolve/*.pkts"), GLOB_NOSORT, NULL, &g) == 0);
|
||||
N = g.gl_pathc;
|
||||
fnames = g.gl_pathv;
|
||||
}
|
||||
|
@ -17,6 +17,9 @@
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
#include <alloc-util.h>
|
||||
#include <fs-util.h>
|
||||
#include <libgen.h>
|
||||
#include <stdlib.h>
|
||||
#include <util.h>
|
||||
|
||||
@ -31,3 +34,13 @@ char* setup_fake_runtime_dir(void) {
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
const char* get_exe_relative_testdata_dir(void) {
|
||||
_cleanup_free_ char *exedir = NULL;
|
||||
/* convenience: caller does not need to free result */
|
||||
static char testdir[PATH_MAX];
|
||||
|
||||
assert_se(readlink_and_make_absolute("/proc/self/exe", &exedir) >= 0);
|
||||
assert_se(snprintf(testdir, sizeof(testdir), "%s/testdata", dirname(exedir)) > 0);
|
||||
return testdir;
|
||||
}
|
||||
|
@ -20,3 +20,4 @@
|
||||
***/
|
||||
|
||||
char* setup_fake_runtime_dir(void);
|
||||
const char* get_exe_relative_testdata_dir(void);
|
||||
|
@ -34,7 +34,7 @@ static int test_cgroup_mask(void) {
|
||||
int r;
|
||||
|
||||
/* Prepare the manager. */
|
||||
assert_se(set_unit_path(TEST_DIR) >= 0);
|
||||
assert_se(set_unit_path(TEST_DATA_DIR("")) >= 0);
|
||||
r = manager_new(UNIT_FILE_USER, true, &m);
|
||||
if (r == -EPERM || r == -EACCES) {
|
||||
puts("manager_new: Permission denied. Skipping test.");
|
||||
|
@ -40,7 +40,7 @@ int main(int argc, char *argv[]) {
|
||||
assert_se(runtime_dir = setup_fake_runtime_dir());
|
||||
|
||||
/* prepare the test */
|
||||
assert_se(set_unit_path(TEST_DIR) >= 0);
|
||||
assert_se(set_unit_path(TEST_DATA_DIR("")) >= 0);
|
||||
r = manager_new(UNIT_FILE_USER, true, &m);
|
||||
if (MANAGER_SKIP_TEST(r)) {
|
||||
log_notice_errno(r, "Skipping test: manager_new: %m");
|
||||
|
@ -516,7 +516,7 @@ int main(int argc, char *argv[]) {
|
||||
}
|
||||
|
||||
assert_se(setenv("XDG_RUNTIME_DIR", "/tmp/", 1) == 0);
|
||||
assert_se(set_unit_path(TEST_DIR "/test-execute/") >= 0);
|
||||
assert_se(set_unit_path(TEST_DATA_DIR("/test-execute/")) >= 0);
|
||||
|
||||
/* Unset VAR1, VAR2 and VAR3 which are used in the PassEnvironment test
|
||||
* cases, otherwise (and if they are present in the environment),
|
||||
|
@ -20,6 +20,8 @@
|
||||
***/
|
||||
|
||||
#include "sd-daemon.h"
|
||||
#include "string-util.h"
|
||||
#include "tests.h"
|
||||
|
||||
#include "macro.h"
|
||||
|
||||
@ -39,3 +41,6 @@
|
||||
-ENOENT, \
|
||||
-ENOMEDIUM /* cannot determine cgroup */ \
|
||||
)
|
||||
|
||||
#define TEST_DATA_DIR(subdir) \
|
||||
strjoina(getenv("TEST_DIR") ?: get_exe_relative_testdata_dir(), subdir)
|
||||
|
@ -263,7 +263,7 @@ int main(int argc, char *argv[]) {
|
||||
log_open();
|
||||
|
||||
assert_se(runtime_dir = setup_fake_runtime_dir());
|
||||
assert_se(set_unit_path(TEST_DIR "/test-path/") >= 0);
|
||||
assert_se(set_unit_path(TEST_DATA_DIR("/test-path/")) >= 0);
|
||||
|
||||
for (test = tests; test && *test; test++) {
|
||||
int r;
|
||||
|
@ -37,7 +37,7 @@ int main(int argc, char *argv[]) {
|
||||
assert_se(runtime_dir = setup_fake_runtime_dir());
|
||||
|
||||
/* prepare the test */
|
||||
assert_se(set_unit_path(TEST_DIR) >= 0);
|
||||
assert_se(set_unit_path(TEST_DATA_DIR("")) >= 0);
|
||||
r = manager_new(UNIT_FILE_USER, true, &m);
|
||||
if (MANAGER_SKIP_TEST(r)) {
|
||||
log_notice_errno(r, "Skipping test: manager_new: %m");
|
||||
|
Loading…
Reference in New Issue
Block a user