mirror of
https://github.com/kernelkit/infix.git
synced 2026-07-30 20:43:02 +02:00
67 lines
2.3 KiB
Python
Executable File
67 lines
2.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Add/delete user
|
|
|
|
Verify that it is possible to add/delete a user. The user password is hashed
|
|
with yescrypt.
|
|
"""
|
|
import infamy
|
|
import copy
|
|
import random
|
|
import string
|
|
import re
|
|
import infamy.ssh as ssh
|
|
import infamy.util as util
|
|
|
|
username = "newuser01"
|
|
password = "newuser01password"
|
|
hashed_password = "$y$j9T$SALT$gx4K1wugXsm3JDLwYZtnbr37FGGvljotXwIBGOxaGf2"
|
|
with infamy.Test() as test:
|
|
with test.step("Set up topology and attach to target DUT"):
|
|
env = infamy.Env()
|
|
target = env.attach("target", "mgmt")
|
|
tgtssh = env.attach("target", "mgmt", "ssh")
|
|
|
|
with test.step("Add new user 'newuser01' with password 'newuser01password'"):
|
|
target.put_config_dict("ietf-system", {
|
|
"system": {
|
|
"authentication": {
|
|
"user": [
|
|
{
|
|
"name": username,
|
|
"password": hashed_password,
|
|
"shell": "infix-system:bash"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
})
|
|
|
|
with test.step("Verify user 'newuser01' exist in operational"):
|
|
running = target.get_config_dict("/ietf-system:system")
|
|
users = running["system"]["authentication"]["user"]
|
|
user_found = False
|
|
for user in users:
|
|
if user["name"] == username:
|
|
user_found = True
|
|
assert user["password"] == hashed_password
|
|
break
|
|
assert user_found, f"User 'newuser01' not found"
|
|
|
|
with test.step("Verify user 'newuser01' can login with SSH"):
|
|
newssh = env.attach("target", "mgmt", "ssh", None, username, password)
|
|
util.until(lambda: newssh.run("ls").returncode == 0, attempts=200)
|
|
|
|
with test.step("Delete user 'newuser01'"):
|
|
target.delete_xpath(f"/ietf-system:system/authentication/user[name='{username}']")
|
|
|
|
with test.step("Verify erasure of user 'newuser01'"):
|
|
running = target.get_config_dict("/ietf-system:system")
|
|
users = running["system"]["authentication"]["user"]
|
|
for user in users:
|
|
assert user["name"] != username, f"User {username} not deleted"
|
|
|
|
with test.step("Verify that 'newuser01' is removed from /etc/passwd"):
|
|
util.until(lambda: tgtssh.runsh(f"sudo grep '{username}:' /etc/passwd") != 0)
|
|
test.succeed()
|