xref: /freebsd/usr.bin/mktemp/tests/mktemp_test.sh (revision d0b2dbfa0ecf2bbc9709efc5e20baf8e4b44bbbf)
1ac6f924eSKyle Evans#
2*4d846d26SWarner Losh# SPDX-License-Identifier: BSD-2-Clause
3ac6f924eSKyle Evans#
4ac6f924eSKyle Evans# Copyright (c) 2022 Klara Systems
5ac6f924eSKyle Evans#
6ac6f924eSKyle Evans# Redistribution and use in source and binary forms, with or without
7ac6f924eSKyle Evans# modification, are permitted provided that the following conditions
8ac6f924eSKyle Evans# are met:
9ac6f924eSKyle Evans# 1. Redistributions of source code must retain the above copyright
10ac6f924eSKyle Evans#    notice, this list of conditions and the following disclaimer.
11ac6f924eSKyle Evans# 2. Redistributions in binary form must reproduce the above copyright
12ac6f924eSKyle Evans#    notice, this list of conditions and the following disclaimer in the
13ac6f924eSKyle Evans#    documentation and/or other materials provided with the distribution.
14ac6f924eSKyle Evans#
15ac6f924eSKyle Evans# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16ac6f924eSKyle Evans# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17ac6f924eSKyle Evans# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ac6f924eSKyle Evans# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19ac6f924eSKyle Evans# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20ac6f924eSKyle Evans# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21ac6f924eSKyle Evans# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22ac6f924eSKyle Evans# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23ac6f924eSKyle Evans# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24ac6f924eSKyle Evans# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25ac6f924eSKyle Evans# SUCH DAMAGE.
26ac6f924eSKyle Evans#
27ac6f924eSKyle Evans
28ac6f924eSKyle Evansatf_test_case tmpdir_env
29ac6f924eSKyle Evanstmpdir_env_body()
30ac6f924eSKyle Evans{
31ac6f924eSKyle Evans
32ac6f924eSKyle Evans	tmpdir="$PWD"
33ac6f924eSKyle Evans
34ac6f924eSKyle Evans	atf_check -o match:"^$tmpdir/foo\..+$" \
35ac6f924eSKyle Evans	    env TMPDIR="$tmpdir" mktemp -t foo
36ac6f924eSKyle Evans}
37ac6f924eSKyle Evans
38ac6f924eSKyle Evansatf_test_case tmpdir_pflag
39ac6f924eSKyle Evanstmpdir_pflag_body()
40ac6f924eSKyle Evans{
41ac6f924eSKyle Evans
42ac6f924eSKyle Evans	mkdir tmp_p tmp_env
43ac6f924eSKyle Evans
44ac6f924eSKyle Evans	tmpdir="$PWD/tmp_env"
45ac6f924eSKyle Evans	export TMPDIR="$tmpdir"
46ac6f924eSKyle Evans
47ac6f924eSKyle Evans	pflag="$PWD/tmp_p"
48ac6f924eSKyle Evans
49ac6f924eSKyle Evans	# Basic usage: just -p specified
50ac6f924eSKyle Evans	atf_check -o match:"^$pflag/tmp\..+$" \
51ac6f924eSKyle Evans	    env -u TMPDIR mktemp -p "$pflag"
52ac6f924eSKyle Evans	atf_check -o match:"^$pflag/tmp\..+$" \
53ac6f924eSKyle Evans	    env TMPDIR="$tmpdir" mktemp -p "$pflag"
54ac6f924eSKyle Evans
55ac6f924eSKyle Evans	# -p with a list of names
56ac6f924eSKyle Evans	atf_check -o ignore env -u TMPDIR mktemp -p "$pflag" x y z
57ac6f924eSKyle Evans	atf_check test -f "$pflag/x"
58ac6f924eSKyle Evans	atf_check test -f "$pflag/y"
59ac6f924eSKyle Evans	atf_check test -f "$pflag/z"
60ac6f924eSKyle Evans
61ac6f924eSKyle Evans	# Checking --tmpdir usage, which should defer to $TMPDIR followed by
62ac6f924eSKyle Evans	# /tmp with no value specified.
63ac6f924eSKyle Evans	atf_check -o match:"^/tmp/foo\..+$" \
64ac6f924eSKyle Evans	    env -u TMPDIR mktemp --tmpdir -t foo
65ac6f924eSKyle Evans	atf_check -o match:"^$tmpdir/foo\..+$" \
66ac6f924eSKyle Evans	    env TMPDIR="$tmpdir" mktemp --tmpdir -t foo
67ac6f924eSKyle Evans
68ac6f924eSKyle Evans	# Finally, combined -p -t
69ac6f924eSKyle Evans	atf_check -o match:"^$pflag/foo\..+$" \
70ac6f924eSKyle Evans	    env -u TMPDIR mktemp -p "$pflag" -t foo
71d22f0363SKyle Evans	atf_check -o match:"^$pflag/foo\..+$" \
72ac6f924eSKyle Evans	    env TMPDIR="$tmpdir" mktemp -p "$pflag" -t foo
73ac6f924eSKyle Evans}
74ac6f924eSKyle Evans
75ac6f924eSKyle Evansatf_test_case tmpdir_pflag_dir
76ac6f924eSKyle Evanstmpdir_pflag_dir_body()
77ac6f924eSKyle Evans{
78ac6f924eSKyle Evans
79ac6f924eSKyle Evans	tmpdir="$PWD"
80ac6f924eSKyle Evans	atf_check -o save:tmpname \
81ac6f924eSKyle Evans	    env -u TMPDIR mktemp -d -p "$tmpdir" -t foo
82ac6f924eSKyle Evans
83ac6f924eSKyle Evans	# Better diagnostics when using -o match: + cat rather than grep.
84ac6f924eSKyle Evans	atf_check -o match:"^$tmpdir/foo\..+$" cat tmpname
85ac6f924eSKyle Evans	cdir=$(cat tmpname)
86ac6f924eSKyle Evans
87ac6f924eSKyle Evans	atf_check test -d "$cdir"
88ac6f924eSKyle Evans
89ac6f924eSKyle Evans	atf_check -o match:"^$tmpdir/footmp$" \
90ac6f924eSKyle Evans	    env -u TMPDIR mktemp -d -p "$tmpdir" footmp
91ac6f924eSKyle Evans	atf_check test -d "$tmpdir/footmp"
92ac6f924eSKyle Evans}
93ac6f924eSKyle Evans
94ac6f924eSKyle Evansatf_test_case tmpdir_pflag_noarg
95ac6f924eSKyle Evanstmpdir_pflag_noarg_body()
96ac6f924eSKyle Evans{
97ac6f924eSKyle Evans
98ac6f924eSKyle Evans	# Without -t, this time; this introduces $TMPDIR without having to use
99ac6f924eSKyle Evans	# it.
100ac6f924eSKyle Evans	tmpdir="$PWD"
101ac6f924eSKyle Evans	atf_check -o save:tmpname \
102ac6f924eSKyle Evans	    env TMPDIR="$tmpdir" mktemp --tmpdir foo.XXXXXXXX
103ac6f924eSKyle Evans	atf_check -o match:"^$tmpdir/foo\..+$" cat tmpname
104ac6f924eSKyle Evans
105ac6f924eSKyle Evans	# An empty string gets the same treatment.
106ac6f924eSKyle Evans	atf_check -o save:tmpname \
107ac6f924eSKyle Evans	    env TMPDIR="$tmpdir" mktemp -p '' foo.XXXXXXXX
108ac6f924eSKyle Evans	atf_check -o match:"^$tmpdir/foo\..+$" cat tmpname
109ac6f924eSKyle Evans}
110ac6f924eSKyle Evans
111a6346c02SKyle Evansatf_test_case tmpdir_tflag_oneslash
112a6346c02SKyle Evanstmpdir_tflag_oneslash_body()
113a6346c02SKyle Evans{
114a6346c02SKyle Evans
115a6346c02SKyle Evans	tmpdir="$PWD"
116a6346c02SKyle Evans
117a6346c02SKyle Evans	# Provided a trailing slash, we shouldn't end up with two trailing
118a6346c02SKyle Evans	# slashes.
119a6346c02SKyle Evans	atf_check -o save:tmpname \
120a6346c02SKyle Evans	    env TMPDIR="$tmpdir/" mktemp -t foo
121a6346c02SKyle Evans	atf_check -o match:"^$tmpdir/foo\..+$" cat tmpname
122a6346c02SKyle Evans}
123a6346c02SKyle Evans
124ac6f924eSKyle Evansatf_init_test_cases()
125ac6f924eSKyle Evans{
126ac6f924eSKyle Evans	atf_add_test_case tmpdir_env
127ac6f924eSKyle Evans	atf_add_test_case tmpdir_pflag
128ac6f924eSKyle Evans	atf_add_test_case tmpdir_pflag_dir
129ac6f924eSKyle Evans	atf_add_test_case tmpdir_pflag_noarg
130a6346c02SKyle Evans	atf_add_test_case tmpdir_tflag_oneslash
131ac6f924eSKyle Evans}
132