]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
tests/system/tests/test_groupmod.py: add test for groupmod -U with user list master
authorIker Pedrosa <ipedrosa@redhat.com>
Tue, 23 Dec 2025 08:51:56 +0000 (09:51 +0100)
committerAlejandro Colomar <foss+github@alejandro-colomar.es>
Thu, 1 Jan 2026 14:44:52 +0000 (15:44 +0100)
Add comprehensive test for the groupmod -U option when provided with a
list of users to set group membership. This test verifies:

- Setting initial group membership with multiple users
- Proper membership verification in both group and gshadow entries
- Updating group membership by modifying the user list
- Correct handling of membership changes in group databases

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
tests/system/tests/test_groupmod.py

index 6617602f5bf54592a791c896699f453657fb7bae..40aa38484e3cbccbb589a37264655e8b4be80eb5 100644 (file)
@@ -69,3 +69,63 @@ def test_groupmod__u_option_empty_string_clears_members(shadow: Shadow):
         assert gshadow_entry is not None, "Group should be found"
         assert gshadow_entry.name == "tgroup", "Incorrect groupname"
         assert not gshadow_entry.members, "Group should have no members"
+
+
+@pytest.mark.topology(KnownTopology.Shadow)
+def test_groupmod__u_option_with_user_list(shadow: Shadow):
+    """
+    :title: Test groupmod -U option with user list to set group membership
+    :setup:
+        1. Create three test users
+        2. Create test group
+    :steps:
+        1. Set group membership to all three users using groupmod -U
+        2. Verify all three users are members in group and gshadow entry
+        3. Modify group membership to only two users using groupmod -U
+        4. Verify updated membership in group and gshadow entries
+    :expectedresults:
+        1. Initial groupmod -U command sets membership correctly for all three users
+        2. group and gshadow entries show correct membership
+        3. Second groupmod -U command updates membership correctly
+        4. Updated group and gshadow entries reflect new membership
+    :customerscenario: False
+    """
+    shadow.useradd("tuser1")
+    shadow.useradd("tuser2")
+    shadow.useradd("tuser3")
+    shadow.groupadd("tgroup")
+    shadow.groupmod("-U tuser1,tuser2,tuser3 tgroup")
+
+    group_entry = shadow.tools.getent.group("tgroup")
+    assert group_entry is not None, "Group should be found"
+    assert group_entry.name == "tgroup", "Incorrect groupname"
+    assert len(group_entry.members) == 3, f"Group should have 3 members, but has {len(group_entry.members)}"
+    assert "tuser1" in group_entry.members, "tuser1 should be a member of tgroup"
+    assert "tuser2" in group_entry.members, "tuser2 should be a member of tgroup"
+    assert "tuser3" in group_entry.members, "tuser3 should be a member of tgroup"
+
+    if shadow.host.features["gshadow"]:
+        gshadow_entry = shadow.tools.getent.gshadow("tgroup")
+        assert gshadow_entry is not None, "Group should be found"
+        assert gshadow_entry.name == "tgroup", "Incorrect groupname"
+        assert len(gshadow_entry.members) == 3, f"Group should have 3 members, but has {len(gshadow_entry.members)}"
+        assert "tuser1" in gshadow_entry.members, "tuser1 should be a member of tgroup"
+        assert "tuser2" in gshadow_entry.members, "tuser2 should be a member of tgroup"
+        assert "tuser3" in gshadow_entry.members, "tuser3 should be a member of tgroup"
+
+    shadow.groupmod("-U tuser1,tuser2 tgroup")
+
+    group_entry = shadow.tools.getent.group("tgroup")
+    assert group_entry is not None, "Group should be found"
+    assert group_entry.name == "tgroup", "Incorrect groupname"
+    assert len(group_entry.members) == 2, f"Group should have 2 members, but has {len(group_entry.members)}"
+    assert "tuser1" in group_entry.members, "tuser1 should be a member of tgroup"
+    assert "tuser2" in group_entry.members, "tuser2 should be a member of tgroup"
+
+    if shadow.host.features["gshadow"]:
+        gshadow_entry = shadow.tools.getent.gshadow("tgroup")
+        assert gshadow_entry is not None, "Group should be found"
+        assert gshadow_entry.name == "tgroup", "Incorrect groupname"
+        assert len(gshadow_entry.members) == 2, f"Group should have 2 members, but has {len(gshadow_entry.members)}"
+        assert "tuser1" in gshadow_entry.members, "tuser1 should be a member of tgroup"
+        assert "tuser2" in gshadow_entry.members, "tuser2 should be a member of tgroup"