#!/bin/sh
################################################################################
## ##
## Copyright (c) International Business Machines Corp., 2001 ##
## Author: Manoj Iyer, manjo@mail.utexas.edu ##
## Copyright (c) 2016 Cyril Hrubis <chrubis@suse.cz> ##
## ##
## 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 ##
## ##
################################################################################
#
# Tests basic cp functionality
#
TST_CNT=5
TST_TESTFUNC=do_test
TST_SETUP=setup
TST_NEEDS_TMPDIR=1
. tst_test.sh
create_tree()
{
local dirname=$1
local dircnt=$2
local filecnt=$3
tst_res TINFO "Creating $dircnt directories."
tst_res TINFO "Filling each dir with $filecnt files".
while [ $dircnt -gt 0 ]; do
dirname=$dirname/dir$dircnt
ROD mkdir -p $dirname
local fcnt=0
while [ $fcnt -lt $filecnt ]; do
ROD touch $dirname/file$fcnt
fcnt=$((fcnt+1))
done
dircnt=$((dircnt-1))
done
}
setup()
{
create_tree "dir" 10 10
ROD echo LTP > file
}
compare_dirs()
{
local src="$1"
local dst="$2"
if diff -r $src $dst; then
tst_res TPASS "Directories $src and $dst are equal"
else
tst_res TFAIL "Directories $src and $dst differs"
ls -R $src
echo
ls -R $dst
fi
}
compare_files()
{
local src="$1"
local dst="$2"
if diff $src $dst; then
tst_res TPASS "Files $src and $dst are equal"
else
tst_res TFAIL "Files $src and $dst differs"
fi
}
cp_test()
{
local args="$1"
local src="$2"
local dst="$3"
EXPECT_PASS cp $args $src $dst
if [ -f $src ]; then
compare_files $src $dst
else
compare_dirs $src $dst
fi
ROD rm -r $dst
}
do_test()
{
case $1 in
1) cp_test "" "file" "file_copy";;
2) cp_test -l "file" "file_copy";;
3) cp_test -s "file" "file_copy";;
4) cp_test -R "dir" "dir_copy";;
5) cp_test -lR "dir" "dir_copy";;
esac
}
tst_run