test_ext.py 4.5 KB

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