aboutsummaryrefslogtreecommitdiff
path: root/testcases/commands/mv/mv_tests.sh
blob: 91648dd8fe59b36a9bc3e5650ad38910ea3ec3c2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#!/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

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_test.sh
tst_run