buildroot/support/testing/tests/package/test_shadow.py

60 lines
2.0 KiB
Python

import os
from infra.basetest import BRTest
class TestShadow(BRTest):
username = 'user_test'
# Need to use a different toolchain than the default due to
# shadow package requiring a toolchain w/ headers >= 4.14
config = \
"""
BR2_arm=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_GLIBC_BLEEDING_EDGE=y
BR2_PACKAGE_SHADOW=y
BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_ROOTFS_EXT2_4=y
BR2_TARGET_ROOTFS_EXT2_SIZE="65536"
"""
timeout = 60
def login(self):
img = os.path.join(self.builddir, "images", "rootfs.ext4")
self.emulator.boot(arch="armv7",
kernel="builtin",
kernel_cmdline=["root=/dev/mmcblk0",
"rootfstype=ext4"],
options=["-drive", f"file={img},if=sd,format=raw"])
self.emulator.login()
def test_nologin(self):
self.login()
self.assertRunOk("! nologin")
cmd = 'test "$(nologin)" = "This account is currently not available."'
self.assertRunOk(cmd)
def test_useradd_del(self):
username = self.username
self.login()
self.assertRunOk(f'userdel {username} || true')
self.assertRunOk(f'groupdel {username} || true')
self.assertRunOk(f'useradd -s /bin/sh {username}')
self.assertRunOk(f'test $(su {username} -c "whoami") = {username}')
self.assertRunOk(f'userdel {username}')
def test_usermod(self):
username = self.username
new_home = '/tmp'
self.login()
self.assertRunOk(f'userdel {username} || true')
self.assertRunOk(f'groupdel {username} || true')
self.assertRunOk(f'useradd -s /bin/sh {username}')
self.assertRunOk(f'usermod {username} --home {new_home}')
self.assertRunOk(f'test $(su {username} -c \'echo $HOME\') = {new_home}')
self.assertRunOk(f'userdel {username}')