xref: /freebsd/tools/regression/environ/envtest.t (revision 61e21613)
1#!/bin/sh
2#
3# Copyright (c) 2007-2008 Sean C. Farley <scf@FreeBSD.org>
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:
9# 1. Redistributions of source code must retain the above copyright
10#    notice, this list of conditions and the following disclaimer,
11#    without modification, immediately at the beginning of the file.
12# 2. Redistributions in binary form must reproduce the above copyright
13#    notice, this list of conditions and the following disclaimer in the
14#    documentation and/or other materials provided with the distribution.
15#
16# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26#
27
28
29# Initialization.
30testndx=0
31
32
33# Testing function.
34run_test()
35{
36	lasttest="${@}"
37	result=`./envctl -t "${@}"`
38
39	if [ ${?} -ne 0 ]
40	then
41		echo "Test program failed" >&2
42		exit 1
43	fi
44
45	return
46}
47
48
49# Perform test on results.
50check_result()
51{
52	testndx=$((testndx + 1))
53
54	echo "${result}" | sed 's/[ \t]*$//' | grep -q "^${@}$"
55	if [ ${?} -eq 0 ]
56	then
57		echo "ok ${testndx}"
58	else
59		echo "not ok ${testndx} - '${lasttest}'"
60	fi
61
62	return
63}
64
65
66#
67# Regression tests
68#
69
70# How NULL will be returned by program.
71readonly NULL="\*NULL\*"
72
73# Setup environment for tests.
74readonly BAR="bar"
75readonly NEWBAR="newbar"
76export FOO=${BAR}
77
78
79# Gets from environ.
80run_test -g FOO
81check_result "${FOO}"
82
83run_test -c 3 -g FOO
84check_result "${NULL}"
85
86run_test -g FOOBAR
87check_result "${NULL}"
88
89run_test -c 3 -g FOOBAR
90check_result "${NULL}"
91
92run_test -G
93check_result "${NULL}"
94
95
96# Clear environ.
97run_test -c 1 -g FOO
98check_result "${NULL}"
99
100run_test -c 2 -g FOO
101check_result "${NULL}"
102
103run_test -c 3 -g FOO
104check_result "${NULL}"
105
106run_test -c 4 -g FOO
107check_result "${NULL}"
108
109
110# Clear environ and verify values do not return after a set.
111run_test -c 1 -g FOO -s FOO2 ${NEWBAR} 1 -g FOO -g FOO2
112check_result "${NULL} 0 0 ${NULL} ${NEWBAR}"
113
114run_test -c 2 -g FOO -s FOO2 ${NEWBAR} 1 -g FOO -g FOO2
115check_result "${NULL} 0 0 ${NULL} ${NEWBAR}"
116
117run_test -c 3 -g FOO -s FOO2 ${NEWBAR} 1 -g FOO -g FOO2
118check_result "${NULL} 0 0 ${NULL} ${NEWBAR}"
119
120run_test -c 4 -g FOO -s FOO2 ${NEWBAR} 1 -g FOO -g FOO2
121check_result "${NULL} 0 0 ${NULL} ${NEWBAR}"
122
123
124# Sets.
125run_test -s FOO ${NEWBAR} 0 -g FOO
126check_result "0 0 ${BAR}"
127
128run_test -s FOO ${NEWBAR} 1 -g FOO
129check_result "0 0 ${NEWBAR}"
130
131run_test -c 3 -s FOO ${NEWBAR} 0 -g FOO
132check_result "0 0 ${NEWBAR}"
133
134run_test -c 3 -s FOO ${NEWBAR} 1 -g FOO
135check_result "0 0 ${NEWBAR}"
136
137run_test -s "FOO=" ${NEWBAR} 1 -g FOO
138check_result "-1 22 ${BAR}"
139
140run_test -s "=FOO" ${NEWBAR} 1
141check_result "-1 22"
142
143run_test -s "=" ${NEWBAR} 1
144check_result "-1 22"
145
146run_test -s "" ${NEWBAR} 1
147check_result "-1 22"
148
149run_test -S ${NEWBAR} 1
150check_result "-1 22"
151
152run_test -s FOO ${NEWBAR} 1 -s FOO ${BAR} 1 -g FOO
153check_result "0 0 0 0 ${BAR}"
154
155run_test -c 3 -s FOO ${NEWBAR} 1 -s FOO ${BAR} 1 -g FOO
156check_result "0 0 0 0 ${BAR}"
157
158run_test -s FOO ${NEWBAR} 1 -s FOO ${BAR} 1 -s FOO ${NEWBAR} 1 -g FOO
159check_result "0 0 0 0 0 0 ${NEWBAR}"
160
161run_test -s FOO ${NEWBAR} 1 -s FOO ${BAR} 1 -s FOO ${NEWBAR} 1 -s FOO ${BAR} 1\
162	-g FOO
163check_result "0 0 0 0 0 0 0 0 ${BAR}"
164
165run_test -c 3 -s FOO ${BAR} 1 -g FOO -c 3 -s FOO ${NEWBAR} 1 -g FOO
166check_result "0 0 ${BAR} 0 0 ${NEWBAR}"
167
168
169# Unsets.
170run_test -u FOO -g FOO
171check_result "0 0 ${NULL}"
172
173run_test -c 3 -u FOO -g FOO
174check_result "0 0 ${NULL}"
175
176run_test -U
177check_result "-1 22"
178
179run_test -u ""
180check_result "-1 22"
181
182run_test -u "=${BAR}"
183check_result "-1 22"
184
185run_test -c 3 -s FOO ${NEWBAR} 1 -g FOO -u FOO -g FOO
186check_result "0 0 ${NEWBAR} 0 0 ${NULL}"
187
188run_test -c 3 -u FOO -s FOO ${BAR} 1 -g FOO -u FOO -g FOO -c 3 -u FOO\
189	-s FOO ${NEWBAR} 1 -g FOO
190check_result "0 0 0 0 ${BAR} 0 0 ${NULL} 0 0 0 0 ${NEWBAR}"
191
192
193# Puts.
194run_test -p FOO=${NEWBAR} -g FOO
195check_result "0 0 ${NEWBAR}"
196
197run_test -c 3 -p FOO=${NEWBAR} -g FOO
198check_result "0 0 ${NEWBAR}"
199
200run_test -p FOO -g FOO
201check_result "-1 22 ${BAR}"
202
203run_test -p FOO=${BAR} -p FOO=${NEWBAR} -g FOO
204check_result "0 0 0 0 ${NEWBAR}"
205
206run_test -p FOO=${BAR} -s FOO ${NEWBAR} 1 -g FOO
207check_result "0 0 0 0 ${NEWBAR}"
208
209run_test -s FOO ${NEWBAR} 1 -p FOO=${BAR} -g FOO
210check_result "0 0 0 0 ${BAR}"
211
212run_test -p FOO=${BAR} -u FOO
213check_result "0 0 0 0"
214
215run_test -p FOO=${BAR} -s FOO ${NEWBAR} 1 -u FOO
216check_result "0 0 0 0 0 0"
217
218run_test -s FOO ${NEWBAR} 1 -p FOO=${BAR} -u FOO
219check_result "0 0 0 0 0 0"
220
221run_test -s FOO ${NEWBAR} 1 -p FOO=${BAR} -c 3 -g FOO -p FOO=${NEWBAR} -g FOO
222check_result "0 0 0 0 ${NULL} 0 0 ${NEWBAR}"
223
224run_test -c 3 -p FOO=${BAR} -g FOO -c 3 -p FOO=${NEWBAR} -g FOO
225check_result "0 0 ${BAR} 0 0 ${NEWBAR}"
226
227
228# environ replacements.
229run_test -r -g FOO -s FOO ${BAR} 1 -g FOO -u FOO -g FOO
230check_result "${BAR} 0 0 ${BAR} 0 0 ${NULL}"
231
232run_test -r -g FOO -u FOO -g FOO -s FOO ${BAR} 1 -g FOO
233check_result "${BAR} 0 0 ${NULL} 0 0 ${BAR}"
234
235
236# corruption (blanking) of environ members.
237export BLANK_ME=
238export AFTER_BLANK=blanked
239run_test -b BLANK_ME -p MORE=vars -g FOO -g BLANK_ME -g AFTER_BLANK
240check_result "0 0 ${FOO} ${NULL} ${AFTER_BLANK}"
241
242run_test -b BLANK_ME -u FOO -g FOO -g AFTER_BLANK
243check_result "0 0 ${NULL} ${AFTER_BLANK}"
244
245export BLANK_ME2=
246export AFTER_BLANKS=blankD
247run_test -b BLANK_ME -b AFTER_BLANK -b BLANK_ME2 -g FOO -g AFTER_BLANKS
248check_result "${FOO} ${AFTER_BLANKS}"
249