From a2217b6a48b7e0946634282cf1cf7e21d171d343 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <pbrezina@redhat.com>
Date: Tue, 26 Nov 2019 12:26:32 +0100
Subject: [PATCH 1/3] tests: fix race confition in files provider tests

Lets give files provider more time to load changes from files to avoid
race condition failures.

One second delay was not enough for the files provider to comprehend
changes in files. We saw an error due to this low delay quite often
in slower environments such as pull request CI.

This is still just some random number because we do not have any tool
to check if the files provider has finished refreshing the cache. This
value should be sufficient, if not then some sort of polling or signal
needs to be implemented.
---
 src/tests/intg/test_files_provider.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/tests/intg/test_files_provider.py b/src/tests/intg/test_files_provider.py
index 9f3aad9949..3a54c57b59 100644
--- a/src/tests/intg/test_files_provider.py
+++ b/src/tests/intg/test_files_provider.py
@@ -451,7 +451,7 @@ def user_generator(seqnum):
                 shell='/bin/bash')
 
 
-def check_user(exp_user, delay=1.0):
+def check_user(exp_user, delay=3.0):
     if delay > 0:
         time.sleep(delay)
 
@@ -466,7 +466,7 @@ def group_generator(seqnum):
                 mem=[])
 
 
-def check_group(exp_group, delay=1.0):
+def check_group(exp_group, delay=3.0):
     if delay > 0:
         time.sleep(delay)
 
@@ -475,7 +475,7 @@ def check_group(exp_group, delay=1.0):
     assert found_group == exp_group
 
 
-def check_group_by_gid(exp_group, delay=1.0):
+def check_group_by_gid(exp_group, delay=3.0):
     if delay > 0:
         time.sleep(delay)
 
@@ -779,7 +779,7 @@ def test_add_remove_add_file_group(setup_gr_with_canary, files_domain_only):
     check_group(GROUP1)
 
     setup_gr_with_canary.groupdel(GROUP1["name"])
-    time.sleep(1)
+    time.sleep(3)
     res, group = call_sssd_getgrnam(GROUP1["name"])
     assert res == NssReturnCode.NOTFOUND
 

From a704cada64218c34a0b81943986182ed26cdb674 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <pbrezina@redhat.com>
Date: Tue, 26 Nov 2019 12:42:27 +0100
Subject: [PATCH 2/3] tests: fix race condition in enumeration tests

This change is relevant to Nyquist frequency. To ensure that enumeration has been
run we need to wait at least twice the enumeration timeout. In other words, we need
to make sure enumeration is run at least twice the frequency of our assertions to
ensure that it has been run at least once.

Resolves:
https://pagure.io/SSSD/sssd/issue/3463
---
 src/tests/intg/test_enumeration.py | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/tests/intg/test_enumeration.py b/src/tests/intg/test_enumeration.py
index c105c6df02..a28b8b915b 100644
--- a/src/tests/intg/test_enumeration.py
+++ b/src/tests/intg/test_enumeration.py
@@ -33,7 +33,11 @@
 from util import *
 
 LDAP_BASE_DN = "dc=example,dc=com"
-INTERACTIVE_TIMEOUT = 4
+
+# Enumeration needs to be run at least twice the frequency of our assertions to
+# ensure that it has been run at least once. (Nyquist frequency)
+ENUMERATION_TIMEOUT = 4
+INTERACTIVE_TIMEOUT = ENUMERATION_TIMEOUT*2
 
 
 @pytest.fixture(scope="module")
@@ -151,7 +155,7 @@ def format_interactive_conf(ldap_conn, schema):
             ldap_enumeration_refresh_timeout    = {0}
             ldap_purge_cache_timeout            = 1
             entry_cache_timeout                 = {0}
-        """).format(INTERACTIVE_TIMEOUT)
+        """).format(ENUMERATION_TIMEOUT)
 
 
 def create_conf_file(contents):

From fde3134602e207b61a4ea9b0e66aad46f02e59d6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <pbrezina@redhat.com>
Date: Thu, 28 Nov 2019 11:40:21 +0100
Subject: [PATCH 3/3] disable memory cache test

---
 src/tests/intg/test_files_provider.py | 34 ++++++++++++++++++++-------
 1 file changed, 26 insertions(+), 8 deletions(-)

diff --git a/src/tests/intg/test_files_provider.py b/src/tests/intg/test_files_provider.py
index 3a54c57b59..ef58fe3d1c 100644
--- a/src/tests/intg/test_files_provider.py
+++ b/src/tests/intg/test_files_provider.py
@@ -147,6 +147,9 @@ def files_domain_only(request):
         domains             = files
         services            = nss
 
+        [nss]
+        memcache_timeout = 0
+
         [domain/files]
         id_provider = files
     """).format(**locals())
@@ -175,6 +178,7 @@ def files_multiple_sources(request):
 
         [nss]
         debug_level = 10
+        memcache_timeout = 0
 
         [domain/files]
         id_provider = files
@@ -209,6 +213,7 @@ def files_multiple_sources_nocreate(request):
 
         [nss]
         debug_level = 10
+        memcache_timeout = 0
 
         [domain/files]
         id_provider = files
@@ -228,6 +233,9 @@ def proxy_to_files_domain_only(request):
         domains             = proxy, local
         services            = nss
 
+        [nss]
+        memcache_timeout = 0
+
         [domain/local]
         id_provider = local
 
@@ -247,6 +255,9 @@ def no_sssd_domain(request):
         [sssd]
         services            = nss
         enable_files_domain = true
+
+        [nss]
+        memcache_timeout = 0
     """).format(**locals())
     create_conf_fixture(request, conf)
     create_sssd_fixture(request)
@@ -261,6 +272,9 @@ def no_files_domain(request):
         services            = nss
         enable_files_domain = true
 
+        [nss]
+        memcache_timeout = 0
+
         [domain/local]
         id_provider = local
 
@@ -280,6 +294,9 @@ def disabled_files_domain(request):
         services            = nss
         enable_files_domain = false
 
+        [nss]
+        memcache_timeout = 0
+
         [domain/local]
         id_provider = local
     """).format(**locals())
@@ -302,6 +319,9 @@ def domain_resolution_order(request):
         services            = nss
         domain_resolution_order = foo
 
+        [nss]
+        memcache_timeout = 0
+
         [domain/files]
         id_provider = files
     """).format(**locals())
@@ -318,6 +338,9 @@ def default_domain_suffix(request):
         services            = nss
         default_domain_suffix = foo
 
+        [nss]
+        memcache_timeout = 0
+
         [domain/files]
         id_provider = files
     """).format(**locals())
@@ -341,6 +364,7 @@ def override_homedir_and_shell(request):
         [nss]
         override_homedir = /test/foo
         override_shell = /bin/foo
+        memcache_timeout = 0
     """).format(**locals())
     create_conf_fixture(request, conf)
     create_sssd_fixture(request)
@@ -451,10 +475,7 @@ def user_generator(seqnum):
                 shell='/bin/bash')
 
 
-def check_user(exp_user, delay=3.0):
-    if delay > 0:
-        time.sleep(delay)
-
+def check_user(exp_user):
     res, found_user = sssd_getpwnam_sync(exp_user["name"])
     assert res == NssReturnCode.SUCCESS
     assert found_user == exp_user
@@ -466,10 +487,7 @@ def group_generator(seqnum):
                 mem=[])
 
 
-def check_group(exp_group, delay=3.0):
-    if delay > 0:
-        time.sleep(delay)
-
+def check_group(exp_group):
     res, found_group = sssd_getgrnam_sync(exp_group["name"])
     assert res == NssReturnCode.SUCCESS
     assert found_group == exp_group
