aboutsummaryrefslogtreecommitdiff
path: root/tests/cp.test
blob: a720d1f50d4a78d526eb782bb23aee166c9ef129 (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
#!/bin/bash

[ -f testing.sh ] && . testing.sh

# Create test file
dd if=/dev/urandom of=random bs=64 count=1 2> /dev/null

#testing "name" "command" "result" "infile" "stdin"

testing "not enough arguments [fail]" "cp one 2>/dev/null || echo yes" \
	"yes\n" "" ""
testing "-missing source [fail]" "cp missing two 2>/dev/null || echo yes" \
	"yes\n" "" ""
testing "file->file" "cp random two && cmp random two && echo yes" \
	"yes\n" "" ""
rm two

mkdir two
testing "file->dir" "cp random two && cmp random two/random && echo yes" \
	"yes\n" "" ""
rm two/random
testing "file->dir/file" \
	"cp random two/random && cmp random two/random && echo yes" \
	"yes\n" "" ""
testing "-r dir->missing" \
	"cp -r two three && cmp random three/random && echo yes" \
	"yes\n" "" ""
touch walrus
testing "-r dir->file [fail]" \
	"cp -r two walrus 2>/dev/null || echo yes" "yes\n" "" ""
touch two/three
testing "-r dir hits file." \
	"cp -r three two 2>/dev/null || echo yes" "yes\n" "" ""
rm -rf two three walrus

touch two
chmod 000 two
testing "file->inaccessable [fail]" \
	"cp random two 2>/dev/null || echo yes" "yes\n" "" ""
rm -f two

touch two
chmod 000 two
testing "-f file->inaccessable" \
	"cp -f random two && cmp random two && echo yes" "yes\n" "" ""
mkdir sub
chmod 000 sub
testing "file->inaccessable_dir [fail]" \
	"cp random sub 2>/dev/null || echo yes" "yes\n" "" ""
rm two
rmdir sub

# This test fails because our -rf deletes existing target files without
# regard to what we'd be copying over it. Posix says to only do that if
# we'd be copying a file over the file, but does not say _why_.

#mkdir dir
#touch file
#testing "-rf dir file [fail]" "cp -rf dir file 2>/dev/null || echo yes" \
#	"yes\n" "" ""
#rm -rf dir file

touch one two
testing "file1 file2 missing [fail]" \
	"cp one two missing 2>/dev/null || echo yes" "yes\n" "" ""
mkdir dir
testing "dir file missing [fail]" \
	"cp dir two missing 2>/dev/null || echo yes" "yes\n" "" ""
testing "-rf dir file missing [fail]" \
	"cp dir two missing 2>/dev/null || echo yes" "yes\n" "" ""
testing "file1 file2 file [fail]" \
	"cp random one two 2>/dev/null || echo yes" "yes\n" "" ""
testing "file1 file2 dir" \
	"cp random one dir && cmp random dir/random && cmp one dir/one && echo yes" \
	"yes\n" "" ""
rm one two random
rm -rf dir

mkdir -p one/two/three/four
touch one/two/three/five
touch one/{six,seven,eight}
testing "-r /abspath dest" \
	"cp -r \"$(readlink -f one)\" dir && diff -r one dir && echo yes" \
	"yes\n" "" ""
testing "-r dir again" "cp -r one/. dir && diff -r one dir && echo yes" \
	"yes\n" "" ""
mkdir dir2
testing "-r dir1/* dir2" \
	"cp -r one/* dir2 && diff -r one dir2 && echo yes" "yes\n" "" ""
rm -rf one dir dir2

touch walrus
chmod 644 walrus
ln -s walrus woot

testing "symlink dest permissions" "cp woot carpenter && stat -c %A carpenter" \
  "-rw-r--r--\n" "" ""

# cp -r ../source destdir
# cp -r one/two/three missing
# cp -r one/two/three two
# mkdir one; touch one/two; ln -s two one/three
# cp file1 file2 dir
# cp file1 missing file2 -> dir

# Make sure it's truncating existing file
# copy with -d at top level, with -d in directory, without -d at top level,
#      without -d in directory