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