From: Iker Pedrosa Date: Fri, 8 Aug 2025 15:05:42 +0000 (+0200) Subject: tests/system/tests/test_newusers.py: create multiple users from stdin X-Git-Tag: 4.19.0-rc1~25 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=32399e9584593ae58c753526ebef912ffda4c9fd;p=thirdparty%2Fshadow.git tests/system/tests/test_newusers.py: create multiple users from stdin 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 --- diff --git a/tests/system/tests/test_newusers.py b/tests/system/tests/test_newusers.py new file mode 100644 index 000000000..0564519bd --- /dev/null +++ b/tests/system/tests/test_newusers.py @@ -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"