>From 01a00d79eee83c0c8ced562af8e347e91397f401 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michal=20=C5=BDidek?= <mzidek@redhat.com>
Date: Tue, 20 Oct 2015 15:03:22 +0200
Subject: [PATCH 4/5] 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.
---
 src/tests/intg/test_local_domain.py | 116 ++++++++++++++++++++++++++++++++++++
 1 file changed, 116 insertions(+)
 create mode 100644 src/tests/intg/test_local_domain.py

diff --git a/src/tests/intg/test_local_domain.py b/src/tests/intg/test_local_domain.py
new file mode 100644
index 0000000..56133c0
--- /dev/null
+++ b/src/tests/intg/test_local_domain.py
@@ -0,0 +1,116 @@
+#
+# 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 ent
+import grp
+import pwd
+import time
+import config
+import signal
+import subprocess
+import pytest
+import sssd_id
+from util import unindent
+
+LDAP_BASE_DN = "dc=example,dc=com"
+
+
+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.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
+    ret = subprocess.call(["sss_userdel", "foo", "-R"])
+    assert_nonexistent_user("foo")
+    os.environ["LC_LOCAL"] = oldvalue
-- 
2.1.0

