xref: /freebsd/usr.bin/stat/tests/readlink_test.sh (revision a64729f5077d77e13b9497cb33ecb3c82e606ee8)
1#
2# Copyright (c) 2017 Dell EMC
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
27atf_test_case basic
28basic_head()
29{
30	atf_set	"descr" "Verify that calling readlink without any flags " \
31			"prints out the symlink target for a file"
32}
33basic_body()
34{
35	atf_check ln -s foo bar
36	atf_check -o inline:'foo\n' readlink bar
37}
38
39atf_test_case f_flag
40f_flag_head()
41{
42	atf_set	"descr" "Verify that calling readlink with -f will not emit " \
43			"an error message/exit with a non-zero code"
44}
45f_flag_body()
46{
47	atf_check touch A.file
48	atf_check ln -s nonexistent A.link
49	atf_check -o inline:"nonexistent\n" \
50	    -s exit:1 readlink A.file A.link
51	atf_check -o inline:"$(realpath A.file)\n$PWD/nonexistent\n" \
52	    -s exit:1 readlink -f A.file A.link
53}
54
55atf_test_case n_flag
56n_flag_head()
57{
58}
59n_flag_body()
60{
61	atf_check ln -s nonexistent.A A
62	atf_check ln -s nonexistent.B B
63	atf_check -o 'inline:nonexistent.A\nnonexistent.B\n' readlink A B
64	atf_check -o 'inline:nonexistent.Anonexistent.B' readlink -n A B
65}
66
67atf_init_test_cases()
68{
69	atf_add_test_case basic
70	atf_add_test_case f_flag
71	atf_add_test_case n_flag
72}
73