• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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