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