URL: https://github.com/SSSD/sssd/pull/5434
Author: sidecontrol
 Title: #5434: Adding multihost tests for ad_allow_remote_domain_local_groups, 
bz1883488 bz1756240
Action: synchronized

To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/5434/head:pr5434
git checkout pr5434
From 4d82afa3a4b85df283688222c8cdce381f64063e Mon Sep 17 00:00:00 2001
From: Dan Lavu <dl...@redhat.com>
Date: Wed, 18 Nov 2020 21:05:57 -0500
Subject: [PATCH 1/2] Adding tests to cover ad discovery improvements using
 cldap

* This test requires a primary and secondary domain controller so AD can be moved between sites
* Currently contains four test cases
** Two DCs in one site no restrictions.
** Two DCs in one site, traffic blocked to the other DC
** DCs in seperate sites no restrictions
** DCs in seperate sites, traffic blocked to the other DC

Signed-off-by: Dan Lavu <dl...@redhat.com>

SSSD-2497
---
 src/tests/multihost/adsites/conftest.py     | 304 ++++++++++++++++++++
 src/tests/multihost/adsites/pytest.ini      |   3 +
 src/tests/multihost/adsites/readme.rst      | 134 +++++++++
 src/tests/multihost/adsites/test_adsites.py | 213 ++++++++++++++
 4 files changed, 654 insertions(+)
 create mode 100644 src/tests/multihost/adsites/conftest.py
 create mode 100644 src/tests/multihost/adsites/pytest.ini
 create mode 100644 src/tests/multihost/adsites/readme.rst
 create mode 100644 src/tests/multihost/adsites/test_adsites.py

diff --git a/src/tests/multihost/adsites/conftest.py b/src/tests/multihost/adsites/conftest.py
new file mode 100644
index 0000000000..a491f5b8c1
--- /dev/null
+++ b/src/tests/multihost/adsites/conftest.py
@@ -0,0 +1,304 @@
+
+""" Common AD Fixtures """
+from __future__ import print_function
+import subprocess
+import time
+import pytest
+import os
+import posixpath
+from sssd.testlib.common.paths import SSSD_DEFAULT_CONF, NSSWITCH_DEFAULT_CONF
+from sssd.testlib.common.qe_class import session_multihost
+from sssd.testlib.common.exceptions import SSSDException
+from sssd.testlib.common.samba import sambaTools
+from sssd.testlib.common.utils import ADOperations
+from sssd.testlib.common.utils import sssdTools
+
+
+def pytest_configure():
+    """ Namespace hook, Adds below dict to pytest namespace """
+    pytest.num_masters = 0
+    pytest.num_ad = 2
+    pytest.num_atomic = 0
+    pytest.num_replicas = 0
+    pytest.num_clients = 1
+    pytest.num_others = 0
+
+# ######## Function scoped Fixtures ####################
+
+
+@pytest.fixture(scope="function")
+def smbconfig(session_multihost, request):
+    """ Configure smb.conf """
+    sambaclient = sambaTools(session_multihost.client[0],
+                             session_multihost.ad[0])
+    sambaclient.smbadsconf()
+
+    def restore():
+        """ Restore smb.conf """
+        restoresmb = 'cp -f /etc/samba/smb.conf.orig /etc/samba/smb.conf'
+        session_multihost.client[0].run_command(restoresmb, raiseonerr=False)
+        removebkup = 'rm -f /etc/samba/smb.conf.orig'
+        session_multihost.client[0].run_command(removebkup, raiseonerr=False)
+    request.addfinalizer(restore)
+
+
+@pytest.fixture(scope='function')
+def run_powershell_script(session_multihost, request):
+    """ Run Powershell script """
+    cwd = os.path.dirname(os.path.abspath(__file__))
+    split_cwd = cwd.split('/')
+    idx = split_cwd.index('pytest')
+    path_list = split_cwd[:idx + 1]
+    sssd_qe_path = '/'.join(path_list)
+    data_path = "%s/data" % sssd_qe_path
+
+    def _script(name):
+        """ Run powershell script """
+        filename = name
+        remote_file_path = posixpath.join('/home/administrator', filename)
+        source_file_path = posixpath.join(data_path, filename)
+        session_multihost.ad[0].transport.put_file(source_file_path,
+                                                   remote_file_path)
+        pwrshell_cmd = 'powershell.exe -inputformat '\
+                       'none -noprofile ./%s' % filename
+        cmd = session_multihost.ad[0].run_command(pwrshell_cmd,
+                                                  raiseonerr=False)
+        return cmd
+    return _script
+
+
+@pytest.fixture(scope="function")
+def adjoin(session_multihost, request):
+    """ Join to AD using net ads command """
+    ad_realm = session_multihost.ad[0].realm
+    ad_ip = session_multihost.ad[0].ip
+    client_ad = sssdTools(session_multihost.client[0], session_multihost.ad[0])
+
+    client_ad.disjoin_ad()  # Make sure system is disjoined from AD
+    client_ad.create_kdcinfo(ad_realm, ad_ip)
+    kinit = "kinit Administrator"
+    ad_password = session_multihost.ad[0].ssh_password
+    try:
+        session_multihost.client[0].run_command(kinit, stdin_text=ad_password)
+    except subprocess.CalledProcessError:
+        pytest.fail("kinit failed")
+
+    def _join(membersw=None):
+        """ Join AD """
+        if membersw == 'samba':
+            client_ad.join_ad(ad_realm, ad_password, mem_sw='samba')
+        else:
+            client_ad.join_ad(ad_realm, ad_password)
+
+    def adleave():
+        """ Disjoin AD """
+        client_ad.disjoin_ad()
+        remove_keytab = 'rm -f /etc/krb5.keytab'
+        kdestroy_cmd = 'kdestroy -A'
+        session_multihost.client[0].run_command(kdestroy_cmd)
+        session_multihost.client[0].run_command(remove_keytab)
+    request.addfinalizer(adleave)
+    return _join
+
+
+@pytest.fixture(scope="function")
+def get_rid(session_multihost, create_aduser_group):
+    """
+    Find Relative ID from object SID
+    :param obj session_multihost: multihost object
+    :Return: RID value
+    """
+    (user, _) = create_aduser_group
+    client = sssdTools(session_multihost.client[0], session_multihost.ad[0])
+    client.clear_sssd_cache()
+    ad_user = '{}@{}'.format(user, session_multihost.ad[0].domainname)
+    getent = 'getent passwd %s' % ad_user
+    cmd = session_multihost.client[0].run_command(getent, raiseonerr=False)
+    if cmd.returncode == 0:
+        rid = client.find_rid(ad_user)
+        return (ad_user, rid)
+    else:
+        pytest.fail("%s User lookup failed" % ad_user)
+
+
+@pytest.fixture(scope="function")
+def keytab_sssd_conf(session_multihost, request, adjoin):
+    """ Add parameters required for keytab rotation in sssd.conf """
+    adjoin(membersw='samba')
+    client = sssdTools(session_multihost.client[0], session_multihost.ad[0])
+    client.backup_sssd_conf()
+    sssd_params = {'ad_maximum_machine_account_password_age': '1',
+                   'ad_machine_account_password_renewal_opts': '300:15',
+                   'debug_level': '9'}
+    domain_name = client.get_domain_section_name()
+    domain_section = 'domain/{}'.format(domain_name)
+    client.sssd_conf(domain_section, sssd_params,)
+
+    def restore_sssd_conf():
+        """ Restore original sssd.conf """
+        client.restore_sssd_conf()
+    request.addfinalizer(restore_sssd_conf)
+
+
+@pytest.fixture(scope="function")
+def cifsmount(session_multihost, request):
+    """ Mount cifs share and create files with
+    different permissions
+    """
+    ad_user = 'idmfoouser1'
+    ad_group = 'idmfoogroup1'
+    kinit = 'kinit %s' % ad_user
+    server = session_multihost.master[0].sys_hostname.strip().split('.')[0]
+    share_path = '/mnt/samba/share1'
+    session_multihost.client[0].run_command(kinit, stdin_text='Secret123')
+    mountcifs = "mount -t cifs -o cifsacl "\
+                "-o sec=krb5 -o username=%s //%s/share1"\
+                " /mnt/samba/share1" % (ad_user, server)
+    cmd = session_multihost.client[0].run_command(mountcifs, raiseonerr=False)
+    time.sleep(5)
+    if cmd.returncode != 0:
+        journalctl = 'journalctl -x -n 50 --no-pager'
+        session_multihost.client[0].run_command(journalctl)
+
+    def cifsunmount():
+        """ Umount the cifs shares """
+        umount = "umount /mnt/samba/share1"
+        cmd = session_multihost.client[0].run_command(umount, raiseonerr=False)
+        assert cmd.returncode == 0
+        kdestroy = 'kdestroy -A'
+        session_multihost.client[0].run_command(kdestroy, raiseonerr=False)
+    request.addfinalizer(cifsunmount)
+
+
+@pytest.fixture(scope='function')
+def backupsssdconf(session_multihost, request):
+    """ Backup and restore sssd.conf """
+    bkup = 'cp -f %s %s.orig' % (SSSD_DEFAULT_CONF,
+                                 SSSD_DEFAULT_CONF)
+    session_multihost.client[0].run_command(bkup)
+    session_multihost.client[0].service_sssd('stop')
+
+    def restoresssdconf():
+        """ Restore sssd.conf """
+        restore = 'cp -f %s.orig %s' % (SSSD_DEFAULT_CONF, SSSD_DEFAULT_CONF)
+        session_multihost.client[0].run_command(restore)
+    request.addfinalizer(restoresssdconf)
+
+
+@pytest.fixture(scope='function')
+def create_site(session_multihost, request):
+    ad2_hostname = session_multihost.ad[1].hostname
+    ad2_shostname = ad2_hostname.strip().split('.')[0]
+    site = "Raleigh"
+
+    cmd_create_site = "powershell.exe -inputformat none -noprofile " \
+                      "'(New-ADReplicationSite -Name \"%s\" " \
+                      "-Confirm:$false)'" % site
+    cmd_move_ad2 = "powershell.exe -inputformat none -noprofile " \
+                   "'(Move-ADDirectoryServer -Identity \"%s\" -Site \"%s\" " \
+                   "-Confirm:$false)'" % (ad2_shostname, site)
+
+    session_multihost.ad[0].run_command(cmd_create_site)
+    session_multihost.ad[0].run_command(cmd_move_ad2)
+
+    def teardown_site():
+        cmd_move_ad2back = "powershell.exe -inputformat none -noprofile " \
+                           "'(Move-ADDirectoryServer -Identity \"%s\" " \
+                           "-Site \"Default-First-Site-Name\" " \
+                           "-Confirm:$false)'" % ad2_shostname
+        cmd_remove_site2 = "powershell.exe -inputformat none -noprofile " \
+                           "'(Remove-ADReplicationSite \"%s\" " \
+                           "-Confirm:$false)'" % site
+        session_multihost.ad[0].run_command(cmd_move_ad2back)
+        session_multihost.ad[0].run_command(cmd_remove_site2)
+
+    request.addfinalizer(teardown_site)
+
+
+# ############## class scoped Fixtures ##############################
+
+
+@pytest.fixture(scope="class")
+def multihost(session_multihost, request):
+    """ Multihost fixture to be used by tests
+    :param obj session_multihost: multihost object
+    :return obj session_multihost: return multihost object
+    :Exceptions: None
+    """
+    if hasattr(request.cls(), 'class_setup'):
+        request.cls().class_setup(session_multihost)
+        request.addfinalizer(
+            lambda: request.cls().class_teardown(session_multihost))
+    return session_multihost
+
+
+@pytest.fixture(scope="class")
+def clear_sssd_cache(session_multihost):
+    """ Clear sssd cache """
+    client = sssdTools(session_multihost.client[0])
+    client.clear_sssd_cache()
+
+@pytest.fixture(scope="class")
+def joinad(session_multihost, request):
+    """ class fixture to join AD using realm """
+    client = sssdTools(session_multihost.client[0], session_multihost.ad[0])
+    client.disjoin_ad()  # Make sure system is disjoined from AD
+    kinit = "kinit Administrator"
+    ad_password = session_multihost.ad[0].ssh_password
+    realm_output = client.join_ad()
+    try:
+        session_multihost.client[0].service_sssd('restart')
+    except SSSDException:
+        cmd = 'cat /etc/sssd/sssd.conf'
+        session_multihost.client[0].run_command(cmd)
+        journal = 'journalctl -x -n 150 --no-pager'
+        session_multihost.client[0].run_command(journal)
+    retry = 0
+    while (retry != 5):
+        cmd = session_multihost.client[0].run_command(kinit,
+                                                      stdin_text=ad_password,
+                                                      raiseonerr=False)
+        if cmd.returncode == 0:
+            break
+        else:
+            retry += 1
+            time.sleep(5)
+
+    def disjoin():
+        """ Disjoin system from Windows AD """
+        client.disjoin_ad()
+        stop_sssd = 'systemctl stop sssd'
+        remove_keytab = 'rm -f /etc/krb5.keytab'
+        kdestroy_cmd = 'kdestroy -A'
+        session_multihost.client[0].run_command(stop_sssd)
+        session_multihost.client[0].run_command(remove_keytab)
+        session_multihost.client[0].run_command(kdestroy_cmd)
+    request.addfinalizer(disjoin)
+
+# ################### Session scoped fixtures #########################
+
+
+@pytest.fixture(scope="session", autouse=True)
+def setup_session(request, session_multihost):
+    """ Setup Session """
+    client = sssdTools(session_multihost.client[0])
+    realm = session_multihost.ad[0].realm
+    ad_host = session_multihost.ad[0].sys_hostname
+    try:
+        master = sssdTools(session_multihost.master[0])
+    except IndexError:
+        pass
+    else:
+        master.server_install_pkgs()
+        master.update_resolv_conf(session_multihost.ad[0].ip)
+    client.client_install_pkgs()
+    client.update_resolv_conf(session_multihost.ad[0].ip)
+    client.clear_sssd_cache()
+    client.systemsssdauth(realm, ad_host)
+
+    def teardown_session():
+        """ Teardown session """
+        session_multihost.client[0].service_sssd('stop')
+        remove_sssd_conf = 'rm -f /etc/sssd/sssd.conf'
+        session_multihost.client[0].run_command(remove_sssd_conf)
+    request.addfinalizer(teardown_session)
diff --git a/src/tests/multihost/adsites/pytest.ini b/src/tests/multihost/adsites/pytest.ini
new file mode 100644
index 0000000000..4b0d37efe9
--- /dev/null
+++ b/src/tests/multihost/adsites/pytest.ini
@@ -0,0 +1,3 @@
+[pytest]
+markers =
+   adsites: tests the require two domain controllers
diff --git a/src/tests/multihost/adsites/readme.rst b/src/tests/multihost/adsites/readme.rst
new file mode 100644
index 0000000000..3bdcb6a9aa
--- /dev/null
+++ b/src/tests/multihost/adsites/readme.rst
@@ -0,0 +1,134 @@
+AD Provider Test Suite
+======================
+
+This directory contains test automation for SSSD AD Provider. 
+
+
+Fixtures
+========
+
+
+session
+*******
+
+* setup_session: This fixtures does the following tasks:
+  
+  
+  * Install common required packages like 
+  * Updated /etc/resolv.conf with Windows IP Address
+  * Clear sssd cache 
+  * Configure system to use sssd authentication
+
+
+* teardown_session: This is not a fixtures but a teardown of ``setup_session`` 
+
+  * Restores resolv.conf
+  * Stop sssd service
+  * remove sssd.conf 
+
+
+class
+*****
+
+* multihost: This fixture returns multihost object. Also using builtin request
+  fixture we pass ``class_setup`` and ``class_teardown``.  If the test suite defines
+  class_setup and class_teardown functions, multihost object will be available
+  to execute any remote functions. 
+
+* clear_sssd_cache: Stops sssd service. Removes cache files from
+  ``/var/lib/sss/db`` and starts sssd service. Sleeps for 10 seconds.
+
+* enable_autofs_schema: Backup sssd.conf and Edit sssd.conf and specify
+  ``autofs_provider = ad`` and ``debug_level = 9`` 
+
+* enable_ad_sudoschema: Enable AD Sudo Schema 
+
+* create_ad_sudousers: Create users in Windows Active Directory with username
+  from ``sudo_idmuser1`` to ``sudo_idmuser10``.
+
+* sudorules: Create AD sudo rules ``less_user_rule1`` to ``less_user_rule10``::
+
+  
+   # less_user_rule1, Sudoers, juno.test
+   dn: CN=less_user_rule1,OU=Sudoers,DC=juno,DC=test
+   objectClass: top
+   objectClass: sudoRole
+   cn: less_user_rule1  
+   distinguishedName: CN=less_user_rule1,OU=Sudoers,DC=juno,DC=test
+   instanceType: 4
+   whenCreated: 20190416073735.0Z
+   whenChanged: 20190416073736.0Z
+   uSNCreated: 1283544
+   uSNChanged: 1283547
+   name: less_user_rule1
+   objectGUID:: wYiyH7dlT0G/5y40LPgHpw==
+   objectCategory: CN=sudoRole,CN=Schema,CN=Configuration,DC=juno,DC=test
+   dSCorePropagationData: 16010101000000.0Z
+   sudoHost: ALL
+   sudoUser: sudo_idmuserN
+   sudoUser: sudo_idmus...@juno.test
+   sudoOption: !authenticate
+   sudoOption: !requiretty
+   sudoCommand: /usr/bin/less
+  
+* joinad: Join the system to Windows AD using realm with membercli-software
+  being adcli. 
+
+
+
+function
+********
+
+* smbconfig: Configure smb.conf ::
+    
+    [global]
+    workgroup = <DOMAIN>
+    security = ads
+    realm = <DOMAIN.COM>
+    netbios name = <samba-client-shortname>
+    kerberos method = secrets and keytab
+    client signing = yes
+    client use spnego = yes
+    log file = /var/log/samba/log.%m
+    max log size = 50
+    log level = 9
+
+
+* create_adgrp: fixture to create AD Groups . Runs ``adgroup.ps1`` powershell
+  script. powershell script::
+
+    #Following Powershell script will add the group in AD server
+    #and set GroupScope as Global and GroupCtegory as Security and
+    #also set MemberOf BuiltIn group as Administrator
+
+    Import-Module ActiveDirectory
+
+    $grname = -join ((65..90) + (97..122) | Get-Random -Count 7 | % {[char]$_})
+
+    Write-Host $grname
+
+    New-ADGroup -Name $grname -GroupScope Global -GroupCategory Security
+
+    Add-ADPrincipalGroupMembership -MemberOf Administrators -Identity $grname
+
+ 
+
+* create_aduser_group: Creates AD user ``testuser<randomnumber>`` and AD Groups
+  ``testgroup<randomnumber>``
+
+* add_nisobject: 
+
+  * uses Indirect parameterization and takes map name as the parameter from
+    test case. (example: ``/export``, ``/project1``)
+  * Installs nfs-utils package on nfs server and starts  nfs-server. 
+  * Add map based on request parameter. 
+
+
+* set_autofs_search_base: Enable autofs search base in sssd.conf 
+
+* add_user_in_domain_local_group: Add domain local AD group
+  ``ltestgoup<randomnumber>`` 
+
+* add_principals: Add ``HTTP`` and ``NFS`` service principals in Windows AD
+
+
diff --git a/src/tests/multihost/adsites/test_adsites.py b/src/tests/multihost/adsites/test_adsites.py
new file mode 100644
index 0000000000..a277465755
--- /dev/null
+++ b/src/tests/multihost/adsites/test_adsites.py
@@ -0,0 +1,213 @@
+from __future__ import print_function
+import time
+import pytest
+from sssd.testlib.common.utils import sssdTools
+
+
+@pytest.mark.adsites
+class Testadsites(object):
+    """
+    @Title: IDM-SSSD-TC: ad_provider: adsites:
+    Improve AD site discovery process
+    Test cases for BZ: 1819012
+
+    @Steps:
+    1. Join client to AD
+    2. Start SSSD and enable debug
+    3. Create secondary site, move second domain controller to second site 
+    """
+    @pytest.mark.adsites
+    def test_001_ad_startup_discovery(self, multihost, adjoin):
+        """
+        @Title: IDM-SSSD-TC: ad_startup_discovery
+        * grep sssd domain logs for cldap ping
+        * grep sssd logs for cldap ping parallel batch
+        * grep sssd logs for cldap ping domain discovery
+        """
+        adjoin(membersw='adcli')
+        client = sssdTools(multihost.client[0], multihost.ad[0])
+        domain = client.get_domain_section_name()
+        domain_section = 'domain/{}'.format(domain)
+        sssd_params = {'debug_level': '0xFFF0'}
+        client.sssd_conf(domain_section, sssd_params)
+
+        ad1 = multihost.ad[0].hostname
+        ad2 = multihost.ad[1].hostname
+        multihost.client[0].service_sssd('start')
+
+        cmd_id = 'id Administrator@%s' % domain
+        multihost.client[0].run_command(cmd_id)
+
+        cmd_check_ping = 'grep -ire ad_cldap_ping_send /var/log/sssd/sssd_%s.log | ' \
+                         'grep -ire \"Found 2 domain controllers in domain ' \
+                         'Default-First-Site-Name._sites.%s\"' % (domain, domain)
+        check_ping = multihost.client[0].run_command(cmd_check_ping, raiseonerr=False)
+        assert check_ping.returncode == 0
+        cmd_check_batch1 = 'grep -ire ad_cldap_ping_parallel_batch /var/log/sssd/sssd_%s.log | ' \
+                           'grep -ire \" %s\"' % (domain, ad1)
+        check_batch1 = multihost.client[0].run_command(cmd_check_batch1, raiseonerr=False)
+        cmd_check_batch2 = 'grep -ire ad_cldap_ping_parallel_batch /var/log/sssd/sssd_%s.log | ' \
+                           'grep -ire \" %s\"' % (domain, ad2)
+        check_batch2 = multihost.client[0].run_command(cmd_check_batch2, raiseonerr=False)
+        if check_batch1.returncode == 0 or check_batch2.returncode == 0:
+            assert True
+        else:
+            assert False
+        cmd_check_discovery = 'grep -ire ad_cldap_ping_domain_discovery_done /var/log/sssd/sssd_%s.log | ' \
+                              'grep -ire \"Found 2 domain controllers in domain ' \
+                              'Default-First-Site-Name._sites.%s\"' % (domain, domain)
+        check_discovery = multihost.client[0].run_command(cmd_check_discovery, raiseonerr=False)
+        assert check_discovery.returncode == 0
+
+    @pytest.mark.adsites
+    def test_002_ad_startup_discovery_one_server_unreachable(self, multihost, adjoin):
+        """
+        @Title: IDM-SSSD-TC: ad_startup_discovery_one_server_unreachable
+        * grep sssd domain logs for cldap ping
+        * grep sssd logs for cldap ping parallel batch
+        * grep sssd logs for cldap ping domain discovery
+        """
+        adjoin(membersw='adcli')
+        client = sssdTools(multihost.client[0], multihost.ad[0])
+        domain = client.get_domain_section_name()
+        domain_section = 'domain/{}'.format(domain)
+        sssd_params = {'debug_level': '0xFFF0'}
+        client.sssd_conf(domain_section, sssd_params)
+
+        ad1 = multihost.ad[0].hostname
+        ad2 = multihost.ad[1].hostname
+        ad2ip = multihost.ad[1].ip
+
+        cmd_dnf_firewalld = 'dnf install -y firewalld'
+        multihost.client[0].run_command(cmd_dnf_firewalld)
+        cmd_start_firewalld = 'systemctl start firewalld'
+        multihost.client[0].run_command(cmd_start_firewalld)
+        fw_add = 'firewall-cmd --permanent --direct --add-rule ipv4 ' \
+                 'filter OUTPUT 0 -d %s -j DROP' % ad2ip
+        fw_reload = 'firewall-cmd --reload'
+        multihost.client[0].run_command(fw_add, raiseonerr=True)
+        multihost.client[0].run_command(fw_reload, raiseonerr=True)
+        multihost.client[0].service_sssd('start')
+
+        cmd_check_ping = 'grep -ire ad_cldap_ping_send /var/log/sssd/sssd_%s.log | ' \
+                         'grep -ire \"Found 2 domain controllers in domain ' \
+                         'Default-First-Site-Name._sites.%s\"' % (domain, domain)
+        check_ping = multihost.client[0].run_command(cmd_check_ping, raiseonerr=False)
+        assert check_ping.returncode == 0
+        cmd_check_batch1 = 'grep -ire ad_cldap_ping_parallel_batch /var/log/sssd/sssd_%s.log | ' \
+                           'grep -ire \" %s\"' % (domain, ad1)
+        check_batch1 = multihost.client[0].run_command(cmd_check_batch1, raiseonerr=False)
+        cmd_check_batch2 = 'grep -ire ad_cldap_ping_parallel_batch /var/log/sssd/sssd_%s.log | ' \
+                           'grep -ire \" %s\"' % (domain, ad2)
+        check_batch2 = multihost.client[0].run_command(cmd_check_batch2, raiseonerr=False)
+        if check_batch1.returncode == 1 and check_batch2.returncode == 0:
+            assert True
+        else:
+            assert False
+        cmd_check_discovery = 'grep -ire ad_cldap_ping_domain_discovery_done /var/log/sssd/sssd_%s.log | ' \
+                              'grep -ire \"Found 2 domain controllers in domain ' \
+                              'Default-First-Site-Name._sites.%s\"' % (domain, domain)
+        check_discovery = multihost.client[0].run_command(cmd_check_discovery, raiseonerr=False)
+        assert check_discovery.returncode == 0
+
+        fw_stop = 'systemctl stop firewalld'
+        multihost.client[0].run_command(fw_stop, raiseonerr=True)
+        fw_remove = 'dnf remove -y firewalld'
+        multihost.client[0].run_command(fw_remove, raiseonerr=True)
+
+    @pytest.mark.adsites
+    def test_003_ad_startup_discovery_two_different_sites(self, multihost, adjoin, create_site):
+        """
+         @Title: IDM-SSSD-TC: ad_startup_discovery_two_different_sites
+        * grep sssd domain logs for cldap ping
+        * grep sssd logs for cldap ping parallel batch
+        * grep sssd logs for cldap ping domain discovery
+        """
+        adjoin(membersw='adcli')
+        client = sssdTools(multihost.client[0], multihost.ad[0])
+        domain = client.get_domain_section_name()
+        domain_section = 'domain/{}'.format(domain)
+        sssd_params = {'debug_level': '0xFFF0'}
+        client.sssd_conf(domain_section, sssd_params)
+
+        ad1 = multihost.ad[0].hostname
+        ad2 = multihost.ad[1].hostname
+        multihost.client[0].service_sssd('start')
+
+        cmd_check_ping = 'grep -ire ad_cldap_ping_send /var/log/sssd/sssd_%s.log | ' \
+                         'grep -ire \"Found 2 domain controllers in domain ' \
+                         'Default-First-Site-Name._sites.%s\"' % (domain, domain)
+        check_ping = multihost.client[0].run_command(cmd_check_ping, raiseonerr=False)
+        assert check_ping.returncode == 0
+        cmd_check_batch1 = 'grep -ire ad_cldap_ping_parallel_batch /var/log/sssd/sssd_%s.log | ' \
+                           'grep -ire \" %s\"' % (domain, ad1)
+        check_batch1 = multihost.client[0].run_command(cmd_check_batch1, raiseonerr=False)
+        cmd_check_batch2 = 'grep -ire ad_cldap_ping_parallel_batch /var/log/sssd/sssd_%s.log | ' \
+                           'grep -ire \" %s\"' % (domain, ad2)
+        check_batch2 = multihost.client[0].run_command(cmd_check_batch2, raiseonerr=False)
+        if check_batch1.returncode == 0 or check_batch2.returncode == 0:
+            assert True
+        else:
+            assert False
+        cmd_check_discovery = 'grep -ire ad_cldap_ping_domain_discovery_done /var/log/sssd/sssd_%s.log | ' \
+                              'grep -ire \"Found 2 domain controllers in domain ' \
+                              'Default-First-Site-Name._sites.%s\"' % (domain, domain)
+        check_discovery = multihost.client[0].run_command(cmd_check_discovery, raiseonerr=False)
+        assert check_discovery.returncode == 0
+
+    @pytest.mark.adsites
+    def test_004_ad_startup_discovery_two_different_sites_one_server_unreachable(self, multihost, adjoin, create_site):
+        """
+        @Title: IDM-SSSD-TC: ad_startup_discovery_two_different_sites_one_server_unreachable
+        * grep sssd domain logs for cldap ping
+        * grep sssd logs for cldap ping parallel batch
+        * grep sssd logs for cldap ping domain discovery
+        """
+        adjoin(membersw='adcli')
+        client = sssdTools(multihost.client[0], multihost.ad[0])
+        domain = client.get_domain_section_name()
+        domain_section = 'domain/{}'.format(domain)
+        sssd_params = {'debug_level': '0xFFF0'}
+        client.sssd_conf(domain_section, sssd_params)
+
+        ad1 = multihost.ad[0].hostname
+        ad2 = multihost.ad[1].hostname
+        ad2ip = multihost.ad[1].ip
+
+        cmd_dnf_firewalld = 'dnf install -y firewalld'
+        multihost.client[0].run_command(cmd_dnf_firewalld)
+        cmd_start_firewalld = 'systemctl start firewalld'
+        multihost.client[0].run_command(cmd_start_firewalld)
+        fw_add = 'firewall-cmd --permanent --direct --add-rule ipv4 ' \
+                 'filter OUTPUT 0 -d %s -j DROP' % ad2ip
+        fw_reload = 'firewall-cmd --reload'
+        multihost.client[0].run_command(fw_add, raiseonerr=True)
+        multihost.client[0].run_command(fw_reload, raiseonerr=True)
+
+        multihost.client[0].service_sssd('start')
+
+        cmd_check_ping = 'grep -ire ad_cldap_ping_send /var/log/sssd/sssd_%s.log | ' \
+                         'grep -ire \"Found 2 domain controllers in domain ' \
+                         'Default-First-Site-Name._sites.%s\"' % (domain, domain)
+        check_ping = multihost.client[0].run_command(cmd_check_ping, raiseonerr=False)
+        assert check_ping.returncode == 0
+        cmd_check_batch1 = 'grep -ire ad_cldap_ping_parallel_batch /var/log/sssd/sssd_%s.log | ' \
+                           'grep -ire \" %s\"' % (domain, ad1)
+        check_batch1 = multihost.client[0].run_command(cmd_check_batch1, raiseonerr=False)
+        cmd_check_batch2 = 'grep -ire ad_cldap_ping_parallel_batch /var/log/sssd/sssd_%s.log | ' \
+                           'grep -ire \" %s\"' % (domain, ad2)
+        check_batch2 = multihost.client[0].run_command(cmd_check_batch2, raiseonerr=False)
+        if check_batch1.returncode == 1 and check_batch2.returncode == 0:
+            assert True
+        else:
+            assert False
+        cmd_check_discovery = 'grep -ire ad_cldap_ping_domain_discovery_done /var/log/sssd/sssd_%s.log | ' \
+                              'grep -ire \"Found 2 domain controllers in domain ' \
+                              'Default-First-Site-Name._sites.%s\"' % (domain, domain)
+        check_discovery = multihost.client[0].run_command(cmd_check_discovery, raiseonerr=False)
+        assert check_discovery.returncode == 0
+
+        fw_stop = 'systemctl stop firewalld'
+        multihost.client[0].run_command(fw_stop, raiseonerr=True)
+        fw_remove = 'dnf remove -y firewalld'
+        multihost.client[0].run_command(fw_remove, raiseonerr=True)
\ No newline at end of file

From 525d3c4f3be9a0afd4888149f501b59a28aa9bf7 Mon Sep 17 00:00:00 2001
From: Dan Lavu <dl...@redhat.com>
Date: Sun, 29 Nov 2020 17:47:02 -0500
Subject: [PATCH 2/2] Adding multihost tests for
 ad_allow_remote_domain_local_groups, bz1883488 bz1756240

This is the first multihost test that requires more than one AD server, it requires
a root, child and tree domain and users created from the playbooks in CI.

Signed-off-by: Dan Lavu <dl...@redhat.com>
---
 .../{adsites => admultidomain}/conftest.py    |  39 +---
 src/tests/multihost/admultidomain/pytest.ini  |   5 +
 .../{adsites => admultidomain}/readme.rst     |  42 ++--
 .../admultidomain/test_admultidomain.py       | 186 +++++++++++++++
 src/tests/multihost/adsites/pytest.ini        |   3 -
 src/tests/multihost/adsites/test_adsites.py   | 213 ------------------
 .../multihost/sssd/testlib/common/qe_class.py |   8 +-
 7 files changed, 223 insertions(+), 273 deletions(-)
 rename src/tests/multihost/{adsites => admultidomain}/conftest.py (85%)
 create mode 100644 src/tests/multihost/admultidomain/pytest.ini
 rename src/tests/multihost/{adsites => admultidomain}/readme.rst (87%)
 create mode 100644 src/tests/multihost/admultidomain/test_admultidomain.py
 delete mode 100644 src/tests/multihost/adsites/pytest.ini
 delete mode 100644 src/tests/multihost/adsites/test_adsites.py

diff --git a/src/tests/multihost/adsites/conftest.py b/src/tests/multihost/admultidomain/conftest.py
similarity index 85%
rename from src/tests/multihost/adsites/conftest.py
rename to src/tests/multihost/admultidomain/conftest.py
index a491f5b8c1..731ade58e3 100644
--- a/src/tests/multihost/adsites/conftest.py
+++ b/src/tests/multihost/admultidomain/conftest.py
@@ -6,18 +6,16 @@
 import pytest
 import os
 import posixpath
-from sssd.testlib.common.paths import SSSD_DEFAULT_CONF, NSSWITCH_DEFAULT_CONF
-from sssd.testlib.common.qe_class import session_multihost
+from sssd.testlib.common.paths import SSSD_DEFAULT_CONF
 from sssd.testlib.common.exceptions import SSSDException
 from sssd.testlib.common.samba import sambaTools
-from sssd.testlib.common.utils import ADOperations
 from sssd.testlib.common.utils import sssdTools
 
 
 def pytest_configure():
     """ Namespace hook, Adds below dict to pytest namespace """
     pytest.num_masters = 0
-    pytest.num_ad = 2
+    pytest.num_ad = 3
     pytest.num_atomic = 0
     pytest.num_replicas = 0
     pytest.num_clients = 1
@@ -185,36 +183,6 @@ def restoresssdconf():
     request.addfinalizer(restoresssdconf)
 
 
-@pytest.fixture(scope='function')
-def create_site(session_multihost, request):
-    ad2_hostname = session_multihost.ad[1].hostname
-    ad2_shostname = ad2_hostname.strip().split('.')[0]
-    site = "Raleigh"
-
-    cmd_create_site = "powershell.exe -inputformat none -noprofile " \
-                      "'(New-ADReplicationSite -Name \"%s\" " \
-                      "-Confirm:$false)'" % site
-    cmd_move_ad2 = "powershell.exe -inputformat none -noprofile " \
-                   "'(Move-ADDirectoryServer -Identity \"%s\" -Site \"%s\" " \
-                   "-Confirm:$false)'" % (ad2_shostname, site)
-
-    session_multihost.ad[0].run_command(cmd_create_site)
-    session_multihost.ad[0].run_command(cmd_move_ad2)
-
-    def teardown_site():
-        cmd_move_ad2back = "powershell.exe -inputformat none -noprofile " \
-                           "'(Move-ADDirectoryServer -Identity \"%s\" " \
-                           "-Site \"Default-First-Site-Name\" " \
-                           "-Confirm:$false)'" % ad2_shostname
-        cmd_remove_site2 = "powershell.exe -inputformat none -noprofile " \
-                           "'(Remove-ADReplicationSite \"%s\" " \
-                           "-Confirm:$false)'" % site
-        session_multihost.ad[0].run_command(cmd_move_ad2back)
-        session_multihost.ad[0].run_command(cmd_remove_site2)
-
-    request.addfinalizer(teardown_site)
-
-
 # ############## class scoped Fixtures ##############################
 
 
@@ -238,6 +206,7 @@ def clear_sssd_cache(session_multihost):
     client = sssdTools(session_multihost.client[0])
     client.clear_sssd_cache()
 
+
 @pytest.fixture(scope="class")
 def joinad(session_multihost, request):
     """ class fixture to join AD using realm """
@@ -279,7 +248,7 @@ def disjoin():
 
 
 @pytest.fixture(scope="session", autouse=True)
-def setup_session(request, session_multihost):
+def setup_session(session_multihost, request):
     """ Setup Session """
     client = sssdTools(session_multihost.client[0])
     realm = session_multihost.ad[0].realm
diff --git a/src/tests/multihost/admultidomain/pytest.ini b/src/tests/multihost/admultidomain/pytest.ini
new file mode 100644
index 0000000000..31926ae3ca
--- /dev/null
+++ b/src/tests/multihost/admultidomain/pytest.ini
@@ -0,0 +1,5 @@
+[pytest]
+markers =
+   admultidomain: tests the require three domain controllers in three different domains, parent (root), child and tree domains
+   tier1: All tier1 test cases
+
diff --git a/src/tests/multihost/adsites/readme.rst b/src/tests/multihost/admultidomain/readme.rst
similarity index 87%
rename from src/tests/multihost/adsites/readme.rst
rename to src/tests/multihost/admultidomain/readme.rst
index 3bdcb6a9aa..94c84687ab 100644
--- a/src/tests/multihost/adsites/readme.rst
+++ b/src/tests/multihost/admultidomain/readme.rst
@@ -1,7 +1,7 @@
 AD Provider Test Suite
 ======================
 
-This directory contains test automation for SSSD AD Provider. 
+This directory contains test automation for SSSD Multidomain AD Provider.
 
 
 Fixtures
@@ -12,19 +12,19 @@ session
 *******
 
 * setup_session: This fixtures does the following tasks:
-  
-  
-  * Install common required packages like 
+
+
+  * Install common required packages like
   * Updated /etc/resolv.conf with Windows IP Address
-  * Clear sssd cache 
+  * Clear sssd cache
   * Configure system to use sssd authentication
 
 
-* teardown_session: This is not a fixtures but a teardown of ``setup_session`` 
+* teardown_session: This is not a fixtures but a teardown of ``setup_session``
 
   * Restores resolv.conf
   * Stop sssd service
-  * remove sssd.conf 
+  * remove sssd.conf
 
 
 class
@@ -33,27 +33,27 @@ class
 * multihost: This fixture returns multihost object. Also using builtin request
   fixture we pass ``class_setup`` and ``class_teardown``.  If the test suite defines
   class_setup and class_teardown functions, multihost object will be available
-  to execute any remote functions. 
+  to execute any remote functions.
 
 * clear_sssd_cache: Stops sssd service. Removes cache files from
   ``/var/lib/sss/db`` and starts sssd service. Sleeps for 10 seconds.
 
 * enable_autofs_schema: Backup sssd.conf and Edit sssd.conf and specify
-  ``autofs_provider = ad`` and ``debug_level = 9`` 
+  ``autofs_provider = ad`` and ``debug_level = 9``
 
-* enable_ad_sudoschema: Enable AD Sudo Schema 
+* enable_ad_sudoschema: Enable AD Sudo Schema
 
 * create_ad_sudousers: Create users in Windows Active Directory with username
   from ``sudo_idmuser1`` to ``sudo_idmuser10``.
 
 * sudorules: Create AD sudo rules ``less_user_rule1`` to ``less_user_rule10``::
 
-  
+
    # less_user_rule1, Sudoers, juno.test
    dn: CN=less_user_rule1,OU=Sudoers,DC=juno,DC=test
    objectClass: top
    objectClass: sudoRole
-   cn: less_user_rule1  
+   cn: less_user_rule1
    distinguishedName: CN=less_user_rule1,OU=Sudoers,DC=juno,DC=test
    instanceType: 4
    whenCreated: 20190416073735.0Z
@@ -70,9 +70,9 @@ class
    sudoOption: !authenticate
    sudoOption: !requiretty
    sudoCommand: /usr/bin/less
-  
+
 * joinad: Join the system to Windows AD using realm with membercli-software
-  being adcli. 
+  being adcli.
 
 
 
@@ -80,7 +80,7 @@ function
 ********
 
 * smbconfig: Configure smb.conf ::
-    
+
     [global]
     workgroup = <DOMAIN>
     security = ads
@@ -111,23 +111,23 @@ function
 
     Add-ADPrincipalGroupMembership -MemberOf Administrators -Identity $grname
 
- 
+
 
 * create_aduser_group: Creates AD user ``testuser<randomnumber>`` and AD Groups
   ``testgroup<randomnumber>``
 
-* add_nisobject: 
+* add_nisobject:
 
   * uses Indirect parameterization and takes map name as the parameter from
     test case. (example: ``/export``, ``/project1``)
-  * Installs nfs-utils package on nfs server and starts  nfs-server. 
-  * Add map based on request parameter. 
+  * Installs nfs-utils package on nfs server and starts  nfs-server.
+  * Add map based on request parameter.
 
 
-* set_autofs_search_base: Enable autofs search base in sssd.conf 
+* set_autofs_search_base: Enable autofs search base in sssd.conf
 
 * add_user_in_domain_local_group: Add domain local AD group
-  ``ltestgoup<randomnumber>`` 
+  ``ltestgoup<randomnumber>``
 
 * add_principals: Add ``HTTP`` and ``NFS`` service principals in Windows AD
 
diff --git a/src/tests/multihost/admultidomain/test_admultidomain.py b/src/tests/multihost/admultidomain/test_admultidomain.py
new file mode 100644
index 0000000000..aca2f1b9a3
--- /dev/null
+++ b/src/tests/multihost/admultidomain/test_admultidomain.py
@@ -0,0 +1,186 @@
+from __future__ import print_function
+import pytest
+import re
+from sssd.testlib.common.utils import sssdTools
+from sssd.testlib.common.utils import SSHClient
+
+
+@pytest.mark.admultidomain
+class Testadmultidomain(object):
+    """
+    @Title: IDM-SSSD-TC: ad_provider: admultidomain filter domain groups
+
+    @Steps:
+    """
+    @pytest.mark.admultidomain
+    def test_001_filter_remote_trusted_local_domain_groups(self, multihost,
+                                                           adjoin):
+        """
+        @Title: IDM-SSSD-TC: RFE for the following parameter,
+        ad_allow_remote_domain_local_groups bz1883488 bz1756240
+
+        By default, local domain groups are filtered, with a default
+        configuration check for the following;
+
+        * domain_gr...@domain.com
+        * child_domain_gr...@child.domain.com
+        * tree_domain_gr...@treedomain.com
+        * domain_gr...@child.domain.com
+        * domain_gr...@treedomain.com
+        * us...@domain.com
+        * child_us...@child.domain.com
+        * tree_us...@treedomain.com
+
+        And ensure that the child and tree domain groups are not found.
+        Enabling the feature, with the extra
+        parameters; ldap_use_tokengroups to false and ad_enable_gc to false.
+        The groups should be found.
+
+        :param multihost:
+        :param adjoin:
+        :return:
+        """
+        adjoin(membersw='adcli')
+        client = sssdTools(multihost.client[0])
+        domain = client.get_domain_section_name()
+        domain_section = 'domain/{}'.format(domain)
+        sssd_params = {'ad_allow_remote_domain_local_groups': 'true',
+                       'ldap_use_tokengroups': 'false',
+                       'ad_enable_gc': 'false'}
+        multihost.client[0].service_sssd('start')
+
+        child_domain = multihost.ad[1].domainname
+        tree_domain = multihost.ad[2].domainname
+
+        cmd_id_user = 'id user1@%s' % domain
+        cmd_get_group = 'getent group domain_group@%s' % domain
+        get_group = multihost.client[0].run_command(cmd_get_group,
+                                                    raiseonerr=False)
+        assert get_group.returncode == 0
+        id_user = multihost.client[0].run_command(cmd_id_user,
+                                                  raiseonerr=False)
+        if id_user.returncode == 0:
+            status = 'PASS'
+            find = re.compile(r'domain_group@%s' % domain)
+            get_group_result = find.search(id_user.stdout_text)
+            if get_group_result is None:
+                status = 'FAIL'
+            assert status != 'FAIL'
+
+        cmd_id_child_user = 'id child_user1@%s' % child_domain
+        cmd_get_child_group = 'getent group child_domain_group@%s'\
+                              % child_domain
+        get_child_group = multihost.client[0].run_command(cmd_get_child_group,
+                                                          raiseonerr=False)
+        assert get_child_group.returncode == 2
+        id_child_user = multihost.client[0].run_command(cmd_id_child_user,
+                                                        raiseonerr=False)
+        if id_child_user.returncode == 0:
+            status = 'PASS'
+            find = re.compile(r'child_domain_group@%s' % child_domain)
+            get_child_group_result = find.search(id_child_user.stdout_text)
+            if get_child_group_result is True:
+                status = 'FAIL'
+            assert status != 'FAIL'
+
+            cmd_id_tree_user = 'id tree_user1@%s' % tree_domain
+            cmd_get_tree_group = 'getent group tree_domain_group@%s' \
+                                 % tree_domain
+            get_tree_group = multihost.client[0].run_command(
+                cmd_get_tree_group, raiseonerr=False)
+            assert get_tree_group.returncode == 2
+            id_tree_user = multihost.client[0].run_command(
+                cmd_id_tree_user, raiseonerr=False)
+            if id_tree_user.returncode == 0:
+                status = 'PASS'
+                find = re.compile(r'tree_domain_group@%s' % tree_domain)
+                get_tree_group_result = find.search(id_tree_user.stdout_text)
+                if get_tree_group_result is True:
+                    status = 'FAIL'
+                assert status != 'FAIL'
+
+        multihost.client[0].service_sssd('stop')
+        client.sssd_conf(domain_section, sssd_params)
+        client.remove_sss_cache('/var/lib/sss/db')
+        client.remove_sss_cache('/var/log/sssd')
+        multihost.client[0].service_sssd('restart')
+
+        cmd_id_user = 'id user1@%s' % domain
+        cmd_get_group = 'getent group domain_group@%s' % domain
+        get_group = multihost.client[0].run_command(cmd_get_group,
+                                                    raiseonerr=False)
+        assert get_group.returncode == 0
+        id_user = multihost.client[0].run_command(cmd_id_user,
+                                                  raiseonerr=False)
+        if id_user.returncode == 0:
+            status = 'PASS'
+            find = re.compile(r'domain_group@%s' % domain)
+            get_group_result = find.search(id_user.stdout_text)
+            if get_group_result is None:
+                status = 'FAIL'
+            assert status != 'FAIL'
+
+        cmd_id_child_user = 'id child_user1@%s' % child_domain
+        cmd_get_child_group = 'getent group child_domain_group@%s'\
+                              % child_domain
+        get_child_group = multihost.client[0].run_command(cmd_get_child_group,
+                                                          raiseonerr=False)
+        assert get_child_group.returncode == 0
+        id_child_user = multihost.client[0].run_command(cmd_id_child_user,
+                                                        raiseonerr=False)
+        if id_child_user.returncode == 0:
+            status = 'PASS'
+            find = re.compile(r'child_domain_group@%s' % child_domain)
+            get_child_group_result = find.search(id_child_user.stdout_text)
+            if get_child_group_result is None:
+                status = 'FAIL'
+            assert status != 'FAIL'
+
+        cmd_id_child_conflict_user = 'id child_user1@%s' % child_domain
+        cmd_get_child_conflict_group = 'getent group domain_group@%s'\
+                                       % child_domain
+        get_child_conflict_group = multihost.client[0].run_command(
+            cmd_get_child_conflict_group, raiseonerr=False)
+        assert get_child_conflict_group.returncode == 0
+        id_child_conflict_user = multihost.client[0].run_command(
+            cmd_id_child_conflict_user, raiseonerr=False)
+        if id_child_conflict_user.returncode == 0:
+            status = 'PASS'
+            find = re.compile(r'domain_group@%s' % child_domain)
+            get_child_conflict_group_result = find.search(
+                id_child_conflict_user.stdout_text)
+            if get_child_conflict_group_result is True:
+                status = 'FAIL'
+                assert status != 'FAIL'
+
+        cmd_id_tree_user = 'id tree_user1@%s' % tree_domain
+        cmd_get_tree_group = 'getent group tree_domain_group@%s' % tree_domain
+        get_tree_group = multihost.client[0].run_command(cmd_get_tree_group,
+                                                         raiseonerr=False)
+        assert get_tree_group.returncode == 0
+        id_tree_user = multihost.client[0].run_command(cmd_id_tree_user,
+                                                       raiseonerr=False)
+        if id_tree_user.returncode == 0:
+            status = 'PASS'
+            find = re.compile(r'tree_domain_group@%s' % tree_domain)
+            get_tree_group_result = find.search(id_tree_user.stdout_text)
+            if get_tree_group_result is True:
+                status = 'FAIL'
+                assert status != 'FAIL'
+
+        cmd_id_tree_conflict_user = 'id tree_user1@%s' % tree_domain
+        cmd_get_tree_conflict_group = 'getent group domain_group@%s' \
+                                      % tree_domain
+        get_tree_conflict_group = multihost.client[0].run_command(
+            cmd_get_tree_conflict_group, raiseonerr=False)
+        assert get_tree_conflict_group.returncode == 0
+        id_tree_conflict_user = multihost.client[0].run_command(
+            cmd_id_tree_conflict_user, raiseonerr=False)
+        if id_tree_conflict_user.returncode == 0:
+            status = 'PASS'
+            find = re.compile(r'domain_group@%s' % tree_domain)
+            get_tree_conflict_group_result = find.search(
+                id_tree_conflict_user.stdout_text)
+            if get_tree_conflict_group_result is True:
+                status = 'FAIL'
+                assert status != 'FAIL'
diff --git a/src/tests/multihost/adsites/pytest.ini b/src/tests/multihost/adsites/pytest.ini
deleted file mode 100644
index 4b0d37efe9..0000000000
--- a/src/tests/multihost/adsites/pytest.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[pytest]
-markers =
-   adsites: tests the require two domain controllers
diff --git a/src/tests/multihost/adsites/test_adsites.py b/src/tests/multihost/adsites/test_adsites.py
deleted file mode 100644
index a277465755..0000000000
--- a/src/tests/multihost/adsites/test_adsites.py
+++ /dev/null
@@ -1,213 +0,0 @@
-from __future__ import print_function
-import time
-import pytest
-from sssd.testlib.common.utils import sssdTools
-
-
-@pytest.mark.adsites
-class Testadsites(object):
-    """
-    @Title: IDM-SSSD-TC: ad_provider: adsites:
-    Improve AD site discovery process
-    Test cases for BZ: 1819012
-
-    @Steps:
-    1. Join client to AD
-    2. Start SSSD and enable debug
-    3. Create secondary site, move second domain controller to second site 
-    """
-    @pytest.mark.adsites
-    def test_001_ad_startup_discovery(self, multihost, adjoin):
-        """
-        @Title: IDM-SSSD-TC: ad_startup_discovery
-        * grep sssd domain logs for cldap ping
-        * grep sssd logs for cldap ping parallel batch
-        * grep sssd logs for cldap ping domain discovery
-        """
-        adjoin(membersw='adcli')
-        client = sssdTools(multihost.client[0], multihost.ad[0])
-        domain = client.get_domain_section_name()
-        domain_section = 'domain/{}'.format(domain)
-        sssd_params = {'debug_level': '0xFFF0'}
-        client.sssd_conf(domain_section, sssd_params)
-
-        ad1 = multihost.ad[0].hostname
-        ad2 = multihost.ad[1].hostname
-        multihost.client[0].service_sssd('start')
-
-        cmd_id = 'id Administrator@%s' % domain
-        multihost.client[0].run_command(cmd_id)
-
-        cmd_check_ping = 'grep -ire ad_cldap_ping_send /var/log/sssd/sssd_%s.log | ' \
-                         'grep -ire \"Found 2 domain controllers in domain ' \
-                         'Default-First-Site-Name._sites.%s\"' % (domain, domain)
-        check_ping = multihost.client[0].run_command(cmd_check_ping, raiseonerr=False)
-        assert check_ping.returncode == 0
-        cmd_check_batch1 = 'grep -ire ad_cldap_ping_parallel_batch /var/log/sssd/sssd_%s.log | ' \
-                           'grep -ire \" %s\"' % (domain, ad1)
-        check_batch1 = multihost.client[0].run_command(cmd_check_batch1, raiseonerr=False)
-        cmd_check_batch2 = 'grep -ire ad_cldap_ping_parallel_batch /var/log/sssd/sssd_%s.log | ' \
-                           'grep -ire \" %s\"' % (domain, ad2)
-        check_batch2 = multihost.client[0].run_command(cmd_check_batch2, raiseonerr=False)
-        if check_batch1.returncode == 0 or check_batch2.returncode == 0:
-            assert True
-        else:
-            assert False
-        cmd_check_discovery = 'grep -ire ad_cldap_ping_domain_discovery_done /var/log/sssd/sssd_%s.log | ' \
-                              'grep -ire \"Found 2 domain controllers in domain ' \
-                              'Default-First-Site-Name._sites.%s\"' % (domain, domain)
-        check_discovery = multihost.client[0].run_command(cmd_check_discovery, raiseonerr=False)
-        assert check_discovery.returncode == 0
-
-    @pytest.mark.adsites
-    def test_002_ad_startup_discovery_one_server_unreachable(self, multihost, adjoin):
-        """
-        @Title: IDM-SSSD-TC: ad_startup_discovery_one_server_unreachable
-        * grep sssd domain logs for cldap ping
-        * grep sssd logs for cldap ping parallel batch
-        * grep sssd logs for cldap ping domain discovery
-        """
-        adjoin(membersw='adcli')
-        client = sssdTools(multihost.client[0], multihost.ad[0])
-        domain = client.get_domain_section_name()
-        domain_section = 'domain/{}'.format(domain)
-        sssd_params = {'debug_level': '0xFFF0'}
-        client.sssd_conf(domain_section, sssd_params)
-
-        ad1 = multihost.ad[0].hostname
-        ad2 = multihost.ad[1].hostname
-        ad2ip = multihost.ad[1].ip
-
-        cmd_dnf_firewalld = 'dnf install -y firewalld'
-        multihost.client[0].run_command(cmd_dnf_firewalld)
-        cmd_start_firewalld = 'systemctl start firewalld'
-        multihost.client[0].run_command(cmd_start_firewalld)
-        fw_add = 'firewall-cmd --permanent --direct --add-rule ipv4 ' \
-                 'filter OUTPUT 0 -d %s -j DROP' % ad2ip
-        fw_reload = 'firewall-cmd --reload'
-        multihost.client[0].run_command(fw_add, raiseonerr=True)
-        multihost.client[0].run_command(fw_reload, raiseonerr=True)
-        multihost.client[0].service_sssd('start')
-
-        cmd_check_ping = 'grep -ire ad_cldap_ping_send /var/log/sssd/sssd_%s.log | ' \
-                         'grep -ire \"Found 2 domain controllers in domain ' \
-                         'Default-First-Site-Name._sites.%s\"' % (domain, domain)
-        check_ping = multihost.client[0].run_command(cmd_check_ping, raiseonerr=False)
-        assert check_ping.returncode == 0
-        cmd_check_batch1 = 'grep -ire ad_cldap_ping_parallel_batch /var/log/sssd/sssd_%s.log | ' \
-                           'grep -ire \" %s\"' % (domain, ad1)
-        check_batch1 = multihost.client[0].run_command(cmd_check_batch1, raiseonerr=False)
-        cmd_check_batch2 = 'grep -ire ad_cldap_ping_parallel_batch /var/log/sssd/sssd_%s.log | ' \
-                           'grep -ire \" %s\"' % (domain, ad2)
-        check_batch2 = multihost.client[0].run_command(cmd_check_batch2, raiseonerr=False)
-        if check_batch1.returncode == 1 and check_batch2.returncode == 0:
-            assert True
-        else:
-            assert False
-        cmd_check_discovery = 'grep -ire ad_cldap_ping_domain_discovery_done /var/log/sssd/sssd_%s.log | ' \
-                              'grep -ire \"Found 2 domain controllers in domain ' \
-                              'Default-First-Site-Name._sites.%s\"' % (domain, domain)
-        check_discovery = multihost.client[0].run_command(cmd_check_discovery, raiseonerr=False)
-        assert check_discovery.returncode == 0
-
-        fw_stop = 'systemctl stop firewalld'
-        multihost.client[0].run_command(fw_stop, raiseonerr=True)
-        fw_remove = 'dnf remove -y firewalld'
-        multihost.client[0].run_command(fw_remove, raiseonerr=True)
-
-    @pytest.mark.adsites
-    def test_003_ad_startup_discovery_two_different_sites(self, multihost, adjoin, create_site):
-        """
-         @Title: IDM-SSSD-TC: ad_startup_discovery_two_different_sites
-        * grep sssd domain logs for cldap ping
-        * grep sssd logs for cldap ping parallel batch
-        * grep sssd logs for cldap ping domain discovery
-        """
-        adjoin(membersw='adcli')
-        client = sssdTools(multihost.client[0], multihost.ad[0])
-        domain = client.get_domain_section_name()
-        domain_section = 'domain/{}'.format(domain)
-        sssd_params = {'debug_level': '0xFFF0'}
-        client.sssd_conf(domain_section, sssd_params)
-
-        ad1 = multihost.ad[0].hostname
-        ad2 = multihost.ad[1].hostname
-        multihost.client[0].service_sssd('start')
-
-        cmd_check_ping = 'grep -ire ad_cldap_ping_send /var/log/sssd/sssd_%s.log | ' \
-                         'grep -ire \"Found 2 domain controllers in domain ' \
-                         'Default-First-Site-Name._sites.%s\"' % (domain, domain)
-        check_ping = multihost.client[0].run_command(cmd_check_ping, raiseonerr=False)
-        assert check_ping.returncode == 0
-        cmd_check_batch1 = 'grep -ire ad_cldap_ping_parallel_batch /var/log/sssd/sssd_%s.log | ' \
-                           'grep -ire \" %s\"' % (domain, ad1)
-        check_batch1 = multihost.client[0].run_command(cmd_check_batch1, raiseonerr=False)
-        cmd_check_batch2 = 'grep -ire ad_cldap_ping_parallel_batch /var/log/sssd/sssd_%s.log | ' \
-                           'grep -ire \" %s\"' % (domain, ad2)
-        check_batch2 = multihost.client[0].run_command(cmd_check_batch2, raiseonerr=False)
-        if check_batch1.returncode == 0 or check_batch2.returncode == 0:
-            assert True
-        else:
-            assert False
-        cmd_check_discovery = 'grep -ire ad_cldap_ping_domain_discovery_done /var/log/sssd/sssd_%s.log | ' \
-                              'grep -ire \"Found 2 domain controllers in domain ' \
-                              'Default-First-Site-Name._sites.%s\"' % (domain, domain)
-        check_discovery = multihost.client[0].run_command(cmd_check_discovery, raiseonerr=False)
-        assert check_discovery.returncode == 0
-
-    @pytest.mark.adsites
-    def test_004_ad_startup_discovery_two_different_sites_one_server_unreachable(self, multihost, adjoin, create_site):
-        """
-        @Title: IDM-SSSD-TC: ad_startup_discovery_two_different_sites_one_server_unreachable
-        * grep sssd domain logs for cldap ping
-        * grep sssd logs for cldap ping parallel batch
-        * grep sssd logs for cldap ping domain discovery
-        """
-        adjoin(membersw='adcli')
-        client = sssdTools(multihost.client[0], multihost.ad[0])
-        domain = client.get_domain_section_name()
-        domain_section = 'domain/{}'.format(domain)
-        sssd_params = {'debug_level': '0xFFF0'}
-        client.sssd_conf(domain_section, sssd_params)
-
-        ad1 = multihost.ad[0].hostname
-        ad2 = multihost.ad[1].hostname
-        ad2ip = multihost.ad[1].ip
-
-        cmd_dnf_firewalld = 'dnf install -y firewalld'
-        multihost.client[0].run_command(cmd_dnf_firewalld)
-        cmd_start_firewalld = 'systemctl start firewalld'
-        multihost.client[0].run_command(cmd_start_firewalld)
-        fw_add = 'firewall-cmd --permanent --direct --add-rule ipv4 ' \
-                 'filter OUTPUT 0 -d %s -j DROP' % ad2ip
-        fw_reload = 'firewall-cmd --reload'
-        multihost.client[0].run_command(fw_add, raiseonerr=True)
-        multihost.client[0].run_command(fw_reload, raiseonerr=True)
-
-        multihost.client[0].service_sssd('start')
-
-        cmd_check_ping = 'grep -ire ad_cldap_ping_send /var/log/sssd/sssd_%s.log | ' \
-                         'grep -ire \"Found 2 domain controllers in domain ' \
-                         'Default-First-Site-Name._sites.%s\"' % (domain, domain)
-        check_ping = multihost.client[0].run_command(cmd_check_ping, raiseonerr=False)
-        assert check_ping.returncode == 0
-        cmd_check_batch1 = 'grep -ire ad_cldap_ping_parallel_batch /var/log/sssd/sssd_%s.log | ' \
-                           'grep -ire \" %s\"' % (domain, ad1)
-        check_batch1 = multihost.client[0].run_command(cmd_check_batch1, raiseonerr=False)
-        cmd_check_batch2 = 'grep -ire ad_cldap_ping_parallel_batch /var/log/sssd/sssd_%s.log | ' \
-                           'grep -ire \" %s\"' % (domain, ad2)
-        check_batch2 = multihost.client[0].run_command(cmd_check_batch2, raiseonerr=False)
-        if check_batch1.returncode == 1 and check_batch2.returncode == 0:
-            assert True
-        else:
-            assert False
-        cmd_check_discovery = 'grep -ire ad_cldap_ping_domain_discovery_done /var/log/sssd/sssd_%s.log | ' \
-                              'grep -ire \"Found 2 domain controllers in domain ' \
-                              'Default-First-Site-Name._sites.%s\"' % (domain, domain)
-        check_discovery = multihost.client[0].run_command(cmd_check_discovery, raiseonerr=False)
-        assert check_discovery.returncode == 0
-
-        fw_stop = 'systemctl stop firewalld'
-        multihost.client[0].run_command(fw_stop, raiseonerr=True)
-        fw_remove = 'dnf remove -y firewalld'
-        multihost.client[0].run_command(fw_remove, raiseonerr=True)
\ No newline at end of file
diff --git a/src/tests/multihost/sssd/testlib/common/qe_class.py b/src/tests/multihost/sssd/testlib/common/qe_class.py
index 61df8eba3c..958aed3274 100644
--- a/src/tests/multihost/sssd/testlib/common/qe_class.py
+++ b/src/tests/multihost/sssd/testlib/common/qe_class.py
@@ -54,6 +54,13 @@ def get_logger(self, name):
             log.addHandler(handler)
         return log
 
+    def filter(self, descriptions):
+        """
+            Override default behavior to not filter hosts, so that it can work
+                with dynamic topologies.
+        """
+        return
+
 
 class QeBaseHost(pytest_multihost.host.BaseHost):
     """QeBaseHost subclass of multihost plugin BaseHost class."""
@@ -291,7 +298,6 @@ def __init__(self, config, name, domain_type):
 
     host_classes = {'default': QeHost, 'windows': QeWinHost}
 
-
 @pytest.fixture(scope="session", autouse=True)
 def session_multihost(request):
     """Multihost plugin fixture for session scope"""
_______________________________________________
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://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedorahosted.org/archives/list/sssd-devel@lists.fedorahosted.org
Do not reply to spam on the list, report it: 
https://pagure.io/fedora-infrastructure

Reply via email to