test_ext.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import os
  2. import infra.basetest
  3. VOLNAME_PROP = "Filesystem volume name"
  4. REVISION_PROP = "Filesystem revision #"
  5. FEATURES_PROP = "Filesystem features"
  6. BLOCKCNT_PROP = "Block count"
  7. INODECNT_PROP = "Inode count"
  8. RESBLKCNT_PROP = "Reserved block count"
  9. CHECK_FS_TYPE_CMD = "mount | grep '/dev/root on / type {}'"
  10. def dumpe2fs_run(builddir, image):
  11. cmd = ["host/sbin/dumpe2fs", os.path.join("images", image)]
  12. ret = infra.run_cmd_on_host(builddir, cmd)
  13. return ret.strip().splitlines()
  14. def dumpe2fs_getprop(out, prop):
  15. for line in out:
  16. fields = line.split(": ")
  17. if fields[0] == prop:
  18. return fields[1].strip()
  19. def boot_img_and_check_fs_type(emulator, builddir, fs_type):
  20. img = os.path.join(builddir, "images", "rootfs.{}".format(fs_type))
  21. emulator.boot(arch="armv7",
  22. kernel="builtin",
  23. kernel_cmdline=["root=/dev/mmcblk0",
  24. "rootfstype={}".format(fs_type)],
  25. options=["-drive", "file={},if=sd,format=raw".format(img)])
  26. emulator.login()
  27. _, exit_code = emulator.run(CHECK_FS_TYPE_CMD.format(fs_type))
  28. return exit_code
  29. class TestExt2(infra.basetest.BRTest):
  30. config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
  31. """
  32. BR2_TARGET_ROOTFS_EXT2=y
  33. BR2_TARGET_ROOTFS_EXT2_2r1=y
  34. BR2_TARGET_ROOTFS_EXT2_LABEL="foobar"
  35. BR2_TARGET_ROOTFS_EXT2_SIZE="16384"
  36. # BR2_TARGET_ROOTFS_TAR is not set
  37. """
  38. def test_run(self):
  39. out = dumpe2fs_run(self.builddir, "rootfs.ext2")
  40. self.assertEqual(dumpe2fs_getprop(out, VOLNAME_PROP), "foobar")
  41. self.assertEqual(dumpe2fs_getprop(out, REVISION_PROP), "1 (dynamic)")
  42. self.assertNotIn("has_journal", dumpe2fs_getprop(out, FEATURES_PROP))
  43. exit_code = boot_img_and_check_fs_type(self.emulator,
  44. self.builddir, "ext2")
  45. self.assertEqual(exit_code, 0)
  46. class TestExt3(infra.basetest.BRTest):
  47. config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
  48. """
  49. BR2_TARGET_ROOTFS_EXT2=y
  50. BR2_TARGET_ROOTFS_EXT2_3=y
  51. BR2_TARGET_ROOTFS_EXT2_SIZE="16384"
  52. # BR2_TARGET_ROOTFS_TAR is not set
  53. """
  54. def test_run(self):
  55. out = dumpe2fs_run(self.builddir, "rootfs.ext3")
  56. self.assertEqual(dumpe2fs_getprop(out, REVISION_PROP), "1 (dynamic)")
  57. self.assertIn("has_journal", dumpe2fs_getprop(out, FEATURES_PROP))
  58. self.assertNotIn("extent", dumpe2fs_getprop(out, FEATURES_PROP))
  59. exit_code = boot_img_and_check_fs_type(self.emulator,
  60. self.builddir, "ext3")
  61. self.assertEqual(exit_code, 0)
  62. class TestExt4(infra.basetest.BRTest):
  63. config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
  64. """
  65. BR2_TARGET_ROOTFS_EXT2=y
  66. BR2_TARGET_ROOTFS_EXT2_4=y
  67. BR2_TARGET_ROOTFS_EXT2_SIZE="16384"
  68. BR2_TARGET_ROOTFS_EXT2_INODES=3000
  69. BR2_TARGET_ROOTFS_EXT2_RESBLKS=10
  70. # BR2_TARGET_ROOTFS_TAR is not set
  71. """
  72. def test_run(self):
  73. out = dumpe2fs_run(self.builddir, "rootfs.ext4")
  74. self.assertEqual(dumpe2fs_getprop(out, REVISION_PROP), "1 (dynamic)")
  75. self.assertEqual(dumpe2fs_getprop(out, BLOCKCNT_PROP), "16384")
  76. # Yes there are 8 fewer inodes than requested
  77. self.assertEqual(dumpe2fs_getprop(out, INODECNT_PROP), "2992")
  78. self.assertEqual(dumpe2fs_getprop(out, RESBLKCNT_PROP), "1638")
  79. self.assertIn("has_journal", dumpe2fs_getprop(out, FEATURES_PROP))
  80. self.assertIn("extent", dumpe2fs_getprop(out, FEATURES_PROP))
  81. exit_code = boot_img_and_check_fs_type(self.emulator,
  82. self.builddir, "ext4")
  83. self.assertEqual(exit_code, 0)