xref: /freebsd/usr.bin/mktemp/tests/mktemp_test.sh (revision d22f03636be1c012951f744f414b0d410970808e)
1ac6f924eSKyle Evans#
2ac6f924eSKyle Evans# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
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# $FreeBSD$
28ac6f924eSKyle Evans
29ac6f924eSKyle Evansatf_test_case tmpdir_env
30ac6f924eSKyle Evanstmpdir_env_body()
31ac6f924eSKyle Evans{
32ac6f924eSKyle Evans
33ac6f924eSKyle Evans	tmpdir="$PWD"
34ac6f924eSKyle Evans
35ac6f924eSKyle Evans	atf_check -o match:"^$tmpdir/foo\..+$" \
36ac6f924eSKyle Evans	    env TMPDIR="$tmpdir" mktemp -t foo
37ac6f924eSKyle Evans}
38ac6f924eSKyle Evans
39ac6f924eSKyle Evansatf_test_case tmpdir_pflag
40ac6f924eSKyle Evanstmpdir_pflag_body()
41ac6f924eSKyle Evans{
42ac6f924eSKyle Evans
43ac6f924eSKyle Evans	mkdir tmp_p tmp_env
44ac6f924eSKyle Evans
45ac6f924eSKyle Evans	tmpdir="$PWD/tmp_env"
46ac6f924eSKyle Evans	export TMPDIR="$tmpdir"
47ac6f924eSKyle Evans
48ac6f924eSKyle Evans	pflag="$PWD/tmp_p"
49ac6f924eSKyle Evans
50ac6f924eSKyle Evans	# Basic usage: just -p specified
51ac6f924eSKyle Evans	atf_check -o match:"^$pflag/tmp\..+$" \
52ac6f924eSKyle Evans	    env -u TMPDIR mktemp -p "$pflag"
53ac6f924eSKyle Evans	atf_check -o match:"^$pflag/tmp\..+$" \
54ac6f924eSKyle Evans	    env TMPDIR="$tmpdir" mktemp -p "$pflag"
55ac6f924eSKyle Evans
56ac6f924eSKyle Evans	# -p with a list of names
57ac6f924eSKyle Evans	atf_check -o ignore env -u TMPDIR mktemp -p "$pflag" x y z
58ac6f924eSKyle Evans	atf_check test -f "$pflag/x"
59ac6f924eSKyle Evans	atf_check test -f "$pflag/y"
60ac6f924eSKyle Evans	atf_check test -f "$pflag/z"
61ac6f924eSKyle Evans
62ac6f924eSKyle Evans	# Checking --tmpdir usage, which should defer to $TMPDIR followed by
63ac6f924eSKyle Evans	# /tmp with no value specified.
64ac6f924eSKyle Evans	atf_check -o match:"^/tmp/foo\..+$" \
65ac6f924eSKyle Evans	    env -u TMPDIR mktemp --tmpdir -t foo
66ac6f924eSKyle Evans	atf_check -o match:"^$tmpdir/foo\..+$" \
67ac6f924eSKyle Evans	    env TMPDIR="$tmpdir" mktemp --tmpdir -t foo
68ac6f924eSKyle Evans
69ac6f924eSKyle Evans	# Finally, combined -p -t
70ac6f924eSKyle Evans	atf_check -o match:"^$pflag/foo\..+$" \
71ac6f924eSKyle Evans	    env -u TMPDIR mktemp -p "$pflag" -t foo
72*d22f0363SKyle Evans	atf_check -o match:"^$pflag/foo\..+$" \
73ac6f924eSKyle Evans	    env TMPDIR="$tmpdir" mktemp -p "$pflag" -t foo
74ac6f924eSKyle Evans}
75ac6f924eSKyle Evans
76ac6f924eSKyle Evansatf_test_case tmpdir_pflag_dir
77ac6f924eSKyle Evanstmpdir_pflag_dir_body()
78ac6f924eSKyle Evans{
79ac6f924eSKyle Evans
80ac6f924eSKyle Evans	tmpdir="$PWD"
81ac6f924eSKyle Evans	atf_check -o save:tmpname \
82ac6f924eSKyle Evans	    env -u TMPDIR mktemp -d -p "$tmpdir" -t foo
83ac6f924eSKyle Evans
84ac6f924eSKyle Evans	# Better diagnostics when using -o match: + cat rather than grep.
85ac6f924eSKyle Evans	atf_check -o match:"^$tmpdir/foo\..+$" cat tmpname
86ac6f924eSKyle Evans	cdir=$(cat tmpname)
87ac6f924eSKyle Evans
88ac6f924eSKyle Evans	atf_check test -d "$cdir"
89ac6f924eSKyle Evans
90ac6f924eSKyle Evans	atf_check -o match:"^$tmpdir/footmp$" \
91ac6f924eSKyle Evans	    env -u TMPDIR mktemp -d -p "$tmpdir" footmp
92ac6f924eSKyle Evans	atf_check test -d "$tmpdir/footmp"
93ac6f924eSKyle Evans}
94ac6f924eSKyle Evans
95ac6f924eSKyle Evansatf_test_case tmpdir_pflag_noarg
96ac6f924eSKyle Evanstmpdir_pflag_noarg_body()
97ac6f924eSKyle Evans{
98ac6f924eSKyle Evans
99ac6f924eSKyle Evans	# Without -t, this time; this introduces $TMPDIR without having to use
100ac6f924eSKyle Evans	# it.
101ac6f924eSKyle Evans	tmpdir="$PWD"
102ac6f924eSKyle Evans	atf_check -o save:tmpname \
103ac6f924eSKyle Evans	    env TMPDIR="$tmpdir" mktemp --tmpdir foo.XXXXXXXX
104ac6f924eSKyle Evans	atf_check -o match:"^$tmpdir/foo\..+$" cat tmpname
105ac6f924eSKyle Evans
106ac6f924eSKyle Evans	# An empty string gets the same treatment.
107ac6f924eSKyle Evans	atf_check -o save:tmpname \
108ac6f924eSKyle Evans	    env TMPDIR="$tmpdir" mktemp -p '' foo.XXXXXXXX
109ac6f924eSKyle Evans	atf_check -o match:"^$tmpdir/foo\..+$" cat tmpname
110ac6f924eSKyle Evans}
111ac6f924eSKyle Evans
112a6346c02SKyle Evansatf_test_case tmpdir_tflag_oneslash
113a6346c02SKyle Evanstmpdir_tflag_oneslash_body()
114a6346c02SKyle Evans{
115a6346c02SKyle Evans
116a6346c02SKyle Evans	tmpdir="$PWD"
117a6346c02SKyle Evans
118a6346c02SKyle Evans	# Provided a trailing slash, we shouldn't end up with two trailing
119a6346c02SKyle Evans	# slashes.
120a6346c02SKyle Evans	atf_check -o save:tmpname \
121a6346c02SKyle Evans	    env TMPDIR="$tmpdir/" mktemp -t foo
122a6346c02SKyle Evans	atf_check -o match:"^$tmpdir/foo\..+$" cat tmpname
123a6346c02SKyle Evans}
124a6346c02SKyle Evans
125ac6f924eSKyle Evansatf_init_test_cases()
126ac6f924eSKyle Evans{
127ac6f924eSKyle Evans	atf_add_test_case tmpdir_env
128ac6f924eSKyle Evans	atf_add_test_case tmpdir_pflag
129ac6f924eSKyle Evans	atf_add_test_case tmpdir_pflag_dir
130ac6f924eSKyle Evans	atf_add_test_case tmpdir_pflag_noarg
131a6346c02SKyle Evans	atf_add_test_case tmpdir_tflag_oneslash
132ac6f924eSKyle Evans}
133