summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Biebl <mbiebl@gmail.com>2018-09-11 23:30:16 +0200
committerGitHub <noreply@github.com>2018-09-11 23:30:16 +0200
commit878f2dae77e61ee6765b72318f49f8226f45ec0f (patch)
tree467a962999e6a6db669e89f847f8072a8d12ceed
parenta507737e5c440dae56102b6b8d0e68b68e624d00 (diff)
parentd9b6baa69968132d33e4ad8627c7fe0bd527c859 (diff)
downloadsystemd-878f2dae77e61ee6765b72318f49f8226f45ec0f.tar.gz
systemd-878f2dae77e61ee6765b72318f49f8226f45ec0f.tar.bz2
systemd-878f2dae77e61ee6765b72318f49f8226f45ec0f.zip
Merge pull request #10046 from yuwata/fix-10045
test: use installed catalogs when test-catalog is not located at build dir
-rw-r--r--catalog/meson.build1
-rw-r--r--src/journal/test-catalog.c27
-rw-r--r--src/shared/tests.c23
-rw-r--r--src/shared/tests.h1
-rw-r--r--src/test/meson.build2
5 files changed, 41 insertions, 13 deletions
diff --git a/catalog/meson.build b/catalog/meson.build
index 1b13150894..3db8e390f2 100644
--- a/catalog/meson.build
+++ b/catalog/meson.build
@@ -17,7 +17,6 @@ in_files = '''
support_url = get_option('support-url')
support_sed = 's~%SUPPORT_URL%~@0@~'.format(support_url)
-build_catalog_dir = meson.current_build_dir()
foreach file : in_files
custom_target(
diff --git a/src/journal/test-catalog.c b/src/journal/test-catalog.c
index 8eae993780..0c4da29f31 100644
--- a/src/journal/test-catalog.c
+++ b/src/journal/test-catalog.c
@@ -14,14 +14,13 @@
#include "fileio.h"
#include "log.h"
#include "macro.h"
+#include "path-util.h"
#include "string-util.h"
+#include "strv.h"
+#include "tests.h"
#include "util.h"
-static const char *catalog_dirs[] = {
- CATALOG_DIR,
- NULL,
-};
-
+static char** catalog_dirs = NULL;
static const char *no_catalog_dirs[] = {
"/bin/hopefully/with/no/catalog",
NULL
@@ -167,8 +166,8 @@ static void test_catalog_update(const char *database) {
assert_se(r == 0);
/* Make sure that we at least have some files loaded or the
- catalog_list below will fail. */
- r = catalog_update(database, NULL, catalog_dirs);
+ * catalog_list below will fail. */
+ r = catalog_update(database, NULL, (const char * const *) catalog_dirs);
assert_se(r == 0);
}
@@ -202,14 +201,26 @@ static void test_catalog_file_lang(void) {
int main(int argc, char *argv[]) {
_cleanup_(unlink_tempfilep) char database[] = "/tmp/test-catalog.XXXXXX";
- _cleanup_free_ char *text = NULL;
+ _cleanup_free_ char *text = NULL, *catalog_dir = NULL;
int r;
setlocale(LC_ALL, "de_DE.UTF-8");
+ log_set_max_level(LOG_DEBUG);
log_parse_environment();
log_open();
+ /* If test-catalog is located at the build directory, then use catalogs in that.
+ * If it is not, e.g. installed by systemd-tests package, then use installed catalogs. */
+ if (test_is_running_from_builddir(NULL)) {
+ assert_se(catalog_dir = path_join(NULL, ABS_BUILD_DIR, "catalog"));
+ catalog_dirs = STRV_MAKE(catalog_dir);
+ } else
+ catalog_dirs = STRV_MAKE(CATALOG_DIR);
+
+ assert_se(access(catalog_dirs[0], F_OK) >= 0);
+ log_notice("Using catalog directory '%s'", catalog_dirs[0]);
+
test_catalog_file_lang();
test_catalog_import_invalid();
diff --git a/src/shared/tests.c b/src/shared/tests.c
index 6b3df0aa07..c3704c743f 100644
--- a/src/shared/tests.c
+++ b/src/shared/tests.c
@@ -19,6 +19,24 @@ char* setup_fake_runtime_dir(void) {
return p;
}
+bool test_is_running_from_builddir(char **exedir) {
+ _cleanup_free_ char *s = NULL;
+ bool r;
+
+ /* Check if we're running from the builddir. Optionally, this returns
+ * the path to the directory where the binary is located. */
+
+ assert_se(readlink_and_make_absolute("/proc/self/exe", &s) >= 0);
+ r = path_startswith(s, ABS_BUILD_DIR);
+
+ if (exedir) {
+ dirname(s);
+ *exedir = TAKE_PTR(s);
+ }
+
+ return r;
+}
+
const char* get_testdata_dir(const char *suffix) {
const char *env;
/* convenience: caller does not need to free result */
@@ -35,14 +53,13 @@ const char* get_testdata_dir(const char *suffix) {
strncpy(testdir, env, sizeof(testdir) - 1);
} else {
_cleanup_free_ char *exedir = NULL;
- assert_se(readlink_and_make_absolute("/proc/self/exe", &exedir) >= 0);
/* Check if we're running from the builddir. If so, use the compiled in path. */
- if (path_startswith(exedir, ABS_BUILD_DIR))
+ if (test_is_running_from_builddir(&exedir))
assert_se(snprintf(testdir, sizeof(testdir), "%s/test", ABS_SRC_DIR) > 0);
else
/* Try relative path, according to the install-test layout */
- assert_se(snprintf(testdir, sizeof(testdir), "%s/testdata", dirname(exedir)) > 0);
+ assert_se(snprintf(testdir, sizeof(testdir), "%s/testdata", exedir) > 0);
/* test this without the suffix, as it may contain a glob */
if (access(testdir, F_OK) < 0) {
diff --git a/src/shared/tests.h b/src/shared/tests.h
index b88135ed93..c9fa11fb6a 100644
--- a/src/shared/tests.h
+++ b/src/shared/tests.h
@@ -2,4 +2,5 @@
#pragma once
char* setup_fake_runtime_dir(void);
+bool test_is_running_from_builddir(char **exedir);
const char* get_testdata_dir(const char *suffix);
diff --git a/src/test/meson.build b/src/test/meson.build
index dd6c83700d..3f91c250a5 100644
--- a/src/test/meson.build
+++ b/src/test/meson.build
@@ -757,7 +757,7 @@ tests += [
[threads,
libxz,
liblz4],
- '', '', '-DCATALOG_DIR="@0@"'.format(build_catalog_dir)],
+ '', '', '-DCATALOG_DIR="@0@"'.format(catalogdir)],
[['src/journal/test-compress.c'],
[libjournal_core,