From: Iker Pedrosa Date: Fri, 8 Aug 2025 15:08:20 +0000 (+0200) Subject: tests/system/tests/test_newusers.py: create multiple users using file input X-Git-Tag: 4.19.0-rc1~24 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6ad9c56b0da6022e4b3ce57e92bb5eef488e7012;p=thirdparty%2Fshadow.git tests/system/tests/test_newusers.py: create multiple users using file input This is the transformation to Python of the test located in `tests/newusers/20_multiple_users/newusers.test`, which checks that `newusers` is able to create new users from file. Signed-off-by: Iker Pedrosa --- diff --git a/tests/system/tests/test_newusers.py b/tests/system/tests/test_newusers.py index 0564519bd..0cc584c6b 100644 --- a/tests/system/tests/test_newusers.py +++ b/tests/system/tests/test_newusers.py @@ -95,3 +95,91 @@ def test_newusers__create_users_from_stdin(shadow: Shadow): assert gshadow_entry.password == "*", "Incorrect password" assert shadow.fs.exists("/home/tuser2"), "tuser2 home folder should exist" + + +@pytest.mark.topology(KnownTopology.Shadow) +def test_newusers__create_users_from_file(shadow: Shadow): + """ + :title: Create multiple users using file input + :setup: + 1. Prepare and create user data from input file + :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 + """ + temp_file = "/tmp/test_newusers_data.txt" + 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.fs.write(temp_file, users_data) + + shadow.newusers(temp_file) + + 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"