xref: /aosp_15_r20/external/ltp/testcases/commands/cp/cp_tests.sh (revision 49cdfc7efb34551c7342be41a7384b9c40d7cab7)
1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0-or-later
3# Copyright (c) International Business Machines Corp., 2001
4# Copyright (c) 2016 Cyril Hrubis <[email protected]>
5# Author: Manoj Iyer <[email protected]>
6#
7# Tests basic cp functionality
8
9TST_CNT=5
10TST_TESTFUNC=do_test
11TST_SETUP=setup
12TST_NEEDS_TMPDIR=1
13
14create_tree()
15{
16	local dirname=$1
17	local dircnt=$2
18	local filecnt=$3
19
20	tst_res TINFO "Creating $dircnt directories."
21	tst_res TINFO "Filling each dir with $filecnt files".
22	while [ $dircnt -gt 0 ]; do
23		dirname=$dirname/dir$dircnt
24	        ROD mkdir -p $dirname
25
26		local fcnt=0
27	        while [ $fcnt -lt $filecnt ]; do
28			ROD touch $dirname/file$fcnt
29			fcnt=$((fcnt+1))
30		done
31		dircnt=$((dircnt-1))
32	done
33}
34
35setup()
36{
37	create_tree "dir" 10 10
38	ROD echo LTP > file
39}
40
41compare_dirs()
42{
43	local src="$1"
44	local dst="$2"
45
46	if diff -r $src $dst; then
47		tst_res TPASS "Directories $src and $dst are equal"
48	else
49		tst_res TFAIL "Directories $src and $dst differs"
50		ls -R $src
51		echo
52		ls -R $dst
53	fi
54}
55
56compare_files()
57{
58	local src="$1"
59	local dst="$2"
60
61	if diff $src $dst; then
62		tst_res TPASS "Files $src and $dst are equal"
63	else
64		tst_res TFAIL "Files $src and $dst differs"
65	fi
66}
67
68cp_test()
69{
70	local args="$1"
71	local src="$2"
72	local dst="$3"
73	EXPECT_PASS cp $args $src $dst
74	if [ -f $src ]; then
75		compare_files $src $dst
76	else
77		compare_dirs $src $dst
78	fi
79	ROD rm -r $dst
80}
81
82do_test()
83{
84	case $1 in
85	1) cp_test ""  "file" "file_copy";;
86	2) cp_test -l  "file" "file_copy";;
87	3) cp_test -s  "file" "file_copy";;
88	4) cp_test -R  "dir"  "dir_copy";;
89	5) cp_test -lR "dir"  "dir_copy";;
90	esac
91}
92
93. tst_test.sh
94tst_run
95