On (07/09/13 13:17), Simo Sorce wrote:
On Sat, 2013-09-07 at 12:39 -0400, Simo Sorce wrote:
> On Sat, 2013-09-07 at 11:42 +0200, Lukas Slebodnik wrote:
> > >+libdlopen_test_providers_la_LDFLAGS = \
> > >+ -module \
> > >+ -avoid-version \
> > >+ -Wl,--version-script,$(srcdir)/src/providers/sssd_be.exports \
> > add "-rpath $(abs_builddir) \"
> > libdlopen_test_providers will be dynamic library with this line.
> >
> I had already tried this trick and it did not work, but the exact line I
> used was slightly different.
Ah it did work with this syntax, I had tried with -Wl,-rpath previously.
Thanks a lot.
> I'll retry and if it works I'll send an updated patch I do preferer
> check_LTLIBRARY as well, rather than the current hack.
so now check_LTLIBRARY is used instead, moreover I added guards around
libraries that we compiled only conditionally, I had to add a couple of
statements in m4 files to make stuff appear in config.in.
Also I added the 2 missing python bindings.
This should be final, it all works here.
Simo.
--
Simo Sorce * Red Hat, Inc * New York
From a957e4642ec49a36831270c8007bcc8d7818db90 Mon Sep 17 00:00:00
2001
From: Simo Sorce <simo(a)redhat.com>
Date: Thu, 5 Sep 2013 11:52:08 -0400
Subject: [PATCH] tests: Add dlopen test to make sure modules works
This tests dlopens and resolves all symbols to make sure there are no missing
symbols in our provider modules.
---
Makefile.am | 31 ++++++++++
configure.ac | 1 +
src/external/krb5.m4 | 3 +-
src/tests/dlopen-tests.c | 155 +++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 189 insertions(+), 1 deletion(-)
create mode 100644 src/tests/dlopen-tests.c
diff --git a/Makefile.am b/Makefile.am
index b913a12b895d68f1f3e23c185e493e576641d0e2..bddb403b373ecee21f6ad41f36e69338b4cbb5e2
100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -114,6 +114,7 @@ endif
if HAVE_CHECK
non_interactive_check_based_tests = \
+ dlopen-tests \
sysdb-tests \
strtonum-tests \
resolv-tests \
@@ -886,6 +887,36 @@ if HAVE_CHECK
libsss_test_common_la_SOURCES += \
src/tests/common_check.c
+check_LTLIBRARIES = \
+ libdlopen_test_providers.la
+
+libdlopen_test_providers_la_SOURCES = \
+ $(sssd_be_SOURCES)
+libdlopen_test_providers_la_CFLAGS = \
+ $(AM_CFLAGS) \
+ $(CHECK_CFLAGS) \
+ -DUNIT_TESTING
+libdlopen_test_providers_la_LIBADD = \
+ $(PAM_LIBS) \
+ $(SSSD_LIBS) \
+ $(CARES_LIBS) \
+ $(SSSD_INTERNAL_LTLIBS)
+libdlopen_test_providers_la_LDFLAGS = \
+ -module \
+ -avoid-version \
+ -Wl,--version-script,$(srcdir)/src/providers/sssd_be.exports \
+ -rpath $(abs_top_builddir) \
+ -export-dynamic
+
+dlopen_tests_SOURCES = \
+ src/tests/dlopen-tests.c
+dlopen_tests_CFLAGS = \
+ $(AM_CFLAGS) \
+ $(CHECK_CFLAGS)
+dlopen_tests_LDADD = \
+ -ldl \
+ $(CHECK_LIBS)
+
sysdb_tests_DEPENDENCIES = \
$(ldblib_LTLIBRARIES)
sysdb_tests_SOURCES = \
diff --git a/configure.ac b/configure.ac
index 511e8d6c8afbfb0cbf5aca076b460aa4c881e252..586fe0bf9dbda5c65175d491e0044f8f09650b39
100644
--- a/configure.ac
+++ b/configure.ac
@@ -227,6 +227,7 @@ if test x$HAVE_PYTHON_BINDINGS != x; then
AM_PATH_PYTHON([2.4])
AM_CHECK_PYTHON_HEADERS([],
AC_MSG_ERROR([Could not find python headers]))
+ AC_DEFINE_UNQUOTED(HAVE_PYTHON_BINDINGS, 1, [Build with python bindings])
I
would prefer to have this line in the file conf_macros.m4
directly after the line
src/conf_macros.m4:333: AM_CONDITIONAL([BUILD_PYTHON_BINDINGS],
In this file, there is a lot of similar patterns
AM_PYTHON_CONFIG
AM_CHECK_PYTHON_COMPAT
fi
diff --git a/src/external/krb5.m4 b/src/external/krb5.m4
index bdbd71ba1f395eb4f78047f75841729e0289ae81..a0da44a887329fbb2173a5849497d0b2cf1729a7
100644
--- a/src/external/krb5.m4
+++ b/src/external/krb5.m4
@@ -90,4 +90,5 @@ AC_CHECK_HEADER([krb5/locate_plugin.h],
])
AM_CONDITIONAL([BUILD_KRB5_LOCATOR_PLUGIN],
[test x$have_locate_plugin = xyes -a x$build_locator = xyes])
-
+AM_COND_IF([BUILD_KRB5_LOCATOR_PLUGIN],
+ [AC_DEFINE_UNQUOTED(HAVE_KRB5_LOCATOR_PLUGIN, 1, [Build with krb5 locator
plugin])])
diff --git a/src/tests/dlopen-tests.c b/src/tests/dlopen-tests.c
new file mode 100644
index 0000000000000000000000000000000000000000..608b6106d6584a528a819cc2abdf1e21469d8d38
--- /dev/null
+++ b/src/tests/dlopen-tests.c
@@ -0,0 +1,155 @@
+/*
+ SSSD
+
+ debug-tests.c
+
+ Authors:
+ Simo Sorce <simo(a)redhat.com>
+
+ Copyright (C) 2013 Red Hat
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <
http://www.gnu.org/licenses/>.
+*/
+
+#define _GNU_SOURCE
+#include <stdbool.h>
+#include <dlfcn.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <check.h>
+#include "tests/common.h"
+
+#define LIBPFX ABS_BUILD_DIR"/.libs/"
+
+struct so {
+ const char *name;
+ const char *libs[6];
+} so[] = {
+ { "libsss_debug.so", { LIBPFX"libsss_debug.so", NULL } },
+ { "libsss_sudo.so", { LIBPFX"libsss_sudo.so", NULL } },
add
check for BUILD_SUDO
+ { "libipa_hbac.so", { LIBPFX"libipa_hbac.so",
NULL } },
+ { "libsss_autofs.so", { LIBPFX"libsss_autofs.so", NULL } },
add check for BUILD_AUTOFS
+ { "libsss_idmap.so", {
LIBPFX"libsss_idmap.so", NULL } },
+ { "libsss_nss_idmap.so", { LIBPFX"libsss_nss_idmap.so", NULL }
},
+ { "libnss_sss.so", { LIBPFX"libnss_sss.so", NULL } },
+ { "pam_sss.so", { LIBPFX"pam_sss.so", NULL } },
+#ifdef HAVE_KRB5_LOCATOR_PLUGIN
+ { "sssd_krb5_locator_plugin.so", {
LIBPFX"sssd_krb5_locator_plugin.so",
+ NULL } },
+#endif
+#ifdef HAVE_PAC_RESPONDER
+ { "sssd_pac_plugin.so", { LIBPFX"sssd_pac_plugin.so", NULL } },
+#endif
+ { "memberof.so", { LIBPFX"memberof.so", NULL } },
+ { "libsss_child.so", { "libtevent.so",
+ LIBPFX"libsss_debug.so",
+ LIBPFX"libsss_crypt.so",
+ LIBPFX"libsss_util.so",
+ LIBPFX"libsss_child.so", NULL } },
+ { "libsss_crypt.so", { "libtalloc.so",
+ LIBPFX"libsss_debug.so",
+ LIBPFX"libsss_crypt.so", NULL } },
+ { "libsss_util.so", { "libtalloc.so",
+ LIBPFX"libsss_debug.so",
+ LIBPFX"libsss_crypt.so",
+ LIBPFX"libsss_util.so", NULL } },
+ { "libsss_simple.so", { LIBPFX"libdlopen_test_providers.so",
+ LIBPFX"libsss_simple.so", NULL } },
+ { "libsss_ad.so", { LIBPFX"libdlopen_test_providers.so",
+ LIBPFX"libsss_ad.so", NULL } },
+ { "libsss_ipa.so", { LIBPFX"libdlopen_test_providers.so",
+ LIBPFX"libsss_ipa.so", NULL } },
+ { "libsss_krb5.so", { LIBPFX"libdlopen_test_providers.so",
+ LIBPFX"libsss_krb5.so", NULL } },
+ { "libsss_ldap.so", { LIBPFX"libdlopen_test_providers.so",
+ LIBPFX"libsss_ldap.so", NULL } },
+ { "libsss_proxy.so", { LIBPFX"libdlopen_test_providers.so",
+ LIBPFX"libsss_proxy.so", NULL } },
+#ifdef BUILD_PYTHON_BINDINGS
You defined macro HAVE_PYTHON_BINDINGS, but
BUILD_PYTHON_BINDINGS is used here.
This is a dead code.
+ { "pyhbac.so", { LIBPFX"pyhbac.so", NULL }
},
+ { "pysss.so", { LIBPFX"pysss.so", NULL } },
+ { "pysss_murmur.so", { LIBPFX"pysss_murmur.so", NULL } },
+ { "pysss_nss_idmap.so", { LIBPFX"pysss_nss_idmap.so", NULL } },
+#endif
btw, BUILD_AUTOFS is used elsewhere in code.
src/tests/sysdb-tests.c:4707:#ifdef BUILD_AUTOFS
src/tests/sysdb-tests.c:4913:#endif /* BUILD_AUTOFS */
src/tests/sysdb-tests.c:5224:#ifdef BUILD_AUTOFS
So we can use either BUILD_PYTHON_BINDINGS, BUILD_KRB5_LOCATOR_PLUGIN
or we should file a ticket to be consistent.
LS