From 30bb28a7d8bea694fda7b745607eb1aacfa0af90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C5=BDidek?= Date: Tue, 20 Oct 2015 15:03:22 +0200 Subject: [PATCH 097/108] tests: Regression test with wrong LC_ALL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 (cherry picked from commit 586f512ab8b6e5a03349598846141f43c1d505b8) (cherry picked from commit 03f6667741bf111f0e50c8f2c4323e45ce53f707) --- src/tests/intg/Makefile.am | 1 + src/tests/intg/test_local_domain.py | 112 ++++++++++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 src/tests/intg/test_local_domain.py diff --git a/src/tests/intg/Makefile.am b/src/tests/intg/Makefile.am index f21880b61bfb07ac1dca65deda70fc50b4943586..7394997319142d581237ab8a37270bfd7bc974ca 100644 --- a/src/tests/intg/Makefile.am +++ b/src/tests/intg/Makefile.am @@ -8,6 +8,7 @@ dist_noinst_DATA = \ ldap_ent.py \ ldap_local_override_test.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 0000000000000000000000000000000000000000..c62de16ce04b640503250c926d6eb3d199ed0728 --- /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 +# +# 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 . +# +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 -- 2.7.3