On 10/21/2015 06:48 PM, Nikolai Kondrashov wrote:
On 10/21/2015 07:28 PM, Michal Židek wrote:
Nick asked me to provide some explanation on the issue so I put it here, please correct me if I say something wrong.
The problem seems to be that the nss client code only checks validity of the memcache when the memcache context is created. Long living application only check the validity once and then use file descriptor to manipulate the cache until they are finished. Pytest is one such application. If we use the python pwd and grp wrappers, we initialize memcache context in Pytest. If we later remove the memcache files as part of teardown and create new memcache files for new tests, Pytest still uses the old file descriptors so calls to pwd and grp wrappers will work with the deleted memcache files.
Thanks, Michal!
However, how come there is a difference when the test has/doesn't have the LDAP enumeration before clearing the cache?
See the last message in "intg: Add more LDAP tests" thread.
Nick
P.S. I tried not removing the cache file and it doesn't seem to help much - now it passes sometimes, but still fails most of the time. You can try the test in the message mentioned above. This is the addition I made for keeping the cache:
diff --git a/src/tests/intg/ldap_test.py b/src/tests/intg/ldap_test.py index cdd8c8d..86d0854 100644 --- a/src/tests/intg/ldap_test.py +++ b/src/tests/intg/ldap_test.py @@ -30,6 +30,7 @@ import ldap import pytest import ds_openldap import ldap_ent +import re from util import *
LDAP_BASE_DN = "dc=example,dc=com" @@ -191,7 +192,8 @@ def cleanup_sssd_process(): pass subprocess.call(["sss_cache", "-E"]) for path in os.listdir(config.DB_PATH):
os.unlink(config.DB_PATH + "/" + path)
if re.match("^cache_.*\\.ldb$", path) is None:
os.unlink(config.DB_PATH + "/" + path) for path in os.listdir(config.MCACHE_PATH): os.unlink(config.MCACHE_PATH + "/" + path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This is the one :)
Hi Nick!
Not the sysdb cache. You need to keep the memcache files (in config.MCACHE_PATH). The sysdb cache can (and should be) deleted.
Michal