#!/bin/sh ################################################################################ ## ## ## Copyright (c) International Business Machines Corp., 2001 ## ## Author: Manoj Iyer, manjo@mail.utexas.edu ## ## ## ## This program is free software; you can redistribute it and#or modify ## ## it under the terms of the GNU General Public License as published by ## ## the Free Software Foundation; either version 2 of the License, or ## ## (at your option) any later version. ## ## ## ## This program is distributed in the hope that it will be useful, but ## ## WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ## ## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ## ## for more details. ## ## ## ## You should have received a copy of the GNU General Public License ## ## along with this program; if not, write to the Free Software Foundation, ## ## Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ## ## ## ################################################################################ # # Description: 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