]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
tests/system/tests/test_newusers.py: create multiple users from stdin
authorIker Pedrosa <ipedrosa@redhat.com>
Fri, 8 Aug 2025 15:05:42 +0000 (17:05 +0200)
committerSerge Hallyn <serge@hallyn.com>
Fri, 5 Dec 2025 22:35:36 +0000 (16:35 -0600)
This is the transformation to Python of the test located in
`tests/newusers/35_read_from_stdin/newusers.test`, which checks that
`newusers` is able to create new users from stdin.

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
tests/system/tests/test_newusers.py [new file with mode: 0644]

diff --git a/tests/system/tests/test_newusers.py b/tests/system/tests/test_newusers.py
new file mode 100644 (file)
index 0000000..0564519
--- /dev/null
@@ -0,0 +1,97 @@
+"""
+Test newusers
+"""
+
+from __future__ import annotations
+
+import pytest
+
+from framework.misc import days_since_epoch
+from framework.roles.shadow import Shadow
+from framework.topology import KnownTopology
+
+
+@pytest.mark.topology(KnownTopology.Shadow)
+def test_newusers__create_users_from_stdin(shadow: Shadow):
+    """
+    :title: Create multiple users from stdin
+    :setup:
+        1. Prepare and create user data from stdin
+    :steps:
+        1. Check the first user's passwd, shadow, group, gshadow, and home folder
+        2. Check second user's passwd, shadow, group, gshadow, and home folder
+    :expectedresults:
+        1. First user's passwd, shadow, group, gshadow, and home folders are correct
+        2. Second user's passwd, shadow, group, gshadow, and home folders are correct
+    :customerscenario: False
+    """
+    users_data = (
+        "tuser1:Secret123:1001:1001:Test User One:/home/tuser1:/bin/bash\n"
+        "tuser2:Secret123:1002:1002:Test User Two:/home/tuser2:/bin/bash"
+    )
+
+    shadow.newusers(users_data=users_data)
+
+    passwd_entry = shadow.tools.getent.passwd("tuser1")
+    assert passwd_entry is not None, "tuser1 user should be found in passwd"
+    assert passwd_entry.name == "tuser1", "Incorrect username"
+    assert passwd_entry.password == "x", "Incorrect password"
+    assert passwd_entry.uid == 1001, "Incorrect UID"
+    assert passwd_entry.gid == 1001, "Incorrect GID"
+    assert passwd_entry.gecos == "Test User One", "Incorrect GECOS"
+    assert passwd_entry.home == "/home/tuser1", "Incorrect home folder"
+    assert passwd_entry.shell == "/bin/bash", "Incorrect shell"
+
+    shadow_entry = shadow.tools.getent.shadow("tuser1")
+    assert shadow_entry is not None, "tuser1 user should be found in shadow"
+    assert shadow_entry.name == "tuser1", "Incorrect username"
+    assert shadow_entry.password is not None, "Incorrect password"
+    assert shadow_entry.last_changed == days_since_epoch(), "Incorrect last changed"
+    assert shadow_entry.min_days == 0, "Incorrect min days"
+    assert shadow_entry.max_days == 99999, "Incorrect max days"
+    assert shadow_entry.warn_days == 7, "Incorrect warn days"
+
+    group_entry = shadow.tools.getent.group("tuser1")
+    assert group_entry is not None, "tuser1 group should be found"
+    assert group_entry.name == "tuser1", "Incorrect group name"
+    assert group_entry.gid == 1001, "Incorrect GID"
+
+    if shadow.host.features["gshadow"]:
+        gshadow_entry = shadow.tools.getent.gshadow("tuser1")
+        assert gshadow_entry is not None, "tuser1 group should be found"
+        assert gshadow_entry.name == "tuser1", "Incorrect group name"
+        assert gshadow_entry.password == "*", "Incorrect password"
+
+    assert shadow.fs.exists("/home/tuser1"), "tuser1 home folder should exist"
+
+    passwd_entry = shadow.tools.getent.passwd("tuser2")
+    assert passwd_entry is not None, "tuser2 user should be found in passwd"
+    assert passwd_entry.name == "tuser2", "Incorrect username"
+    assert passwd_entry.password == "x", "Incorrect password"
+    assert passwd_entry.uid == 1002, "Incorrect UID"
+    assert passwd_entry.gid == 1002, "Incorrect GID"
+    assert passwd_entry.gecos == "Test User Two", "Incorrect GECOS"
+    assert passwd_entry.home == "/home/tuser2", "Incorrect home folder"
+    assert passwd_entry.shell == "/bin/bash", "Incorrect shell"
+
+    shadow_entry = shadow.tools.getent.shadow("tuser2")
+    assert shadow_entry is not None, "tuser2 user should be found in shadow"
+    assert shadow_entry.name == "tuser2", "Incorrect username"
+    assert shadow_entry.password is not None, "Incorrect password"
+    assert shadow_entry.last_changed == days_since_epoch(), "Incorrect last changed"
+    assert shadow_entry.min_days == 0, "Incorrect min days"
+    assert shadow_entry.max_days == 99999, "Incorrect max days"
+    assert shadow_entry.warn_days == 7, "Incorrect warn days"
+
+    group_entry = shadow.tools.getent.group("tuser2")
+    assert group_entry is not None, "tuser2 group should be found"
+    assert group_entry.name == "tuser2", "Incorrect group name"
+    assert group_entry.gid == 1002, "Incorrect GID"
+
+    if shadow.host.features["gshadow"]:
+        gshadow_entry = shadow.tools.getent.gshadow("tuser2")
+        assert gshadow_entry is not None, "tuser2 group should be found"
+        assert gshadow_entry.name == "tuser2", "Incorrect group name"
+        assert gshadow_entry.password == "*", "Incorrect password"
+
+    assert shadow.fs.exists("/home/tuser2"), "tuser2 home folder should exist"