du01.sh 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #!/bin/sh
  2. # SPDX-License-Identifier: GPL-2.0-or-later
  3. # Copyright (c) 2015 Fujitsu Ltd.
  4. # Author: Zeng Linggang <zenglg.jy@cn.fujitsu.com>
  5. #
  6. # Test du command with some basic options.
  7. TST_CNT=23
  8. TST_SETUP=setup
  9. TST_TESTFUNC=do_test
  10. TST_NEEDS_TMPDIR=1
  11. TST_NEEDS_CMDS="dd du stat"
  12. . tst_test.sh
  13. setup()
  14. {
  15. ROD_SILENT mkdir basedir
  16. ROD_SILENT cd basedir
  17. ROD_SILENT dd if=/dev/zero of=testfile bs=1M count=10
  18. ROD_SILENT mkdir -p testdir
  19. ROD_SILENT ln -s ../testfile testdir/testsymlink
  20. # Display values are in units of the first available SIZE
  21. # from --block-size, and the DU_BLOCK_SIZE, BLOCK_SIZE and
  22. # BLOCKSIZE environment variables. Here we need to
  23. # set DU_BLOCK_SIZE to 1024 to ensure the result is expected.
  24. export DU_BLOCK_SIZE=1024
  25. }
  26. du_test()
  27. {
  28. local test_return
  29. $1 > ../temp 2>&1
  30. test_return=$?
  31. if [ ${test_return} -ne 0 ]; then
  32. grep -q -E "unrecognized option|invalid option" ../temp
  33. if [ $? -eq 0 ]; then
  34. tst_res TCONF "'$1' not supported"
  35. else
  36. tst_res TFAIL "'$1' failed"
  37. fi
  38. return
  39. fi
  40. grep -q $2 ../temp
  41. if [ $? -eq 0 ]; then
  42. tst_res TPASS "'$1' passed"
  43. else
  44. tst_res TFAIL "'$1' failed"
  45. tst_res TINFO "Looking for '$2' in:"
  46. cat ../temp
  47. fi
  48. }
  49. block_size=512
  50. page_size=$(tst_getconf PAGESIZE)
  51. if [ "$page_size" -lt 1024 ]; then
  52. tst_brk TBROK "Page size < 1024"
  53. fi
  54. page_size=$((page_size / 1024))
  55. # The output could be different in some systems, if we use du to
  56. # estimate file space usage with the same filesystem and the same size.
  57. # So we use the approximate value to check.
  58. check1="^10[2-3][0-9][0-9][[:space:]]\."
  59. check2="^10[2-3][0-9][0-9][[:space:]]testfile"
  60. check3="^\(0\|${page_size}\)[[:space:]]\.\/testdir\/testsymlink"
  61. check5="^20[4-6][0-9][0-9][[:space:]]\."
  62. check7="^10[4-5][0-9][0-9]\{4\}[[:space:]]\."
  63. check9="^10[2-3][0-9][0-9][[:space:]]total"
  64. check11="^10[2-3][0-9][0-9][[:space:]]testdir\/testsymlink"
  65. check14="^1[0,1]M[[:space:]]\."
  66. check16="^10[2-3][0-9][0-9][[:space:]]testdir\/"
  67. check20="^11M[[:space:]]\."
  68. check23="^[0-9]\{1,2\}[[:space:]]\."
  69. do_test()
  70. {
  71. case $1 in
  72. 1) du_test "du" ${check1};;
  73. 2) du_test "du testfile" ${check2};;
  74. 3) du_test "du -a" ${check3};;
  75. 4) du_test "du --all" ${check3};;
  76. 5) du_test "du -B ${block_size}" ${check5};;
  77. 6) du_test "du --block-size=${block_size}" ${check5};;
  78. 7) du_test "du -b" ${check7};;
  79. 8) du_test "du --bytes" ${check7};;
  80. 9) du_test "du -c" ${check9};;
  81. 10) du_test "du --total" ${check9};;
  82. 11) du_test "du -D testdir/testsymlink" ${check11};;
  83. 12) du_test "du --dereference-args testdir/testsymlink" ${check11};;
  84. 13) du_test "du --max-depth=1" ${check1};;
  85. 14) du_test "du --human-readable" ${check14};;
  86. 15) du_test "du -k" ${check1};;
  87. 16) du_test "du -L testdir/" ${check16};;
  88. 17) du_test "du --dereference testdir/" ${check16};;
  89. 18) du_test "du -P" ${check1};;
  90. 19) du_test "du --no-dereference" ${check1};;
  91. 20) du_test "du --si" ${check20};;
  92. 21) du_test "du -s" ${check1};;
  93. 22) du_test "du --summarize" ${check1};;
  94. 23) du_test "du --exclude=testfile" ${check23};;
  95. esac
  96. }
  97. tst_run