diff options
author | Michal Židek <mzidek@redhat.com> | 2015-10-20 15:03:22 +0200 |
---|---|---|
committer | Lukas Slebodnik <lslebodn@redhat.com> | 2015-11-04 09:09:38 +0100 |
commit | 586f512ab8b6e5a03349598846141f43c1d505b8 (patch) | |
tree | 4a193748fa1484bbc639324c110d577a4945c85c | |
parent | f1b9f9370b50a3d001722737f2538f5d3bb40e9c (diff) | |
download | sssd-586f512ab8b6e5a03349598846141f43c1d505b8.tar.gz sssd-586f512ab8b6e5a03349598846141f43c1d505b8.tar.xz sssd-586f512ab8b6e5a03349598846141f43c1d505b8.zip |
tests: Regression test with wrong LC_ALL
Ticket:
https://fedorahosted.org/sssd/ticket/2785
Test local domain tool with wrong LC_ALL
environment variable value.
NOTE: The memory cache files are not deleted
properly in the test teardown to work around the
problem described in ticket
https://fedorahosted.org/sssd/ticket/2726
Once the ticket above is solved, the teardown
will be updated to remove the memory cache
files.
Reviewed-by: Michal Židek <mzidek@redhat.com>
-rw-r--r-- | src/tests/intg/Makefile.am | 1 | ||||
-rw-r--r-- | src/tests/intg/test_local_domain.py | 112 |
2 files changed, 113 insertions, 0 deletions
diff --git a/src/tests/intg/Makefile.am b/src/tests/intg/Makefile.am index 6819c2f2c..12a4fc279 100644 --- a/src/tests/intg/Makefile.am +++ b/src/tests/intg/Makefile.am @@ -7,6 +7,7 @@ dist_noinst_DATA = \ ent_test.py \ ldap_ent.py \ ldap_test.py \ + test_local_domain.py \ util.py \ test_memory_cache.py \ $(NULL) diff --git a/src/tests/intg/test_local_domain.py b/src/tests/intg/test_local_domain.py new file mode 100644 index 000000000..c62de16ce --- /dev/null +++ b/src/tests/intg/test_local_domain.py @@ -0,0 +1,112 @@ +# +# SSSD LOCAL domain tests +# +# Copyright (c) 2015 Red Hat, Inc. +# Author: Michal Zidek <mzidek@redhat.com> +# +# This 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; version 2 only +# +# 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/>. +# +import os +import stat +import pwd +import time +import config +import signal +import subprocess +import pytest +from util import unindent + + +def stop_sssd(): + pid_file = open(config.PIDFILE_PATH, "r") + pid = int(pid_file.read()) + os.kill(pid, signal.SIGTERM) + while True: + try: + os.kill(pid, signal.SIGCONT) + except: + break + time.sleep(1) + + +def create_conf_fixture(request, contents): + """Generate sssd.conf and add teardown for removing it""" + conf = open(config.CONF_PATH, "w") + conf.write(contents) + conf.close() + os.chmod(config.CONF_PATH, stat.S_IRUSR | stat.S_IWUSR) + request.addfinalizer(lambda: os.unlink(config.CONF_PATH)) + + +def create_sssd_fixture(request): + """Start sssd and add teardown for stopping it and removing state""" + if subprocess.call(["sssd", "-D", "-f"]) != 0: + raise Exception("sssd start failed") + + def teardown(): + try: + stop_sssd() + except: + pass + subprocess.call(["sss_cache", "-E"]) + for path in os.listdir(config.DB_PATH): + os.unlink(config.DB_PATH + "/" + path) + # FIXME: Uncomment this when ticket #2726 is solved + # https://fedorahosted.org/sssd/ticket/2726 + # for path in os.listdir(config.MCACHE_PATH): + # os.unlink(config.MCACHE_PATH + "/" + path) + request.addfinalizer(teardown) + + +@pytest.fixture +def local_domain_only(request): + conf = unindent("""\ + [sssd] + domains = LOCAL + services = nss + + [nss] + memcache_timeout = 0 + + [domain/LOCAL] + id_provider = local + min_id = 10000 + max_id = 20000 + """).format(**locals()) + create_conf_fixture(request, conf) + create_sssd_fixture(request) + return None + + +def assert_nonexistent_user(name): + with pytest.raises(KeyError): + pwd.getpwnam(name) + + +def test_wrong_LC_ALL(local_domain_only): + """ + Regression test for ticket + https://fedorahosted.org/sssd/ticket/2785 + + """ + subprocess.check_call(["sss_useradd", "foo", "-M"]) + pwd.getpwnam("foo") + + # Change the LC_ALL variable to nonexistent locale + oldvalue = os.environ.get("LC_ALL", "") + os.environ["LC_ALL"] = "nonexistent_locale" + + # sss_userdel must remove the user despite wrong LC_ALL + subprocess.check_call(["sss_userdel", "foo", "-R"]) + assert_nonexistent_user("foo") + os.environ["LC_LOCAL"] = oldvalue |