aboutsummaryrefslogtreecommitdiff
path: root/usr.bin/mktemp/tests/mktemp_test.sh
blob: e37e6128aba0b124754aa653f55e84e22c19c30d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#
# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2022 Klara Systems
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# $FreeBSD$

atf_test_case tmpdir_env
tmpdir_env_body()
{

	tmpdir="$PWD"

	atf_check -o match:"^$tmpdir/foo\..+$" \
	    env TMPDIR="$tmpdir" mktemp -t foo
}

atf_test_case tmpdir_pflag
tmpdir_pflag_body()
{

	mkdir tmp_p tmp_env

	tmpdir="$PWD/tmp_env"
	export TMPDIR="$tmpdir"

	pflag="$PWD/tmp_p"

	# Basic usage: just -p specified
	atf_check -o match:"^$pflag/tmp\..+$" \
	    env -u TMPDIR mktemp -p "$pflag"
	atf_check -o match:"^$pflag/tmp\..+$" \
	    env TMPDIR="$tmpdir" mktemp -p "$pflag"

	# -p with a list of names
	atf_check -o ignore env -u TMPDIR mktemp -p "$pflag" x y z
	atf_check test -f "$pflag/x"
	atf_check test -f "$pflag/y"
	atf_check test -f "$pflag/z"

	# Checking --tmpdir usage, which should defer to $TMPDIR followed by
	# /tmp with no value specified.
	atf_check -o match:"^/tmp/foo\..+$" \
	    env -u TMPDIR mktemp --tmpdir -t foo
	atf_check -o match:"^$tmpdir/foo\..+$" \
	    env TMPDIR="$tmpdir" mktemp --tmpdir -t foo

	# Finally, combined -p -t
	atf_check -o match:"^$pflag/foo\..+$" \
	    env -u TMPDIR mktemp -p "$pflag" -t foo
	atf_check -o match:"^$pflag/foo\..+$" \
	    env TMPDIR="$tmpdir" mktemp -p "$pflag" -t foo
}

atf_test_case tmpdir_pflag_dir
tmpdir_pflag_dir_body()
{

	tmpdir="$PWD"
	atf_check -o save:tmpname \
	    env -u TMPDIR mktemp -d -p "$tmpdir" -t foo

	# Better diagnostics when using -o match: + cat rather than grep.
	atf_check -o match:"^$tmpdir/foo\..+$" cat tmpname
	cdir=$(cat tmpname)

	atf_check test -d "$cdir"

	atf_check -o match:"^$tmpdir/footmp$" \
	    env -u TMPDIR mktemp -d -p "$tmpdir" footmp
	atf_check test -d "$tmpdir/footmp"
}

atf_test_case tmpdir_pflag_noarg
tmpdir_pflag_noarg_body()
{

	# Without -t, this time; this introduces $TMPDIR without having to use
	# it.
	tmpdir="$PWD"
	atf_check -o save:tmpname \
	    env TMPDIR="$tmpdir" mktemp --tmpdir foo.XXXXXXXX
	atf_check -o match:"^$tmpdir/foo\..+$" cat tmpname

	# An empty string gets the same treatment.
	atf_check -o save:tmpname \
	    env TMPDIR="$tmpdir" mktemp -p '' foo.XXXXXXXX
	atf_check -o match:"^$tmpdir/foo\..+$" cat tmpname
}

atf_test_case tmpdir_tflag_oneslash
tmpdir_tflag_oneslash_body()
{

	tmpdir="$PWD"

	# Provided a trailing slash, we shouldn't end up with two trailing
	# slashes.
	atf_check -o save:tmpname \
	    env TMPDIR="$tmpdir/" mktemp -t foo
	atf_check -o match:"^$tmpdir/foo\..+$" cat tmpname
}

atf_init_test_cases()
{
	atf_add_test_case tmpdir_env
	atf_add_test_case tmpdir_pflag
	atf_add_test_case tmpdir_pflag_dir
	atf_add_test_case tmpdir_pflag_noarg
	atf_add_test_case tmpdir_tflag_oneslash
}