@@ -69,3 +69,63 @@ def test_groupmod__u_option_empty_string_clears_members(shadow: Shadow):
6969 assert gshadow_entry is not None , "Group should be found"
7070 assert gshadow_entry .name == "tgroup" , "Incorrect groupname"
7171 assert not gshadow_entry .members , "Group should have no members"
72+
73+
74+ @pytest .mark .topology (KnownTopology .Shadow )
75+ def test_groupmod__u_option_with_user_list (shadow : Shadow ):
76+ """
77+ :title: Test groupmod -U option with user list to set group membership
78+ :setup:
79+ 1. Create three test users
80+ 2. Create test group
81+ :steps:
82+ 1. Set group membership to all three users using groupmod -U
83+ 2. Verify all three users are members in group and gshadow entry
84+ 3. Modify group membership to only two users using groupmod -U
85+ 4. Verify updated membership in group and gshadow entries
86+ :expectedresults:
87+ 1. Initial groupmod -U command sets membership correctly for all three users
88+ 2. group and gshadow entries show correct membership
89+ 3. Second groupmod -U command updates membership correctly
90+ 4. Updated group and gshadow entries reflect new membership
91+ :customerscenario: False
92+ """
93+ shadow .useradd ("tuser1" )
94+ shadow .useradd ("tuser2" )
95+ shadow .useradd ("tuser3" )
96+ shadow .groupadd ("tgroup" )
97+ shadow .groupmod ("-U tuser1,tuser2,tuser3 tgroup" )
98+
99+ group_entry = shadow .tools .getent .group ("tgroup" )
100+ assert group_entry is not None , "Group should be found"
101+ assert group_entry .name == "tgroup" , "Incorrect groupname"
102+ assert len (group_entry .members ) == 3 , f"Group should have 3 members, but has { len (group_entry .members )} "
103+ assert "tuser1" in group_entry .members , "tuser1 should be a member of tgroup"
104+ assert "tuser2" in group_entry .members , "tuser2 should be a member of tgroup"
105+ assert "tuser3" in group_entry .members , "tuser3 should be a member of tgroup"
106+
107+ if shadow .host .features ["gshadow" ]:
108+ gshadow_entry = shadow .tools .getent .gshadow ("tgroup" )
109+ assert gshadow_entry is not None , "Group should be found"
110+ assert gshadow_entry .name == "tgroup" , "Incorrect groupname"
111+ assert len (gshadow_entry .members ) == 3 , f"Group should have 3 members, but has { len (gshadow_entry .members )} "
112+ assert "tuser1" in gshadow_entry .members , "tuser1 should be a member of tgroup"
113+ assert "tuser2" in gshadow_entry .members , "tuser2 should be a member of tgroup"
114+ assert "tuser3" in gshadow_entry .members , "tuser3 should be a member of tgroup"
115+
116+ shadow .groupmod ("-U tuser1,tuser2 tgroup" )
117+
118+ group_entry = shadow .tools .getent .group ("tgroup" )
119+ assert group_entry is not None , "Group should be found"
120+ assert group_entry .name == "tgroup" , "Incorrect groupname"
121+ assert len (group_entry .members ) == 2 , f"Group should have 2 members, but has { len (group_entry .members )} "
122+ assert "tuser1" in group_entry .members , "tuser1 should be a member of tgroup"
123+ assert "tuser2" in group_entry .members , "tuser2 should be a member of tgroup"
124+
125+ if shadow .host .features ["gshadow" ]:
126+ gshadow_entry = shadow .tools .getent .gshadow ("tgroup" )
127+ assert gshadow_entry is not None , "Group should be found"
128+ assert gshadow_entry .name == "tgroup" , "Incorrect groupname"
129+ assert len (gshadow_entry .members ) == 2 , f"Group should have 2 members, but has { len (gshadow_entry .members )} "
130+ assert "tuser1" in gshadow_entry .members , "tuser1 should be a member of tgroup"
131+ assert "tuser2" in gshadow_entry .members , "tuser2 should be a member of tgroup"
0 commit comments