From 04b13656794dc1893616ecb5563cd576f6d21707 Mon Sep 17 00:00:00 2001 From: Akshay Sakure Date: Tue, 23 Jun 2026 19:15:43 +0530 Subject: [PATCH 1/3] Tests: Add group with specified GID using -g flag This is Python transformation of the test located in `tests/grouptools/groupadd/05_groupadd_set_GID/groupadd.test` which checks that `groupadd` can create group with sepcified GID using -g flag Signed-off-by: Akshay Sakure --- tests/system/tests/test_groupadd.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/system/tests/test_groupadd.py b/tests/system/tests/test_groupadd.py index 0a8df92c86..31c6ef5a87 100644 --- a/tests/system/tests/test_groupadd.py +++ b/tests/system/tests/test_groupadd.py @@ -66,3 +66,23 @@ def test_groupadd__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_groupadd__set_gid(shadow: Shadow): + """ + :title: Create group with specific GID using -g flag + :setup: + 1. Create group with specific GID + :steps: + 1. Check group entry + :expectedresults: + 1. Group entry is created with the specified GID + :customerscenario: False + """ + shadow.groupadd("-g 1500 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 group_entry.gid == 1500, "Incorrect GID" From c7a2d197fdb78fc7ae75da3cea50b1da3b0065aa Mon Sep 17 00:00:00 2001 From: Akshay Sakure Date: Tue, 30 Jun 2026 19:39:56 +0530 Subject: [PATCH 2/3] Tests: Add group with password using -p flag This is Python transformation of the test located in 'tests/grouptools/groupadd/04_groupadd_set_password/groupadd.test' which checks that 'groupadd' can create group with password using -p flag Signed-off-by: Akshay Sakure --- tests/system/tests/test_groupadd.py | 34 +++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/tests/system/tests/test_groupadd.py b/tests/system/tests/test_groupadd.py index 31c6ef5a87..643d9bf969 100644 --- a/tests/system/tests/test_groupadd.py +++ b/tests/system/tests/test_groupadd.py @@ -4,8 +4,13 @@ from __future__ import annotations +import re + import pytest +from passlib.hash import sha512_crypt + +from framework.misc import shadow_password_pattern from framework.roles.shadow import Shadow from framework.topology import KnownTopology @@ -86,3 +91,32 @@ def test_groupadd__set_gid(shadow: Shadow): assert group_entry is not None, "Group should be found" assert group_entry.name == "tgroup", "Incorrect groupname" assert group_entry.gid == 1500, "Incorrect GID" + + +@pytest.mark.topology(KnownTopology.Shadow) +def test_groupadd__set_password(shadow: Shadow): + """ + :title: Add group with password using -p flag + :setup: + 1. Create group with password + :steps: + 1. Check group entry + 2. Check gshadow entry + :expectedresults: + 1. Group entry is created + 2. Group's password is correctly set + :customerscenario: False + """ + password = "Secret123" + password_hash = sha512_crypt.hash(password) + shadow.groupadd(f"-p '{password_hash}' tgroup") + + group_entry = shadow.tools.getent.group("tgroup") + assert group_entry is not None, "Group should be found" + + 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 gshadow_entry.password is not None, "Password should not be None" + assert re.match(shadow_password_pattern(), gshadow_entry.password), "Incorrect password" From c2a9d70ab703fa1fb34ccb93644fffa66795de05 Mon Sep 17 00:00:00 2001 From: Akshay Sakure Date: Wed, 1 Jul 2026 15:21:43 +0530 Subject: [PATCH 3/3] Tests: Force creation of existing group using -f flag This is Python transformation of the test located in 'tests/grouptools/groupadd/06_groupadd_-f_add_existing_group/groupadd.test' which checks that 'groupadd' completes successfully while force-creating an existing group using -f flag Signed-off-by: Akshay Sakure --- tests/system/tests/test_groupadd.py | 32 ++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/tests/system/tests/test_groupadd.py b/tests/system/tests/test_groupadd.py index 643d9bf969..e5a0faae54 100644 --- a/tests/system/tests/test_groupadd.py +++ b/tests/system/tests/test_groupadd.py @@ -7,7 +7,6 @@ import re import pytest - from passlib.hash import sha512_crypt from framework.misc import shadow_password_pattern @@ -120,3 +119,34 @@ def test_groupadd__set_password(shadow: Shadow): assert gshadow_entry.name == "tgroup", "Incorrect groupname" assert gshadow_entry.password is not None, "Password should not be None" assert re.match(shadow_password_pattern(), gshadow_entry.password), "Incorrect password" + + +@pytest.mark.topology(KnownTopology.Shadow) +def test_groupadd__force_group_creation(shadow: Shadow): + """ + :title: Forced creation of existing group exits successfully + :setup: + 1. Create group entry + :steps: + 1. Check group entry + 2. Force create existing group + 3. Check group entry + 4. Check gshadow entry + :expectedresults: + 1. Group entry is created + 2. groupadd -f command completes successfully + 3. Group entry is unchanged + 4. gshadow entry is unchanged + :customerscenario: False + """ + shadow.groupadd("tgroup") + existing_group_entry = shadow.tools.getent.group("tgroup") + assert existing_group_entry is not None, "Group should be found" + shadow.groupadd("-f 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" + 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"