On Fri, Feb 27, 2015 at 07:13:37PM +0200, Nikolai Kondrashov wrote: > Hi everyone, > > This is my attempt to add basic integration tests. There are almost no tests > there at the moment and this is mostly about the infrastructure and the way we > might do it. > > I will be glad to answer any questions and receive any comments or > suggestions. I'm sure I did a lot of things in a wrong way :) > > Thank you! > > CI: http://sssd-ci.duckdns.org/logs/job/8/40/summary.html > > Nick
I checked the build system changes since Michal requested another reviwer there. > From a4e3c569d35e6f812ff641f38e89982d0254eaba Mon Sep 17 00:00:00 2001 > From: Nikolai Kondrashov <nikolai.kondras...@redhat.com> > Date: Mon, 24 Nov 2014 19:13:16 +0200 > Subject: [PATCH 1/1] Add integration tests > > Add --enable-intgcheck configure option, which enables "intgcheck" make > target. CI is updated to use them. > > The "intgcheck" target configures and builds sssd in a sub-directory, > installs it into a prefix in another sub-directory, and then makes the > "intgcheck-installed" target from within src/tests/intg in that separate > build. > > The "intgcheck-installed" target in src/tests/intg runs py.test for all > tests it can find in that directory, under fakeroot and > nss_wrapper/uid_wrapper environments emulating running under root. > > The only test in src/tests/intg at the moment - ldap_test.py sets up and > starts a slapd instance, adds a few user and group entries, configures > and starts sssd and verifies that those users and groups are retrieved > correctly using various nss functions. > > The above only works on Red Hat distros, mostly because Debian lacks > nss_wrapper package. The tests are very basic and error reporting on > mismatch in data received from nss is very rudimentary, at the moment. > There is also a good amount of duplication between rfc2307 and > rfc2307bis cases, which might be dealt with later. > --- > Makefile.am | 29 ++++- > configure.ac | 15 ++- > contrib/ci/configure.sh | 6 + > contrib/ci/deps.sh | 11 +- > contrib/ci/run | 9 ++ > src/external/fakeroot.m4 | 2 + > src/external/intgcheck.m4 | 23 ++++ > src/external/ldap.m4 | 6 + > src/external/pytest.m4 | 3 + > src/external/python.m4 | 49 +++++++ > src/tests/intg/Makefile.am | 59 +++++++++ > src/tests/intg/config.py.m4 | 13 ++ > src/tests/intg/ent.py | 163 +++++++++++++++++++++++ > src/tests/intg/ldap_test.py | 296 > ++++++++++++++++++++++++++++++++++++++++++ > src/tests/intg/misc.py | 49 +++++++ > src/tests/intg/slapd_setup | 246 +++++++++++++++++++++++++++++++++++ > src/tests/intg/slapd_teardown | 49 +++++++ > 17 files changed, 1024 insertions(+), 4 deletions(-) > create mode 100644 src/external/fakeroot.m4 > create mode 100644 src/external/intgcheck.m4 > create mode 100644 src/external/pytest.m4 > create mode 100644 src/tests/intg/Makefile.am > create mode 100644 src/tests/intg/config.py.m4 > create mode 100644 src/tests/intg/ent.py > create mode 100644 src/tests/intg/ldap_test.py > create mode 100644 src/tests/intg/misc.py > create mode 100755 src/tests/intg/slapd_setup > create mode 100755 src/tests/intg/slapd_teardown > > diff --git a/Makefile.am b/Makefile.am > index 8f0ce4b..647f1e8 100644 > --- a/Makefile.am > +++ b/Makefile.am > @@ -19,7 +19,7 @@ if HAVE_MANPAGES > SUBDIRS += src/man > endif > > -SUBDIRS += . src/tests/cwrap > +SUBDIRS += . src/tests/cwrap src/tests/intg > > # Some old versions of automake don't define builddir > builddir ?= . > @@ -2280,6 +2280,33 @@ autofs_test_client_CFLAGS = $(AM_CFLAGS) > autofs_test_client_LDADD = -lpopt $(CLIENT_LIBS) > endif > > +##################### > +# Integration tests # > +##################### > + > +if ENABLE_INTGCHECK > +intgcheck: > + set -e; \ > + rm -Rf intg; \ > + $(MKDIR_P) intg/bld; \ > + : Use /hopefully/ short prefix to keep D-Bus socket path short; \ I admit I don't know what are these lines that start with a colon? > + prefix=`mktemp --tmpdir --directory sssd-intg.XXXXXXXX`; \ > + $(LN_S) "$$prefix" intg/pfx; \ > + cd intg/bld; \ > + $(abs_top_srcdir)/configure \ > + --prefix="$$prefix" \ > + --with-ldb-lib-dir="$$prefix"/lib/ldb \ > + $(INTGCHECK_CONFIGURE_FLAGS); \ > + $(MAKE) $(AM_MAKEFLAGS); \ > + : Force single-thread install to workaround concurrency issues; \ > + $(MAKE) $(AM_MAKEFLAGS) -j1 install; \ > + : Remove .la files from LDB module directory to avoid loader warnings; \ > + rm "$$prefix"/lib/ldb/*.la; \ > + $(MAKE) $(AM_MAKEFLAGS) -C src/tests/intg intgcheck-installed; \ > + cd ../..; \ > + rm -Rf "$$prefix" intg > +endif # ENABLE_INTGCHECK > + > #################### > # Client Libraries # > #################### > diff --git a/configure.ac b/configure.ac > index e30405f..225ff64 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -174,6 +174,9 @@ m4_include([src/external/configlib.m4]) > m4_include([src/external/libnfsidmap.m4]) > m4_include([src/external/cwrap.m4]) > m4_include([src/external/libresolv.m4]) > +m4_include([src/external/fakeroot.m4]) > +m4_include([src/external/pytest.m4]) > +m4_include([src/external/intgcheck.m4]) > > if test x$build_config_lib = xyes; then > m4_include([src/external/libaugeas.m4]) > @@ -248,8 +251,8 @@ AM_CONDITIONAL([HAVE_PROFILE_CATALOGS], [test > "x$HAVE_PROFILE_CATALOGS" != "x"]) > AM_CONDITIONAL([HAVE_MANPAGES], [test "x$HAVE_MANPAGES" != "x"]) > AM_CONDITIONAL([HAVE_PO4A], [test "x$PO4A" != "xno"]) > > +AC_PATH_PROG(PYTHON2, python2) > if test x$HAVE_PYTHON2_BINDINGS = x1; then > - AC_PATH_PROG(PYTHON2, python2) > PYTHON=$PYTHON2 > AM_PATH_PYTHON([2.6]) > AM_PYTHON_CONFIG([python2]) > @@ -268,9 +271,10 @@ if test x$HAVE_PYTHON2_BINDINGS = x1; then > > SSS_CLEAN_PYTHON_VARIABLES > fi > +AM_CONDITIONAL([HAVE_PYTHON2], [test x"$PYTHON2" != x]) > > +AC_PATH_PROG(PYTHON3, python3) > if test x$HAVE_PYTHON3_BINDINGS = x1; then > - AC_PATH_PROG(PYTHON3, python3) > PYTHON=$PYTHON3 > AM_PATH_PYTHON([3.3]) > AM_PYTHON_CONFIG([python3]) > @@ -289,11 +293,15 @@ if test x$HAVE_PYTHON3_BINDINGS = x1; then > > SSS_CLEAN_PYTHON_VARIABLES > fi > +AM_CONDITIONAL([HAVE_PYTHON3], [test x"$PYTHON3" != x]) I think the HAVE_PYTHON changes should be in a separate patch. > > AM_CONDITIONAL([BUILD_PYTHON_BINDINGS], > [test x"$with_python2_bindings" = xyes \ > -o x"$with_python3_bindings" = xyes]) > > +AM_PYTHON2_MODULE([ldap]) > +AM_CONDITIONAL([HAVE_PY2MOD_LDAP], [test x"$HAVE_PY2MOD_LDAP" == xyes]) > + > if test x$HAVE_SELINUX != x; then > AM_CHECK_SELINUX > AM_CHECK_SELINUX_LOGIN_DIR > @@ -366,6 +374,8 @@ AM_CHECK_CMOCKA > AM_CHECK_UID_WRAPPER > AM_CHECK_NSS_WRAPPER > > +AM_ENABLE_INTGCHECK [...] > diff --git a/src/tests/intg/Makefile.am b/src/tests/intg/Makefile.am > new file mode 100644 > index 0000000..dc1d6f0 > --- /dev/null > +++ b/src/tests/intg/Makefile.am > @@ -0,0 +1,59 @@ > +dist_noinst_SCRIPTS = \ > + slapd_setup \ > + slapd_teardown \ > + $(NULL) > + > +dist_noinst_DATA = \ > + config.py.m4 \ > + ent.py \ > + ldap_test.py \ > + misc.py \ > + $(NULL) > + > +config.py: config.py.m4 > + m4 -D "prefix=\`$(prefix)'" \ > + -D "sysconfdir=\`$(sysconfdir)'" \ > + -D "dbpath=\`$(dbpath)'" \ > + -D "pidpath=\`$(pidpath)'" \ > + -D "logpath=\`$(logpath)'" \ > + -D "mcpath=\`$(mcpath)'" \ > + $< > $@ > + > +root: > + $(MKDIR_P) -m 0700 root/.dbus-keyrings Can we add a comment why we need the dbus-keyring directory? > + > +passwd: root > + echo "root:x:0:0:root:$(abs_builddir)/root:/bin/bash" > $@ > + > +group: > + echo "root:x:0:" > $@ > + > +CLEANFILES=config.py config.pyc passwd group > + > +clean-local: > + rm -Rf root > + > +intgcheck-installed: config.py passwd group > + pipepath="$(DESTDIR)$(pipepath)"; \ > + if test $${#pipepath} -gt 80; then \ > + echo "error: Pipe directory path too long," \ > + "D-Bus won't be able to open sockets" >&2; \ > + exit 1; \ > + fi > + set -e; \ > + nss_wrapper=$$(pkg-config --libs nss_wrapper); \ > + uid_wrapper=$$(pkg-config --libs uid_wrapper); \ > + PATH="$$(dirname -- $(SLAPD)):$$PATH" \ Interesting ^, is slapd typically out of $PATH? > + PATH="$(DESTDIR)$(sbindir):$(DESTDIR)$(bindir):$$PATH" \ > + PATH="$(abs_builddir):$(abs_srcdir):$$PATH" \ > + PYTHONPATH="$(abs_builddir):$(abs_srcdir)" \ > + LDB_MODULES_PATH="$(DESTDIR)$(ldblibdir)" \ > + LD_PRELOAD="$$nss_wrapper $$uid_wrapper" \ > + NSS_WRAPPER_PASSWD="$(abs_builddir)/passwd" \ > + NSS_WRAPPER_GROUP="$(abs_builddir)/group" \ > + NSS_WRAPPER_MODULE_SO_PATH="$(DESTDIR)$(nsslibdir)/libnss_sss.so.2" \ > + NSS_WRAPPER_MODULE_FN_PREFIX="sss" \ > + UID_WRAPPER=1 \ > + UID_WRAPPER_ROOT=1 \ > + fakeroot $(PYTHON2) $(PYTEST) --tb=native "$(abs_srcdir)" > + rm -f $(DESTDIR)$(logpath)/* > diff --git a/src/tests/intg/config.py.m4 b/src/tests/intg/config.py.m4 > new file mode 100644 > index 0000000..563127c > --- /dev/null > +++ b/src/tests/intg/config.py.m4 > @@ -0,0 +1,13 @@ > +""" > +Build configuration variables. > +""" > + > +PREFIX = "prefix" > +SYSCONFDIR = "sysconfdir" > +SSSDCONFDIR = SYSCONFDIR + "/sssd" > +CONF_PATH = SSSDCONFDIR + "/sssd.conf" > +DB_PATH = "dbpath" > +PID_PATH = "pidpath" > +PIDFILE_PATH = PID_PATH + "/sssd.pid" > +LOG_PATH = "logpath" > +MCACHE_PATH = "mcpath" _______________________________________________ sssd-devel mailing list sssd-devel@lists.fedorahosted.org https://lists.fedorahosted.org/mailman/listinfo/sssd-devel