2
1

test_shadow.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import os
  2. from infra.basetest import BRTest, BASIC_TOOLCHAIN_CONFIG
  3. class TestShadow(BRTest):
  4. username = 'user_test'
  5. # Need to use a different toolchain than the default due to
  6. # shadow package requiring a toolchain w/ headers >= 4.14
  7. config = \
  8. """
  9. BR2_arm=y
  10. BR2_TOOLCHAIN_EXTERNAL=y
  11. BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
  12. BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_GLIBC_BLEEDING_EDGE=y
  13. BR2_PACKAGE_SHADOW=y
  14. BR2_TARGET_ROOTFS_EXT2=y
  15. BR2_TARGET_ROOTFS_EXT2_4=y
  16. BR2_TARGET_ROOTFS_EXT2_SIZE="65536"
  17. """
  18. timeout = 60
  19. def login(self):
  20. img = os.path.join(self.builddir, "images", "rootfs.ext4")
  21. self.emulator.boot(arch="armv7",
  22. kernel="builtin",
  23. kernel_cmdline=["root=/dev/mmcblk0",
  24. "rootfstype=ext4"],
  25. options=["-drive", f"file={img},if=sd,format=raw"])
  26. self.emulator.login()
  27. def test_nologin(self):
  28. self.login()
  29. self.assertRunOk("! nologin")
  30. cmd = 'test "$(nologin)" = "This account is currently not available."'
  31. self.assertRunOk(cmd)
  32. def test_useradd_del(self):
  33. username = self.username
  34. self.login()
  35. self.assertRunOk(f'userdel {username} || true')
  36. self.assertRunOk(f'groupdel {username} || true')
  37. self.assertRunOk(f'useradd -s /bin/sh {username}')
  38. self.assertRunOk(f'test $(su {username} -c "whoami") = {username}')
  39. self.assertRunOk(f'userdel {username}')
  40. def test_usermod(self):
  41. username = self.username
  42. new_home = '/tmp'
  43. self.login()
  44. self.assertRunOk(f'userdel {username} || true')
  45. self.assertRunOk(f'groupdel {username} || true')
  46. self.assertRunOk(f'useradd -s /bin/sh {username}')
  47. self.assertRunOk(f'usermod {username} --home {new_home}')
  48. self.assertRunOk(f'test $(su {username} -c \'echo $HOME\') = {new_home}')
  49. self.assertRunOk(f'userdel {username}')