summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2020-12-07 14:15:36 +0100
committerLennart Poettering <lennart@poettering.net>2020-12-09 13:34:40 +0100
commit68fdc72cfe19777b8f39a6a13b659e79ead4bee9 (patch)
tree7de5139b54c87170ee19f931a898e795460000c3
parentad914843c6072d64a8e265bb3fda1c1d61f46df6 (diff)
downloadsystemd-68fdc72cfe19777b8f39a6a13b659e79ead4bee9.tar.gz
test: add test that dlopen()'s all our weak library deps once
This test should ensure we notice if distros update shared libraries that broke so name, and we still use the old soname. (In contrast to what the commit summary says, this currently doesn#t cover really all such deps, specifically xkbcommon and PCRE are missing, since they currently aren't loaded from src/shared/. This is stuff to fix later)
-rw-r--r--src/test/meson.build4
-rw-r--r--src/test/test-dlopen-so.c40
2 files changed, 44 insertions, 0 deletions
diff --git a/src/test/meson.build b/src/test/meson.build
index 9e781f88dc..3afe5d58cb 100644
--- a/src/test/meson.build
+++ b/src/test/meson.build
@@ -71,6 +71,10 @@ tests += [
libshared],
[]],
+ [['src/test/test-dlopen-so.c'],
+ [libshared],
+ []],
+
[['src/test/test-job-type.c'],
[libcore,
libshared],
diff --git a/src/test/test-dlopen-so.c b/src/test/test-dlopen-so.c
new file mode 100644
index 0000000000..6436dc600f
--- /dev/null
+++ b/src/test/test-dlopen-so.c
@@ -0,0 +1,40 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <dlfcn.h>
+#include <stdlib.h>
+
+#include "cryptsetup-util.h"
+#include "idn-util.h"
+#include "macro.h"
+#include "main-func.h"
+#include "pwquality-util.h"
+#include "qrcode-util.h"
+#include "tests.h"
+
+static int run(int argc, char **argv) {
+ test_setup_logging(LOG_DEBUG);
+
+ /* Try to load each of our weak library dependencies once. This is supposed to help finding cases
+ * where .so versions change and distributions update, but systemd doesn't have the new so names
+ * around yet. */
+
+#if HAVE_LIBIDN2 || HAVE_LIBIDN
+ assert_se(dlopen_idn() >= 0);
+#endif
+
+#if HAVE_LIBCRYPTSETUP
+ assert_se(dlopen_cryptsetup() >= 0);
+#endif
+
+#if HAVE_PWQUALITY
+ assert_se(dlopen_pwquality() >= 0);
+#endif
+
+#if HAVE_QRENCODE
+ assert_se(dlopen_qrencode() >= 0);
+#endif
+
+ return 0;
+}
+
+DEFINE_MAIN_FUNCTION(run);