URL: https://github.com/SSSD/sssd/pull/652
Author: mrniranjan
 Title: #652: Multihost-SanityTests: New test case for ssh login with KCM as 
default
Action: opened

PR body:
"""
Signed-off-by: Niranjan M.R <mrniran...@redhat.com>
"""

To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/652/head:pr652
git checkout pr652
From 5f7c9b89cc08c5a0be63b29dd352ab7ce7cc7ab0 Mon Sep 17 00:00:00 2001
From: "Niranjan M.R" <mrniran...@redhat.com>
Date: Tue, 11 Sep 2018 18:21:52 +0530
Subject: [PATCH] Multihost-SanityTests: New test case for ssh login with KCM
 as default

Signed-off-by: Niranjan M.R <mrniran...@redhat.com>
---
 src/tests/multihost/basic/conftest.py   | 84 +++++++++++++++++++------
 src/tests/multihost/basic/test_basic.py | 30 +++++++--
 2 files changed, 91 insertions(+), 23 deletions(-)

diff --git a/src/tests/multihost/basic/conftest.py b/src/tests/multihost/basic/conftest.py
index 7916f5878..4992f60b0 100644
--- a/src/tests/multihost/basic/conftest.py
+++ b/src/tests/multihost/basic/conftest.py
@@ -1,10 +1,12 @@
 from sssd.testlib.common.qe_class import session_multihost, create_testdir
 from sssd.testlib.common.libkrb5 import krb5srv
 from sssd.testlib.common.utils import sssdTools, PkiTools
+from sssd.testlib.common.utils import LdapOperations
 from sssd.testlib.common.libdirsrv import DirSrvWrap
 from sssd.testlib.common.exceptions import PkiLibException
-from sssd.testlib.common.authconfig import RedHatAuthConfig
-from sssd.testlib.common.utils import LdapOperations
+from sssd.testlib.common.exceptions import LdapException
+from sssd.testlib.common.exceptions import LdapException
+from sssd.testlib.common.exceptions import SSSDException
 import pytest
 try:
     import ConfigParser
@@ -25,23 +27,39 @@ def pytest_namespace():
 
 
 @pytest.fixture(scope="class")
-def multihost(session_multihost, request):
+def multihost(session_multihost):
+    """ multihost fixture """
     return session_multihost
 
 
 @pytest.fixture(scope="session")
-def run_authselect(session_multihost, request):
+def package_install(session_multihost):
+    """ Install required packages """
+    distro = session_multihost.master[0].distro
+    pkg_list = 'authselect nss-tools 389-ds-base krb5-server'\
+               'openldap-clients krb5-workstation '\
+               '389-ds-base-legacy-tools sssd sssd-kcm'
+    if 'Fedora' in distro:
+        cmd = 'dnf install -y %s' % (pkg_list)
+    elif '8.' in distro.split()[5]:
+        cmd = 'dnf module -y install idm:4 389-ds:1.4'
+    session_multihost.master[0].run_command(cmd)
+
+
+@pytest.fixture(scope="session")
+def run_authselect(session_multihost):
     """ Run authconfig to configure Kerberos and SSSD auth on remote host """
-    authselect_cmd = 'authselect enable-feature sssd'
+    authselect_cmd = 'authselect select sssd --force'
     session_multihost.master[0].run_command(authselect_cmd)
 
 
 @pytest.fixture(scope="session")
-def nssdir(session_multihost, request):
-    serverList = [session_multihost.master[0].sys_hostname]
+def nssdir(session_multihost):
+    """ Setup Self signed CA """
+    server_list = [session_multihost.master[0].sys_hostname]
     pki_inst = PkiTools()
     try:
-        certdb = pki_inst.createselfsignedcerts(serverList)
+        certdb = pki_inst.createselfsignedcerts(server_list)
     except PkiLibException as err:
         return (err.msg, err.rval)
     else:
@@ -50,28 +68,33 @@ def nssdir(session_multihost, request):
 
 @pytest.fixture(scope="session")
 def setup_ldap(session_multihost, nssdir, request):
+    """ Setup Directory Server """
     ds_obj = DirSrvWrap(session_multihost.master[0], ssl=True, ssldb=nssdir)
     ds_obj.create_ds_instance('example1', 'dc=example,dc=test')
 
     def remove_ldap():
+        """ Remove ldap server instance """
         ds_obj.remove_ds_instance('example1')
     request.addfinalizer(remove_ldap)
 
 
 @pytest.fixture(scope="session")
 def setup_kerberos(session_multihost, request):
+    """ Setup kerberos """
     tools = sssdTools(session_multihost.master[0])
     tools.config_etckrb5('EXAMPLE.TEST')
     krb = krb5srv(session_multihost.master[0], 'EXAMPLE.TEST')
     krb.krb_setup_new()
 
     def remove_kerberos():
+        """ Remove kerberos instance """
         krb.destroy_krb5server()
     request.addfinalizer(remove_kerberos)
 
 
 @pytest.fixture(scope='class', autouse=True)
 def setup_sssd(session_multihost, request):
+    """ Configure sssd.conf """
     domain_section = 'domain/EXAMPLE.TEST'
     ldap_uri = 'ldap://%s' % (session_multihost.master[0].sys_hostname)
     krb5_server = session_multihost.master[0].sys_hostname
@@ -111,18 +134,14 @@ def setup_sssd(session_multihost, request):
     os.close(temp_fd)
     try:
         session_multihost.master[0].service_sssd('restart')
-    except Exception:
+    except SSSDException:
         journalctl_cmd = "journalctl -x -n 50 --no-pager"
         session_multihost.master[0].run_command(journalctl_cmd)
         assert False
-    tools = sssdTools(session_multihost.master[0])
-    tools.enable_kcm()
-    session_multihost.master[0].run_command(['systemctl', 'start', 'sssd-kcm'])
 
     def stop_sssd():
+        """ Stop sssd service """
         session_multihost.master[0].service_sssd('stop')
-        stop_kcm = 'systemctl stop sssd-kcm'
-        session_multihost.master[0].run_command(stop_kcm)
         sssd_cache = ['cache_%s.ldb' % ('EXAMPLE.TEST'), 'config.ldb',
                       'sssd.ldb', 'timestamps_%s.ldb' % ('EXAMPLE.TEST')]
         for cache_file in sssd_cache:
@@ -133,8 +152,30 @@ def stop_sssd():
     request.addfinalizer(stop_sssd)
 
 
+@pytest.fixture
+def enable_kcm(session_multihost, request):
+    """ Enable sssd kcm """
+    backup_krb5_conf = 'cp /etc/krb5.conf /etc/krb5.conf.nokcm'
+    session_multihost.master[0].run_command(backup_krb5_conf)
+    session_multihost.master[0].service_sssd('stop')
+    tools = sssdTools(session_multihost.master[0])
+    tools.enable_kcm()
+    start_kcm = 'systemctl start sssd-kcm'
+    session_multihost.master[0].service_sssd('start')
+    session_multihost.master[0].run_command(start_kcm)
+
+    def disable_kcm():
+        """ Disable sssd kcm """
+        restore_krb5_conf = 'cp /etc/krb5.conf.nokcm /etc/krb5.conf'
+        session_multihost.master[0].run_command(restore_krb5_conf)
+        stop_kcm = 'systemctl stop sssd-kcm'
+        session_multihost.master[0].run_command(stop_kcm)
+    request.addfinalizer(disable_kcm)
+
+
 @pytest.fixture(scope='class', autouse=True)
 def create_posix_usersgroups(session_multihost):
+    """ Create posix user and groups """
     ldap_uri = 'ldap://%s' % (session_multihost.master[0].sys_hostname)
     ds_rootdn = 'cn=Directory Manager'
     ds_rootpw = 'Secret123'
@@ -156,7 +197,7 @@ def create_posix_usersgroups(session_multihost):
                   'uniqueMember': memberdn}
     try:
         ldap_inst.posix_group("ou=Groups", "dc=example,dc=test", group_info)
-    except Exception:
+    except LdapException:
         assert False
     group_dn = 'cn=ldapusers,ou=Groups,dc=example,dc=test'
     for i in range(1, 10):
@@ -168,27 +209,32 @@ def create_posix_usersgroups(session_multihost):
 
 @pytest.fixture(scope="session", autouse=True)
 def setup_session(request, session_multihost,
+                  package_install,
                   run_authselect,
                   setup_ldap,
                   setup_kerberos):
+    """ Run all session scoped fixtures """
+    # pylint: disable=unused-argument
+    _pytest_fixture = [package_install, run_authselect,
+                       setup_ldap, setup_kerberos]
     tp = TestPrep(session_multihost)
     tp.setup()
 
     def teardown_session():
+        """ Run teardown session scoped fixtures """
         tp.teardown()
     request.addfinalizer(teardown_session)
 
 
 class TestPrep(object):
+    """ Initialize Session """
     def __init__(self, multihost):
         self.multihost = multihost
 
     def setup(self):
+        """ Start session """
         print("\n............Session Setup...............")
-        reqd_packages = '389-ds-base authselect krb5-server krb5-workstation '\
-                        'sssd-kcm openldap-clients 389-ds-base-legacy-tools'
-        install_cmd = 'dnf -y  install %s' % reqd_packages
-        self.multihost.master[0].run_command(install_cmd)
 
     def teardown(self):
+        """ End session """
         print("\n............Session Ends.................")
diff --git a/src/tests/multihost/basic/test_basic.py b/src/tests/multihost/basic/test_basic.py
index 8060d5219..568288d0c 100644
--- a/src/tests/multihost/basic/test_basic.py
+++ b/src/tests/multihost/basic/test_basic.py
@@ -1,14 +1,15 @@
+""" SSSD Sanity Test Cases """
+import time
 from sssd.testlib.common.utils import SSHClient
 import configparser as ConfigParser
 import paramiko
 import pytest
-import time
-
 
-class Test_basic_sssd(object):
 
+class TestSanitySSSD(object):
+    """ Basic Sanity Test cases """
     def test_ssh_user_login(self, multihost):
-        """ Check ssh login as LDAP user with Kerberos credentials """
+        """Check ssh login as LDAP user with Kerberos credentials """
         try:
             ssh = SSHClient(multihost.master[0].sys_hostname,
                             username='foo1', password='Secret123')
@@ -37,6 +38,8 @@ def test_kinit(self, multihost):
 
     def test_kinit_kcm(self, multihost):
         """ Run kinit with KRB5CCNAME=KCM: """
+        start_kcm = 'systemctl start sssd-kcm'
+        multihost.master[0].run_command(start_kcm)
         try:
             ssh = SSHClient(multihost.master[0].sys_hostname,
                             username='foo3', password='Secret123')
@@ -95,3 +98,22 @@ def test_offline_ssh_login(self, multihost):
                 pytest.fail("Unable to authenticate as %s" % ('foo4'))
             else:
                 ssh.close()
+                start_dirsrv = 'systemctl start dirsrv@example1'
+                start_krb5kdc = 'systemctl start krb5kdc'
+                multihost.master[0].run_command(start_dirsrv)
+                multihost.master[0].run_command(start_krb5kdc)
+
+    def test_ssh_login_kcm(self, multihost, enable_kcm):
+        """ Verify ssh logins are successuful with kcm as default """
+        # pylint: disable=unused-argument
+        _pytest_fixture = [enable_kcm]
+        try:
+            ssh = SSHClient(multihost.master[0].sys_hostname,
+                            username='foo4', password='Secret123')
+        except paramiko.ssh_exception.AuthenticationException:
+            journalctl_cmd = 'journalctl -u sssd -n 50 --no-pager'
+            multihost.master[0].run_command(journalctl_cmd)
+            pytest.fail("Authentication Failed as user %s" % ('foo4'))
+        else:
+            assert True
+            ssh.close()
_______________________________________________
sssd-devel mailing list -- sssd-devel@lists.fedorahosted.org
To unsubscribe send an email to sssd-devel-le...@lists.fedorahosted.org
Fedora Code of Conduct: https://getfedora.org/code-of-conduct.html
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedorahosted.org/archives/list/sssd-devel@lists.fedorahosted.org

Reply via email to