android13/external/ltp/testcases/commands/mv/mv_tests.sh

153 lines
3.2 KiB
Bash
Executable File

#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (c) International Business Machines Corp., 2001
# Author: Manoj Iyer <manjo@mail.utexas.edu>
#
# Test basic functionality of mv command
# Test #1: mv <dir1> <dir2>
# move dir1 to dir2 and all its contents.
# Test #2: mv -b <file1> <file2>
# move file1 to file2 and backup the file2.
TST_CNT=2
TST_SETUP=setup
TST_TESTFUNC=test
TST_NEEDS_TMPDIR=1
. tst_test.sh
setup()
{
ROD_SILENT mkdir -p tst_mv.old
}
creat_dirnfiles()
{
local numdirs=$2
local numfiles=$3
local dirname=$4
local dircnt=0
local fcnt=0
tst_res TINFO "Test #$1: Creating $numdirs directories."
tst_res TINFO "Test #$1: filling each dir with $numfiles files."
while [ $dircnt -lt $numdirs ]
do
dirname=$dirname/d.$dircnt
ROD_SILENT mkdir -p $dirname
fcnt=0
while [ $fcnt -lt $numfiles ]
do
ROD_SILENT touch $dirname/f.$fcnt
fcnt=$(($fcnt+1))
done
dircnt=$(($dircnt+1))
done
}
creat_expout()
{
local numdir=$1
local numfile=$2
local dirname=$3
local dircnt=0
local fcnt=0
echo "$dirname:" 1>>tst_mv.exp
echo "d.$dircnt" 1>>tst_mv.exp
while [ $dircnt -lt $numdirs ]
do
dirname=$dirname/d.$dircnt
dircnt=$(($dircnt+1))
echo "$dirname:" 1>>tst_mv.exp
if [ $dircnt -lt $numdirs ]; then
echo "d.$dircnt" 1>>tst_mv.exp
fi
fcnt=0
while [ $fcnt -lt $numfiles ]
do
echo "f.$fcnt " 1>>tst_mv.exp
fcnt=$(($fcnt+1))
done
printf "\n\n" 1>>tst_mv.exp
done
}
test1()
{
numdirs=10
numfiles=10
dircnt=0
fcnt=0
tst_res TINFO "Test #1: mv <dir1> <dir2> will move dir1 to dir2 and" \
"all its contents"
creat_dirnfiles 1 $numdirs $numfiles tst_mv.old
mv tst_mv.old tst_mv.new > tst_mv.err 2>&1
if [ $? -ne 0 ]; then
cat tst_mv.err
tst_brk TFAIL "Test #1: 'mv tst_mv.old tst_mv.new' failed"
fi
tst_res TINFO "Test #1: creating output file"
ls -R tst_mv.new > tst_mv.out 2>&1
tst_res TINFO "Test #1: creating expected output file"
creat_expout $numdirs $numfiles tst_mv.new
tst_res TINFO "Test #1: comparing expected out and actual output file"
diff -w -B -q tst_mv.out tst_mv.exp > tst_mv.err 2>&1
if [ $? -ne 0 ]; then
cat tst_mv.err
tst_res TFAIL "Test #1: mv failed."
else
tst_res TINFO "Test #1: expected same as actual"
if [ -f tst_mv.old ]; then
tst_res TFAIL "Test #1: mv did not delete old" \
"directory"
else
tst_res TPASS "Test #1: mv success"
fi
fi
}
test2()
{
tst_res TINFO "Test #2: mv -b <file1> <file2> will move dir1 to dir2"
ROD_SILENT touch tmpfile1 tmpfile2
MD5_old=$(md5sum tmpfile2 | awk '{print $1}')
if [ $? -ne 0 ]; then
tst_brk TBROK "Test #2: can't get the MD5 message of file2."
fi
if [ -f "tmpfile2~" ]; then
tst_brk TBROK "Test #2: file tmpfile2~ should not exists."
fi
mv -b tmpfile1 tmpfile2
if [ $? -ne 0 ]; then
tst_brk TBROK "Test #2: 'mv -b tmpfile1 tmpfile2' failed."
fi
# if 'mv -b file1 file2' succeed, there will be "tmpfile2~" file.
MD5_backup=$(md5sum tmpfile2 | awk '{print $1}')
if [ $? -ne 0 ]; then
tst_brk TBROK "Test #2: can not get the MD5 message of" \
"backup file2."
fi
if [ "$MD5_old" = "$MD5_backup" -a -f "tmpfile2~" ]; then
tst_res TPASS "Test #2: mv -b success"
else
tst_res TFAIL "Test #2: mv -b failed"
fi
}
tst_run