@@ -120,7 +120,7 @@ def test_netgroups__add_remove_netgroup_member(client: Client, provider: Generic
120120@pytest .mark .topology (KnownTopology .AD )
121121@pytest .mark .topology (KnownTopology .Samba )
122122@pytest .mark .preferred_topology (KnownTopology .LDAP )
123- def test_netgroup__user_attribute_membernisnetgroup_uses_group_dn (client : Client , provider : GenericProvider ):
123+ def test_netgroup__user_attribute_membernisnetgroup_uses_group_dn (client : Client , provider : AD | LDAP | Samba ):
124124 """
125125 :title: User's 'memberNisNetgroup' attribute values are the DN of the group
126126 :setup:
@@ -139,34 +139,29 @@ def test_netgroup__user_attribute_membernisnetgroup_uses_group_dn(client: Client
139139 3. Members from group is now part of "nested_group"
140140 :customerscenario: False
141141 """
142- if not isinstance (provider , (LDAP , Samba , AD )):
143- pytest .skip ("IPA does not support domain in netgroups" )
144-
145- domain = provider .domain
146-
147142 for id in [1 , 2 ]:
148143 provider .user (f"ng{ id } " ).add ()
149144
150145 netgroup_group = provider .netgroup ("group" ).add ()
151- netgroup_group .add_member (host = "testhost1" , user = "ng1" , domain = domain )
146+ netgroup_group .add_member (host = "testhost1" , user = "ng1" , domain = "ldap.test" )
152147
153148 netgroup_nested = provider .netgroup ("nested_group" ).add ()
154- netgroup_nested .add_member (host = "testhost2" , user = "ng2" , domain = domain )
149+ netgroup_nested .add_member (host = "testhost2" , user = "ng2" , domain = "ldap.test" )
155150 netgroup_nested .add_member (ng = "group" )
156151 client .sssd .start ()
157152
158153 result = client .tools .getent .netgroup ("nested_group" )
159154 assert result is not None
160- assert f "(testhost2, ng2, { domain } )" in result .members
161- assert f "(testhost1, ng1, { domain } )" in result .members
155+ assert "(testhost2, ng2, ldap.test )" in result .members
156+ assert "(testhost1, ng1, ldap.test )" in result .members
162157
163158
164159@pytest .mark .importance ("low" )
165160@pytest .mark .topology (KnownTopology .LDAP )
166161@pytest .mark .topology (KnownTopology .AD )
167162@pytest .mark .topology (KnownTopology .Samba )
168163@pytest .mark .preferred_topology (KnownTopology .LDAP )
169- def test_netgroup__lookup_nested_groups (client : Client , provider : GenericProvider ):
164+ def test_netgroup__lookup_nested_groups (client : Client , provider : AD | LDAP | Samba ):
170165 """
171166 :title: Looking up nested netgroups
172167 :setup:
@@ -181,50 +176,39 @@ def test_netgroup__lookup_nested_groups(client: Client, provider: GenericProvide
181176 1. Netgroup is found and both netgroups and users are members
182177 :customerscenario: False
183178 """
184- if not isinstance (provider , (LDAP , Samba , AD )):
185- pytest .skip ("IPA does not support domain in netgroups" )
186-
187- domain = provider .domain
188-
189179 for id in [1 , 2 , 3 ]:
190180 provider .user (f"ng{ id } " ).add ()
191181
192182 netgroup = provider .netgroup ("group" ).add ()
193- netgroup .add_member (host = "testhost1" , user = "ng1" , domain = domain )
183+ netgroup .add_member (host = "testhost1" , user = "ng1" , domain = "ldap.test" )
194184
195185 nested_netgroup = provider .netgroup ("nested_netgroup" ).add ()
196- nested_netgroup .add_member (ng = netgroup )
197- nested_netgroup .add_member (host = "testhost2" , user = "ng2" , domain = domain )
186+ nested_netgroup .add_member (ng = "group" )
187+ nested_netgroup .add_member (host = "testhost2" , user = "ng2" , domain = "ldap.test" )
198188 nested_netgroup .add_member (user = "ng3" )
199189
200- netgroup .add_member (ng = nested_netgroup )
190+ netgroup .add_member (ng = " nested_netgroup" )
201191
202192 client .sssd .start ()
203193
204194 result = client .tools .getent .netgroup ("nested_netgroup" )
205195 assert result is not None
206- assert f "(testhost1,ng1,{ domain } )" in result .members
196+ assert "(testhost1,ng1,ldap.test )" in result .members
207197 assert "(-,ng3,)" in result .members
208- assert f "(testhost2,ng2,{ domain } )" in result .members
198+ assert "(testhost2,ng2,ldap.test )" in result .members
209199
210200
211201@pytest .mark .parametrize (
212- "user, use_domain, expected_suffix" ,
213- [
214- pytest .param ("host" , True , "(host,-,host.{domain})" ,
215- id = "host-host.domain-(host,-,host.domain)" ),
216- pytest .param ("ng3" , False , "(-,ng3,)" ,
217- id = "ng3--(-,ng3,)" ),
218- ],
202+ "user, domain, expected" ,
203+ [("host" , "host.ldap.test" , "(host,-,host.ldap.test)" ), ("ng3" , "" , "(-,ng3,)" )],
219204)
220205@pytest .mark .importance ("low" )
221206@pytest .mark .topology (KnownTopology .LDAP )
222207@pytest .mark .topology (KnownTopology .AD )
223208@pytest .mark .topology (KnownTopology .Samba )
224209@pytest .mark .preferred_topology (KnownTopology .LDAP )
225210def test_netgroup__lookup_nested_groups_with_host_and_domain_values_present (
226- client : Client , provider : GenericProvider ,
227- user : str , use_domain : bool , expected_suffix : str
211+ client : Client , provider : AD | LDAP | Samba , user : str , domain : str , expected : str
228212):
229213 """
230214 :title: Netgroup contains a member that has a host and domain specified
@@ -238,22 +222,16 @@ def test_netgroup__lookup_nested_groups_with_host_and_domain_values_present(
238222 1. Member is present in the "nested_group"
239223 :customerscenario: False
240224 """
241- if not isinstance (provider , (LDAP , Samba , AD )):
242- pytest .skip ("IPA does not support domain in netgroups" )
243-
244- domain = provider .domain
245- expected = expected_suffix .format (domain = domain )
246-
247225 for id in [1 , 2 ]:
248226 provider .user (f"ng{ id } " ).add ()
249227
250228 netgroup_group = provider .netgroup ("group" ).add ()
251- netgroup_group .add_member (host = "testhost1" , user = "ng1" , domain = domain )
229+ netgroup_group .add_member (host = "testhost1" , user = "ng1" , domain = "ldap.test" )
252230
253231 netgroup_nested = provider .netgroup ("nested_group" ).add ()
254- netgroup_nested .add_member (host = "testhost2" , user = "ng2" , domain = domain )
255- if use_domain :
256- netgroup_nested .add_member (host = user , domain = f"host. { domain } " )
232+ netgroup_nested .add_member (host = "testhost2" , user = "ng2" , domain = "ldap.test" )
233+ if domain == "host.ldap.test" :
234+ netgroup_nested .add_member (host = user , domain = domain )
257235 else :
258236 netgroup_nested .add_member (user = user )
259237
@@ -268,7 +246,7 @@ def test_netgroup__lookup_nested_groups_with_host_and_domain_values_present(
268246@pytest .mark .ticket (bz = 802207 )
269247@pytest .mark .topology (KnownTopologyGroup .AnyProvider )
270248@pytest .mark .preferred_topology (KnownTopology .LDAP )
271- def test_netgroup__fully_qualified_names (client : Client , provider : GenericProvider ):
249+ def test_netgroup__fully_qualified_names (client : Client , provider : AD | LDAP | Samba ):
272250 """
273251 :title: Netgroups with fully qualified names resolves and contains the members
274252 :setup:
@@ -282,8 +260,8 @@ def test_netgroup__fully_qualified_names(client: Client, provider: GenericProvid
282260 :customerscenario: True
283261 """
284262 client .sssd .dom ("test" )["use_fully_qualified_names" ] = "true"
285- user = provider .user ("user-1" ).add ()
286- provider .netgroup ("ng-1" ).add ().add_member (user = user )
263+ provider .user ("user-1" ).add ()
264+ provider .netgroup ("ng-1" ).add ().add_member (user = " user-1" )
287265 client .sssd .start ()
288266
289267 result = client .tools .getent .netgroup ("ng-1" )
@@ -298,7 +276,7 @@ def test_netgroup__fully_qualified_names(client: Client, provider: GenericProvid
298276@pytest .mark .topology (KnownTopology .AD )
299277@pytest .mark .topology (KnownTopology .Samba )
300278@pytest .mark .preferred_topology (KnownTopology .LDAP )
301- def test_netgroup__uid_gt_2147483647 (client : Client , provider : GenericProvider ):
279+ def test_netgroup__uid_gt_2147483647 (client : Client , provider : AD | LDAP | Samba ):
302280 """
303281 :title: SSSD resolves users and groups with id greater than 2147483647 (Integer.MAX_VALUE)
304282 :setup:
@@ -310,9 +288,6 @@ def test_netgroup__uid_gt_2147483647(client: Client, provider: GenericProvider):
310288 1. Users and groups are resolved
311289 :customerscenario: True
312290 """
313- if not isinstance (provider , (LDAP , Samba , AD )):
314- pytest .skip ("For ipa, 'uid': can be at most 2147483647" )
315-
316291 client .sssd .start ()
317292
318293 for name , uid in [("bigusera" , 2147483646 ), ("biguserb" , 2147483647 ), ("biguserc" , 2147483648 )]:
@@ -325,177 +300,10 @@ def test_netgroup__uid_gt_2147483647(client: Client, provider: GenericProvider):
325300 provider .group (name ).add (gid = uid )
326301
327302 for username in ["bigusera" , "biguserb" , "biguserc" ]:
328- result = client .tools .getent .passwd (username )
329- assert result is not None , f"getent passwd for user '{ username } ' is empty!"
330- assert result .name == username , f"User name '{ username } ' did not match result ' { result . name } ' !"
303+ passwd_result = client .tools .getent .passwd (username )
304+ assert passwd_result is not None , f"getent passwd for user '{ username } ' is empty!"
305+ assert passwd_result .name == username , f"User name '{ username } ' did not match!"
331306 for grpname in ["biggroup1" , "biggroup2" , "biggroup3" ]:
332- result = client .tools .getent .group (grpname )
333- assert result is not None , f"getent group for group '{ grpname } ' is empty!"
334- assert result .name == grpname , f"Group name '{ grpname } ' did not match result '{ result .name } '!"
335-
336-
337- @pytest .mark .importance ("high" )
338- @pytest .mark .topology (KnownTopology .LDAP )
339- @pytest .mark .topology (KnownTopology .AD )
340- @pytest .mark .topology (KnownTopology .Samba )
341- @pytest .mark .preferred_topology (KnownTopology .LDAP )
342- def test_netgroup__incomplete_triples (client : Client , provider : GenericProvider ):
343- """
344- :title: Netgroups with incomplete triples
345- :description: Netgroups with incomplete triples can be created and used.
346- :setup:
347- 1. Create an empty netgroup
348- 2. Create a netgroup with only host
349- 3. Create a netgroup with only user
350- 4. Create a netgroup with only domain
351- 5. Create a netgroup with missing host
352- 6. Create a netgroup with missing user
353- 7. Start SSSD
354- :steps:
355- 1. Show the netgroups
356- :expectedresults:
357- 1. Netgroups are shown and match the expectations
358- :customerscenario: False
359- """
360- if not isinstance (provider , (LDAP , Samba , AD )):
361- pytest .skip ("IPA does not support domain in netgroups" )
362-
363- domain = provider .domain
364-
365- # (setup_params, expected_members)
366- cases = {
367- "ng-empty" : ({}, set ()),
368- "ng-only-host" : ({"host" : "testhost" }, {"(testhost,-,)" }),
369- "ng-only-user" : ({"user" : "testuser" }, {"(-,testuser,)" }),
370- "ng-only-domain" : ({"domain" : domain }, {f"(-,-,{ domain } )" }),
371- "ng-missing-host" : (
372- {"user" : "testuser" , "domain" : domain },
373- {f"(-,testuser,{ domain } )" },
374- ),
375- "ng-missing-user" : (
376- {"host" : "testhost" , "domain" : domain },
377- {f"(testhost,-,{ domain } )" },
378- ),
379- "ng-missing-domain" : (
380- {"host" : "testhost" , "user" : "testuser" },
381- {"(testhost,testuser,)" },
382- ),
383- }
384-
385- for name , (params , _ ) in cases .items ():
386- ng = provider .netgroup (name ).add ()
387- if params :
388- ng .add_member (** params )
389-
390- client .sssd .start ()
391-
392- for name , (_ , expected ) in cases .items ():
393- result = client .tools .getent .netgroup (name )
394- assert result is not None , f"Netgroup '{ name } ' not found!"
395- assert result .name == name
396- actual = {str (m ) for m in result .members }
397- assert actual == expected , f"Netgroup '{ name } ': expected { expected } , got { actual } "
398-
399-
400- @pytest .mark .importance ("high" )
401- @pytest .mark .topology (KnownTopology .LDAP )
402- @pytest .mark .topology (KnownTopology .AD )
403- @pytest .mark .topology (KnownTopology .Samba )
404- @pytest .mark .preferred_topology (KnownTopology .LDAP )
405- def test_netgroups__complex_hierarchy (client : Client , provider : GenericProvider ):
406- """
407- :title: Complex netgroup hierarchy
408- :description: Netgroups with multiple levels of nesting work correctly
409- :setup:
410- 1. Create multiple netgroups with various combinations of triples
411- and nested members
412- 2. Create complex hierarchy with mixed triples and netgroup members
413- 3. Start SSSD
414- :steps:
415- 1. Query each netgroup in the hierarchy
416- :expectedresults:
417- 1. Each netgroup returns correct combination of direct triples
418- and inherited members
419- :customerscenario: False
420- """
421- # Hierarchy:
422- # ng-top -> ng-mid1 -> ng-base1
423- # -> ng-mid2 -> ng-base2
424- # -> ng-base3
425-
426- if not isinstance (provider , (LDAP , Samba , AD )):
427- pytest .skip ("IPA does not support domain in netgroups" )
428-
429- domain = provider .domain
430-
431- # Level 1: Base netgroups with only triples (no nested members)
432- ng_base1 = provider .netgroup ("ng-base1" ).add ()
433- ng_base1 .add_member (host = "host1" , user = "user1" , domain = domain )
434-
435- ng_base2 = provider .netgroup ("ng-base2" ).add ()
436- ng_base2 .add_member (host = "host2" , user = "user2" , domain = domain )
437-
438- ng_base3 = provider .netgroup ("ng-base3" ).add ()
439- ng_base3 .add_member (user = "user3" )
440-
441- # Level 2: Mid-level netgroups with both triples and nested members
442- ng_mid1 = provider .netgroup ("ng-mid1" ).add ()
443- ng_mid1 .add_member (host = "host4" , user = "user4" , domain = domain )
444- ng_mid1 .add_member (ng = ng_base1 )
445-
446- ng_mid2 = provider .netgroup ("ng-mid2" ).add ()
447- ng_mid2 .add_member (user = "user5" )
448- ng_mid2 .add_member (ng = ng_base2 )
449- ng_mid2 .add_member (ng = ng_base3 )
450-
451- # Level 3: Top-level netgroup containing mid-level netgroups
452- ng_top = provider .netgroup ("ng-top" ).add ()
453- ng_top .add_member (host = "host6" , user = "user6" , domain = domain )
454- ng_top .add_member (ng = ng_mid1 )
455- ng_top .add_member (ng = ng_mid2 )
456-
457- client .sssd .start ()
458-
459- # Verify base netgroups (Level 1)
460- base_expectations = {
461- "ng-base1" : {f"(host1,user1,{ domain } )" },
462- "ng-base2" : {f"(host2,user2,{ domain } )" },
463- "ng-base3" : {"(-,user3,)" },
464- }
465- for name , expected in base_expectations .items ():
466- result = client .tools .getent .netgroup (name )
467- assert result is not None , f"Netgroup '{ name } ' not found!"
468- actual = {str (m ) for m in result .members }
469- assert actual == expected , f"Netgroup '{ name } ' members mismatch. " f"Expected: { expected } , Got: { actual } "
470-
471- # Verify mid-level netgroups (Level 2)
472- mid_expectations = {
473- "ng-mid1" : {
474- f"(host4,user4,{ domain } )" ,
475- f"(host1,user1,{ domain } )" ,
476- },
477- "ng-mid2" : {
478- "(-,user5,)" ,
479- f"(host2,user2,{ domain } )" ,
480- "(-,user3,)" ,
481- },
482- }
483- for name , expected in mid_expectations .items ():
484- result = client .tools .getent .netgroup (name )
485- assert result is not None , f"Netgroup '{ name } ' not found!"
486- actual = {str (m ) for m in result .members }
487- assert actual == expected , f"Netgroup '{ name } ' members mismatch. " f"Expected: { expected } , Got: { actual } "
488-
489- # Verify top-level netgroup (Level 3)
490- result = client .tools .getent .netgroup ("ng-top" )
491- assert result is not None , "Netgroup 'ng-top' not found!"
492- expected = {
493- f"(host6,user6,{ domain } )" ,
494- f"(host4,user4,{ domain } )" ,
495- f"(host1,user1,{ domain } )" ,
496- "(-,user5,)" ,
497- f"(host2,user2,{ domain } )" ,
498- "(-,user3,)" ,
499- }
500- actual = {str (m ) for m in result .members }
501- assert actual == expected , f"Netgroup 'ng-top' members mismatch. " f"Expected: { expected } , Got: { actual } "
307+ group_result = client .tools .getent .group (grpname )
308+ assert group_result is not None , f"getent group for group '{ grpname } ' is empty!"
309+ assert group_result .name == grpname , f"Group name '{ grpname } ' did not match!"
0 commit comments