]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - bin/ln/tests/ln_test.sh
Add two missing eventhandler.h headers
[FreeBSD/FreeBSD.git] / bin / ln / tests / ln_test.sh
1 #
2 # Copyright 2017 Shivansh Rai
3 # All rights reserved.
4 #
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions
7 # are met:
8 # 1. Redistributions of source code must retain the above copyright
9 #    notice, this list of conditions and the following disclaimer.
10 # 2. Redistributions in binary form must reproduce the above copyright
11 #    notice, this list of conditions and the following disclaimer in the
12 #    documentation and/or other materials provided with the distribution.
13 #
14 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 # ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 # SUCH DAMAGE.
25 #
26 # $FreeBSD$
27 #
28
29 set_umask()
30 {
31         if ! umask 022; then
32                 atf_fail "setting umask failed"
33         fi
34 }
35
36 atf_test_case L_flag
37 L_flag_head()
38 {
39         atf_set "descr" "Verify that when creating a hard link to a " \
40                         "symbolic link, '-L' option creates a hard" \
41                         "link to the target of the symbolic link"
42 }
43
44 L_flag_body()
45 {
46         set_umask
47         atf_check touch A
48         atf_check ln -s A B
49         atf_check ln -L B C
50         stat_A=$(stat -f %i A)
51         stat_C=$(stat -f %i C)
52         atf_check_equal "$stat_A" "$stat_C"
53         atf_check -o inline:'Symbolic Link\n' stat -f %SHT B
54         atf_check -o inline:'A\n' readlink B
55 }
56
57 atf_test_case P_flag
58 P_flag_head()
59 {
60         atf_set "descr" "Verify that when creating a hard link to a " \
61                         "symbolic link, '-P' option creates a hard " \
62                         "link to the symbolic link itself"
63 }
64
65 P_flag_body()
66 {
67         set_umask
68         atf_check touch A
69         atf_check ln -s A B
70         atf_check ln -P B C
71         stat_B=$(stat -f %i B)
72         stat_C=$(stat -f %i C)
73         atf_check_equal "$stat_B" "$stat_C"
74 }
75
76 atf_test_case f_flag
77 f_flag_head()
78 {
79         atf_set "descr" "Verify that if the target file already exists, " \
80                         "'-f' option unlinks it so that link may occur"
81 }
82
83 f_flag_body()
84 {
85         set_umask
86         atf_check touch A B
87         atf_check ln -f A B
88         stat_A=$(stat -f %i A)
89         stat_B=$(stat -f %i B)
90         atf_check_equal "$stat_A" "$stat_B"
91 }
92
93 atf_test_case target_exists_hard
94 target_exists_hard_head()
95 {
96         atf_set "descr" "Verify whether creating a hard link fails if the " \
97                         "target file already exists"
98 }
99
100 target_exists_hard_body()
101 {
102         set_umask
103         atf_check touch A B
104         atf_check -s exit:1 -e inline:'ln: B: File exists\n' \
105                 ln A B
106 }
107
108 atf_test_case target_exists_symbolic
109 target_exists_symbolic_head()
110 {
111         atf_set "descr" "Verify whether creating a symbolic link fails if " \
112                         "the target file already exists"
113 }
114
115 target_exists_symbolic_body()
116 {
117         set_umask
118         atf_check touch A B
119         atf_check -s exit:1 -e inline:'ln: B: File exists\n' \
120                 ln -s A B
121 }
122
123 atf_test_case shf_flag_dir
124 shf_flag_dir_head() {
125         atf_set "descr" "Verify that if the target directory is a symbolic " \
126                         "link, '-shf' option prevents following the link"
127 }
128
129 shf_flag_dir_body()
130 {
131         atf_check mkdir -m 0777 A B
132         atf_check ln -s A C
133         atf_check ln -shf B C
134         atf_check -o inline:'Symbolic Link\n' stat -f %SHT C
135         atf_check -o inline:'B\n' readlink C
136 }
137
138 atf_test_case snf_flag_dir
139 snf_flag_dir_head() {
140         atf_set "descr" "Verify that if the target directory is a symbolic " \
141                         "link, '-snf' option prevents following the link"
142 }
143
144 snf_flag_dir_body()
145 {
146         atf_check mkdir -m 0777 A B
147         atf_check ln -s A C
148         atf_check ln -snf B C
149         atf_check -o inline:'Symbolic Link\n' stat -f %SHT C
150         atf_check -o inline:'B\n' readlink C
151 }
152
153 atf_test_case sF_flag
154 sF_flag_head()
155 {
156         atf_set "descr" "Verify that if the target file already exists " \
157                         "and is a directory, then '-sF' option removes " \
158                         "it so that the link may occur"
159 }
160
161 sF_flag_body()
162 {
163         atf_check mkdir A B
164         atf_check ln -sF A B
165         atf_check -o inline:'Symbolic Link\n' stat -f %SHT B
166         atf_check -o inline:'A\n' readlink B
167 }
168
169 atf_test_case sf_flag
170 sf_flag_head()
171 {
172         atf_set "descr" "Verify that if the target file already exists, " \
173                         "'-sf' option unlinks it and creates a symbolic link " \
174                         "to the source file"
175 }
176
177 sf_flag_body()
178 {
179         set_umask
180         atf_check touch A B
181         atf_check ln -sf A B
182         atf_check -o inline:'Symbolic Link\n' stat -f %SHT B
183         atf_check -o inline:'A\n' readlink B
184 }
185
186 atf_test_case s_flag
187 s_flag_head()
188 {
189         atf_set "descr" "Verify that '-s' option creates a symbolic link"
190 }
191
192 s_flag_body()
193 {
194         set_umask
195         atf_check touch A
196         atf_check ln -s A B
197         atf_check -o inline:'Symbolic Link\n' stat -f %SHT B
198         atf_check -o inline:'A\n' readlink B
199 }
200
201 atf_test_case s_flag_broken
202 s_flag_broken_head()
203 {
204         atf_set "descr" "Verify that if the source file does not exists, '-s' " \
205                         "option creates a broken symbolic link to the source file"
206 }
207
208 s_flag_broken_body()
209 {
210         atf_check ln -s A B
211         atf_check -o inline:'Symbolic Link\n' stat -f %SHT B
212         atf_check -o inline:'A\n' readlink B
213 }
214
215 atf_test_case sw_flag
216 sw_flag_head()
217 {
218         atf_set "descr" "Verify that '-sw' option produces a warning if the " \
219                         "source of a symbolic link does not currently exist"
220 }
221
222 sw_flag_body()
223 {
224         atf_check -s exit:0 -e inline:'ln: warning: A: No such file or directory\n' \
225                 ln -sw A B
226         atf_check -o inline:'Symbolic Link\n' stat -f %SHT B
227         atf_check -o inline:'A\n' readlink B
228 }
229
230 atf_init_test_cases()
231 {
232         atf_add_test_case L_flag
233         atf_add_test_case P_flag
234         atf_add_test_case f_flag
235         atf_add_test_case target_exists_hard
236         atf_add_test_case target_exists_symbolic
237         atf_add_test_case shf_flag_dir
238         atf_add_test_case snf_flag_dir
239         atf_add_test_case sF_flag
240         atf_add_test_case sf_flag
241         atf_add_test_case s_flag
242         atf_add_test_case s_flag_broken
243         atf_add_test_case sw_flag
244 }