ehlo,
it is a first version of integration test for memory cache. The main purpose of this mail is to have some comments to the first version. cwrap doesn't support properly initgroups therefore I used a ctype module for calling initgroups from libnsss_sss.so.
I'm aware of some issies in this patch: wildcard import, function for calling sssd initgroups can be moved to separate module ...
You might need a patch from thread "[SSSD] [PATCH] intg: Invalidate memory cache before removing files" to have all gree tests.
I'm also attaching a two tests which fails. It is a known bugs with memory cache. It just for showing that attached patch is really testing sometning :-)
Please provide any comments which can improve this tests.
LS
On Fri, Jul 24, 2015 at 03:35:22PM +0200, Lukas Slebodnik wrote:
ehlo,
it is a first version of integration test for memory cache. The main purpose of this mail is to have some comments to the first version. cwrap doesn't support properly initgroups therefore I used a ctype module for calling initgroups from libnsss_sss.so.
I don't mind calling initgroups from libnsss_sss.so but I think initgroups() support in cwrap is not strictly needed here. Since the initgroups() call does not return any groups you would need a combination of initgroups() and getgroups() in the tests.
getgrouplist() will return directly the list of groups for a given user and is already supported in cmocka. Unfortunately it looks like the corresponding Python inferface os.getgrouplist is only added in 3.3.
bye, Sumit
I'm aware of some issies in this patch: wildcard import, function for calling sssd initgroups can be moved to separate module ...
You might need a patch from thread "[SSSD] [PATCH] intg: Invalidate memory cache before removing files" to have all gree tests.
I'm also attaching a two tests which fails. It is a known bugs with memory cache. It just for showing that attached patch is really testing sometning :-)
Please provide any comments which can improve this tests.
LS
On (24/07/15 16:19), Sumit Bose wrote:
On Fri, Jul 24, 2015 at 03:35:22PM +0200, Lukas Slebodnik wrote:
ehlo,
it is a first version of integration test for memory cache. The main purpose of this mail is to have some comments to the first version. cwrap doesn't support properly initgroups therefore I used a ctype module for calling initgroups from libnsss_sss.so.
I don't mind calling initgroups from libnsss_sss.so but I think initgroups() support in cwrap is not strictly needed here. Since the initgroups() call does not return any groups you would need a combination of initgroups() and getgroups() in the tests.
getgroups() returns the supplementary group IDs of the calling process So I would need to fake current user to tested user.
And there was another issue initgroups is not tested by cwrap and result of this it does not work. Initially I wanted to fix it. So fix some bugs in cwrap which caused crash in sssd plugin but I would need to also update getgroups or getgrouplist in cwrap and then wait until it will be pushed in in upstream and downstream.
getgrouplist() will return directly the list of groups for a given user
Yes it will return the list of groups for a given user iff enumeration is enabled and enumeration does not work with stopped sssd.
There is an assumption that memory cache will return values even though sssd is not running. I didn't want to run strace and test whether there was a request toresponder.
and is already supported in cmocka. Unfortunately it looks like the corresponding Python inferface os.getgrouplist is only added in 3.3.
os.getgrouplist is almost the same as pysss.getgrouplist. I tried it but it does not work. @see explanation above.
It's true than utility "id" call getgrouplist but it also call initroups from all plugins. And this is not implemented in cwrap yet.
#0 _nss_sss_initgroups_dyn (user=user@entry=0x60b600 "nobody", group=group@entry=99, start=start@entry=0x7fffffffdc58, size=size@entry=0x7fffffffdca0, groups=groups@entry=0x7fffffffdca8, limit=limit@entry=-1, errnop=0x7ffff7fd86b8) at src/sss_client/nss_group.c:278 #1 0x00007ffff78bd9aa in internal_getgrouplist ( user=user@entry=0x60b600 "nobody", group=group@entry=99, size=size@entry=0x7fffffffdca0, groupsp=groupsp@entry=0x7fffffffdca8, limit=limit@entry=-1) at initgroups.c:112 #2 0x00007ffff78bdbee in getgrouplist (user=user@entry=0x60b600 "nobody", group=group@entry=99, groups=groups@entry=0x60cb80, ngroups=ngroups@entry=0x7fffffffdcf4) at initgroups.c:170 #3 0x0000000000405b58 in mgetgroups ( username=username@entry=0x60b600 "nobody", gid=99, groups=groups@entry=0x7fffffffdd60) at lib/mgetgroups.c:90 #4 0x0000000000405016 in xgetgroups ( username=username@entry=0x60b600 "nobody", gid=<optimized out>, groups=groups@entry=0x7fffffffdd60) at lib/xgetgroups.c:33 #5 0x000000000040232b in print_full_info (username=0x60b600 "nobody") at src/id.c:408 #6 main (argc=<optimized out>, argv=<optimized out>) at src/id.c:312
As you can see "id" calls getgrouplist from libc which calls internal_getgrouplist and then initgroups from plugins (_nss_sss_initgroups_dyn)
So the fastest way how to have test initgroups memory cache was to directly call _nss_sss_initgroups_dyn.
I'm not against fixing cwrap but it would need to be tested with glibc, bsd libc ... Then we can switch internal wrapper of _nss_sss_initgroups_dyn to cwrap implementation.
LS
On (24/07/15 16:48), Lukas Slebodnik wrote:
On (24/07/15 16:19), Sumit Bose wrote:
On Fri, Jul 24, 2015 at 03:35:22PM +0200, Lukas Slebodnik wrote:
ehlo,
it is a first version of integration test for memory cache. The main purpose of this mail is to have some comments to the first version. cwrap doesn't support properly initgroups therefore I used a ctype module for calling initgroups from libnsss_sss.so.
I don't mind calling initgroups from libnsss_sss.so but I think initgroups() support in cwrap is not strictly needed here. Since the initgroups() call does not return any groups you would need a combination of initgroups() and getgroups() in the tests.
getgroups() returns the supplementary group IDs of the calling process So I would need to fake current user to tested user.
And there was another issue initgroups is not tested by cwrap and result of this it does not work. Initially I wanted to fix it. So fix some bugs in cwrap which caused crash in sssd plugin but I would need to also update getgroups or getgrouplist in cwrap and then wait until it will be pushed in in upstream and downstream.
getgrouplist() will return directly the list of groups for a given user
Yes it will return the list of groups for a given user iff enumeration is enabled and enumeration does not work with stopped sssd.
There is an assumption that memory cache will return values even though sssd is not running. I didn't want to run strace and test whether there was a request toresponder.
and is already supported in cmocka. Unfortunately it looks like the corresponding Python inferface os.getgrouplist is only added in 3.3.
os.getgrouplist is almost the same as pysss.getgrouplist. I tried it but it does not work. @see explanation above.
It's true than utility "id" call getgrouplist but it also call initroups from all plugins. And this is not implemented in cwrap yet.
#0 _nss_sss_initgroups_dyn (user=user@entry=0x60b600 "nobody", group=group@entry=99, start=start@entry=0x7fffffffdc58, size=size@entry=0x7fffffffdca0, groups=groups@entry=0x7fffffffdca8, limit=limit@entry=-1, errnop=0x7ffff7fd86b8) at src/sss_client/nss_group.c:278 #1 0x00007ffff78bd9aa in internal_getgrouplist ( user=user@entry=0x60b600 "nobody", group=group@entry=99, size=size@entry=0x7fffffffdca0, groupsp=groupsp@entry=0x7fffffffdca8, limit=limit@entry=-1) at initgroups.c:112 #2 0x00007ffff78bdbee in getgrouplist (user=user@entry=0x60b600 "nobody", group=group@entry=99, groups=groups@entry=0x60cb80, ngroups=ngroups@entry=0x7fffffffdcf4) at initgroups.c:170 #3 0x0000000000405b58 in mgetgroups ( username=username@entry=0x60b600 "nobody", gid=99, groups=groups@entry=0x7fffffffdd60) at lib/mgetgroups.c:90 #4 0x0000000000405016 in xgetgroups ( username=username@entry=0x60b600 "nobody", gid=<optimized out>, groups=groups@entry=0x7fffffffdd60) at lib/xgetgroups.c:33 #5 0x000000000040232b in print_full_info (username=0x60b600 "nobody") at src/id.c:408 #6 main (argc=<optimized out>, argv=<optimized out>) at src/id.c:312
As you can see "id" calls getgrouplist from libc which calls internal_getgrouplist and then initgroups from plugins (_nss_sss_initgroups_dyn)
So the fastest way how to have test initgroups memory cache was to directly call _nss_sss_initgroups_dyn.
I'm not against fixing cwrap but it would need to be tested with glibc, bsd libc ... Then we can switch internal wrapper of _nss_sss_initgroups_dyn to cwrap implementation.
Patch from this thread is part of another patch set https://lists.fedorahosted.org/pipermail/sssd-devel/2015-July/024262.html
LS
sssd-devel@lists.fedorahosted.org