ln_test.sh revision 321819
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: stable/10/bin/ln/tests/ln_test.sh 321819 2017-07-31 21:42:18Z asomers $ 27# 28 29set_umask() 30{ 31 if ! umask 022; then 32 atf_fail "setting umask failed" 33 fi 34} 35 36atf_test_case L_flag 37L_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 44L_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:'B: symbolic link to A\n' file B 54} 55 56atf_test_case P_flag 57P_flag_head() 58{ 59 atf_set "descr" "Verify that when creating a hard link to a " \ 60 "symbolic link, '-P' option creates a hard " \ 61 "link to the symbolic link itself" 62} 63 64P_flag_body() 65{ 66 set_umask 67 atf_check touch A 68 atf_check ln -s A B 69 atf_check ln -P B C 70 stat_B=$(stat -f %i B) 71 stat_C=$(stat -f %i C) 72 atf_check_equal "$stat_B" "$stat_C" 73} 74 75atf_test_case f_flag 76f_flag_head() 77{ 78 atf_set "descr" "Verify that if the target file already exists, " \ 79 "'-f' option unlinks it so that link may occur" 80} 81 82f_flag_body() 83{ 84 set_umask 85 atf_check touch A B 86 atf_check ln -f A B 87 stat_A=$(stat -f %i A) 88 stat_B=$(stat -f %i B) 89 atf_check_equal "$stat_A" "$stat_B" 90} 91 92atf_test_case target_exists_hard 93target_exists_hard_head() 94{ 95 atf_set "descr" "Verify whether creating a hard link fails if the " \ 96 "target file already exists" 97} 98 99target_exists_hard_body() 100{ 101 set_umask 102 atf_check touch A B 103 atf_check -s exit:1 -e inline:'ln: B: File exists\n' \ 104 ln A B 105} 106 107atf_test_case target_exists_symbolic 108target_exists_symbolic_head() 109{ 110 atf_set "descr" "Verify whether creating a symbolic link fails if " \ 111 "the target file already exists" 112} 113 114target_exists_symbolic_body() 115{ 116 set_umask 117 atf_check touch A B 118 atf_check -s exit:1 -e inline:'ln: B: File exists\n' \ 119 ln -s A B 120} 121 122atf_test_case shf_flag_dir 123shf_flag_dir_head() { 124 atf_set "descr" "Verify that if the target directory is a symbolic " \ 125 "link, '-shf' option prevents following the link" 126} 127 128shf_flag_dir_body() 129{ 130 atf_check mkdir -m 0777 A B 131 atf_check ln -s A C 132 atf_check ln -shf B C 133 atf_check -o inline:'C: symbolic link to B\n' file C 134} 135 136atf_test_case snf_flag_dir 137snf_flag_dir_head() { 138 atf_set "descr" "Verify that if the target directory is a symbolic " \ 139 "link, '-snf' option prevents following the link" 140} 141 142snf_flag_dir_body() 143{ 144 atf_check mkdir -m 0777 A B 145 atf_check ln -s A C 146 atf_check ln -snf B C 147 atf_check -o inline:'C: symbolic link to B\n' file C 148} 149 150atf_test_case sF_flag 151sF_flag_head() 152{ 153 atf_set "descr" "Verify that if the target file already exists " \ 154 "and is a directory, then '-sF' option removes " \ 155 "it so that the link may occur" 156} 157 158sF_flag_body() 159{ 160 atf_check mkdir A B 161 atf_check ln -sF A B 162 atf_check -o inline:'Symbolic Link\n' stat -f %SHT B 163 atf_check -o inline:'A\n' readlink B 164} 165 166atf_test_case sf_flag 167sf_flag_head() 168{ 169 atf_set "descr" "Verify that if the target file already exists, " \ 170 "'-sf' option unlinks it and creates a symbolic link " \ 171 "to the source file" 172} 173 174sf_flag_body() 175{ 176 set_umask 177 atf_check touch A B 178 atf_check ln -sf A B 179 atf_check -o inline:'B: symbolic link to A\n' file B 180} 181 182atf_test_case s_flag 183s_flag_head() 184{ 185 atf_set "descr" "Verify that '-s' option creates a symbolic link" 186} 187 188s_flag_body() 189{ 190 set_umask 191 atf_check touch A 192 atf_check ln -s A B 193 atf_check -o inline:'B: symbolic link to A\n' file B 194} 195 196atf_test_case s_flag_broken 197s_flag_broken_head() 198{ 199 atf_set "descr" "Verify that if the source file does not exists, '-s' " \ 200 "option creates a broken symbolic link to the source file" 201} 202 203s_flag_broken_body() 204{ 205 atf_check ln -s A B 206 atf_check -o inline:'B: broken symbolic link to A\n' file B 207} 208 209atf_test_case sw_flag 210sw_flag_head() 211{ 212 atf_set "descr" "Verify that '-sw' option produces a warning if the " \ 213 "source of a symbolic link does not currently exist" 214} 215 216sw_flag_body() 217{ 218 atf_check -s exit:0 -e inline:'ln: warning: A: No such file or directory\n' \ 219 ln -sw A B 220 atf_check -o inline:'B: broken symbolic link to A\n' file B 221} 222 223atf_init_test_cases() 224{ 225 atf_add_test_case L_flag 226 atf_add_test_case P_flag 227 atf_add_test_case f_flag 228 atf_add_test_case target_exists_hard 229 atf_add_test_case target_exists_symbolic 230 atf_add_test_case shf_flag_dir 231 atf_add_test_case snf_flag_dir 232 atf_add_test_case sF_flag 233 atf_add_test_case sf_flag 234 atf_add_test_case s_flag 235 atf_add_test_case s_flag_broken 236 atf_add_test_case sw_flag 237} 238