1171195Sscf#!/bin/sh
2171195Sscf#
3181150Sscf# Copyright (c) 2007-2008 Sean C. Farley <scf@FreeBSD.org>
4171195Sscf# All rights reserved.
5171195Sscf# 
6171195Sscf# Redistribution and use in source and binary forms, with or without
7171195Sscf# modification, are permitted provided that the following conditions
8171195Sscf# are met:
9171195Sscf# 1. Redistributions of source code must retain the above copyright
10171195Sscf#    notice, this list of conditions and the following disclaimer,
11171195Sscf#    without modification, immediately at the beginning of the file.
12171195Sscf# 2. Redistributions in binary form must reproduce the above copyright
13171195Sscf#    notice, this list of conditions and the following disclaimer in the
14171195Sscf#    documentation and/or other materials provided with the distribution.
15171195Sscf# 
16171195Sscf# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17171195Sscf# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18171195Sscf# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19171195Sscf# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20171195Sscf# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21171195Sscf# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22171195Sscf# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23171195Sscf# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24171195Sscf# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25171195Sscf# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26171195Sscf#
27171195Sscf# $FreeBSD$
28171195Sscf
29171195Sscf
30171195Sscf# Initialization.
31171195Sscftestndx=0
32171195Sscf
33171195Sscf
34171195Sscf# Testing function.
35171195Sscfrun_test()
36171195Sscf{
37171195Sscf	lasttest="${@}"
38171195Sscf	result=`./envctl -t "${@}"`
39171195Sscf
40171195Sscf	if [ ${?} -ne 0 ]
41171195Sscf	then
42171195Sscf		echo "Test program failed" >&2
43171195Sscf		exit 1
44171195Sscf	fi
45171195Sscf
46171195Sscf	return
47171195Sscf}
48171195Sscf
49171195Sscf
50171195Sscf# Perform test on results.
51171195Sscfcheck_result()
52171195Sscf{
53171195Sscf	testndx=$((testndx + 1))
54171195Sscf
55171195Sscf	echo "${result}" | sed 's/[ \t]*$//' | grep -q "^${@}$"
56171195Sscf	if [ ${?} -eq 0 ]
57171195Sscf	then
58171195Sscf		echo "ok ${testndx}"
59171195Sscf	else
60171195Sscf		echo "not ok ${testndx} - '${lasttest}'"
61171195Sscf	fi
62171195Sscf
63171195Sscf	return
64171195Sscf}
65171195Sscf
66171195Sscf
67171195Sscf#
68171195Sscf# Regression tests
69171195Sscf#
70171195Sscf
71178430Sscf# How NULL will be returned by program.
72178430Sscfreadonly NULL="\*NULL\*"
73178430Sscf
74171195Sscf# Setup environment for tests.
75171195Sscfreadonly BAR="bar"
76171195Sscfreadonly NEWBAR="newbar"
77171195Sscfexport FOO=${BAR}
78171195Sscf
79171195Sscf
80171195Sscf# Gets from environ.
81171195Sscfrun_test -g FOO
82171195Sscfcheck_result "${FOO}"
83171195Sscf
84181150Sscfrun_test -c 3 -g FOO
85178430Sscfcheck_result "${NULL}"
86171195Sscf
87171195Sscfrun_test -g FOOBAR
88178430Sscfcheck_result "${NULL}"
89171195Sscf
90181150Sscfrun_test -c 3 -g FOOBAR
91178430Sscfcheck_result "${NULL}"
92171195Sscf
93171195Sscfrun_test -G
94178430Sscfcheck_result "${NULL}"
95171195Sscf
96171195Sscf
97181150Sscf# Clear environ.
98181150Sscfrun_test -c 1 -g FOO
99181150Sscfcheck_result "${NULL}"
100181150Sscf
101181150Sscfrun_test -c 2 -g FOO
102181150Sscfcheck_result "${NULL}"
103181150Sscf
104181150Sscfrun_test -c 3 -g FOO
105181150Sscfcheck_result "${NULL}"
106181150Sscf
107181150Sscfrun_test -c 4 -g FOO
108181150Sscfcheck_result "${NULL}"
109181150Sscf
110181150Sscf
111181150Sscf# Clear environ and verify values do not return after a set.
112181150Sscfrun_test -c 1 -g FOO -s FOO2 ${NEWBAR} 1 -g FOO -g FOO2
113181150Sscfcheck_result "${NULL} 0 0 ${NULL} ${NEWBAR}"
114181150Sscf
115181150Sscfrun_test -c 2 -g FOO -s FOO2 ${NEWBAR} 1 -g FOO -g FOO2
116181150Sscfcheck_result "${NULL} 0 0 ${NULL} ${NEWBAR}"
117181150Sscf
118181150Sscfrun_test -c 3 -g FOO -s FOO2 ${NEWBAR} 1 -g FOO -g FOO2
119181150Sscfcheck_result "${NULL} 0 0 ${NULL} ${NEWBAR}"
120181150Sscf
121181150Sscfrun_test -c 4 -g FOO -s FOO2 ${NEWBAR} 1 -g FOO -g FOO2
122181150Sscfcheck_result "${NULL} 0 0 ${NULL} ${NEWBAR}"
123181150Sscf
124181150Sscf
125171195Sscf# Sets.
126171195Sscfrun_test -s FOO ${NEWBAR} 0 -g FOO
127171195Sscfcheck_result "0 0 ${BAR}"
128171195Sscf
129171195Sscfrun_test -s FOO ${NEWBAR} 1 -g FOO
130171195Sscfcheck_result "0 0 ${NEWBAR}"
131171195Sscf
132181150Sscfrun_test -c 3 -s FOO ${NEWBAR} 0 -g FOO
133171195Sscfcheck_result "0 0 ${NEWBAR}"
134171195Sscf
135181150Sscfrun_test -c 3 -s FOO ${NEWBAR} 1 -g FOO
136171195Sscfcheck_result "0 0 ${NEWBAR}"
137171195Sscf
138171195Sscfrun_test -s "FOO=" ${NEWBAR} 1 -g FOO
139171195Sscfcheck_result "-1 22 ${BAR}"
140171195Sscf
141171195Sscfrun_test -s "=FOO" ${NEWBAR} 1
142171195Sscfcheck_result "-1 22"
143171195Sscf
144171195Sscfrun_test -s "=" ${NEWBAR} 1
145171195Sscfcheck_result "-1 22"
146171195Sscf
147171195Sscfrun_test -s "" ${NEWBAR} 1
148171195Sscfcheck_result "-1 22"
149171195Sscf
150171195Sscfrun_test -S ${NEWBAR} 1
151171195Sscfcheck_result "-1 22"
152171195Sscf
153171195Sscfrun_test -s FOO ${NEWBAR} 1 -s FOO ${BAR} 1 -g FOO
154171195Sscfcheck_result "0 0 0 0 ${BAR}"
155171195Sscf
156181150Sscfrun_test -c 3 -s FOO ${NEWBAR} 1 -s FOO ${BAR} 1 -g FOO
157171195Sscfcheck_result "0 0 0 0 ${BAR}"
158171195Sscf
159171195Sscfrun_test -s FOO ${NEWBAR} 1 -s FOO ${BAR} 1 -s FOO ${NEWBAR} 1 -g FOO
160171195Sscfcheck_result "0 0 0 0 0 0 ${NEWBAR}"
161171195Sscf
162171195Sscfrun_test -s FOO ${NEWBAR} 1 -s FOO ${BAR} 1 -s FOO ${NEWBAR} 1 -s FOO ${BAR} 1\
163171195Sscf	-g FOO
164171195Sscfcheck_result "0 0 0 0 0 0 0 0 ${BAR}"
165171195Sscf
166181150Sscfrun_test -c 3 -s FOO ${BAR} 1 -g FOO -c 3 -s FOO ${NEWBAR} 1 -g FOO
167171525Sscfcheck_result "0 0 ${BAR} 0 0 ${NEWBAR}"
168171195Sscf
169171525Sscf
170171195Sscf# Unsets.
171171195Sscfrun_test -u FOO -g FOO
172178430Sscfcheck_result "0 0 ${NULL}"
173171195Sscf
174181150Sscfrun_test -c 3 -u FOO -g FOO
175178430Sscfcheck_result "0 0 ${NULL}"
176171195Sscf
177171195Sscfrun_test -U
178171195Sscfcheck_result "-1 22"
179171195Sscf
180171195Sscfrun_test -u ""
181171195Sscfcheck_result "-1 22"
182171195Sscf
183171195Sscfrun_test -u "=${BAR}"
184171195Sscfcheck_result "-1 22"
185171195Sscf
186181150Sscfrun_test -c 3 -s FOO ${NEWBAR} 1 -g FOO -u FOO -g FOO
187178430Sscfcheck_result "0 0 ${NEWBAR} 0 0 ${NULL}"
188171195Sscf
189181150Sscfrun_test -c 3 -u FOO -s FOO ${BAR} 1 -g FOO -u FOO -g FOO -c 3 -u FOO\
190171525Sscf	-s FOO ${NEWBAR} 1 -g FOO
191178430Sscfcheck_result "0 0 0 0 ${BAR} 0 0 ${NULL} 0 0 0 0 ${NEWBAR}"
192171195Sscf
193171525Sscf
194171195Sscf# Puts.
195171195Sscfrun_test -p FOO=${NEWBAR} -g FOO
196171195Sscfcheck_result "0 0 ${NEWBAR}"
197171195Sscf
198181150Sscfrun_test -c 3 -p FOO=${NEWBAR} -g FOO
199171195Sscfcheck_result "0 0 ${NEWBAR}"
200171195Sscf
201171195Sscfrun_test -p FOO -g FOO
202171195Sscfcheck_result "-1 22 ${BAR}"
203171195Sscf
204171195Sscfrun_test -p FOO=${BAR} -p FOO=${NEWBAR} -g FOO
205171195Sscfcheck_result "0 0 0 0 ${NEWBAR}"
206171195Sscf
207171195Sscfrun_test -p FOO=${BAR} -s FOO ${NEWBAR} 1 -g FOO
208171195Sscfcheck_result "0 0 0 0 ${NEWBAR}"
209171195Sscf
210171195Sscfrun_test -s FOO ${NEWBAR} 1 -p FOO=${BAR} -g FOO
211171195Sscfcheck_result "0 0 0 0 ${BAR}"
212171195Sscf
213171195Sscfrun_test -p FOO=${BAR} -u FOO
214171195Sscfcheck_result "0 0 0 0"
215171195Sscf
216171195Sscfrun_test -p FOO=${BAR} -s FOO ${NEWBAR} 1 -u FOO
217171195Sscfcheck_result "0 0 0 0 0 0"
218171195Sscf
219171195Sscfrun_test -s FOO ${NEWBAR} 1 -p FOO=${BAR} -u FOO
220171195Sscfcheck_result "0 0 0 0 0 0"
221171525Sscf
222181150Sscfrun_test -s FOO ${NEWBAR} 1 -p FOO=${BAR} -c 3 -g FOO -p FOO=${NEWBAR} -g FOO
223178430Sscfcheck_result "0 0 0 0 ${NULL} 0 0 ${NEWBAR}"
224171525Sscf
225181150Sscfrun_test -c 3 -p FOO=${BAR} -g FOO -c 3 -p FOO=${NEWBAR} -g FOO
226171525Sscfcheck_result "0 0 ${BAR} 0 0 ${NEWBAR}"
227171525Sscf
228171525Sscf
229171525Sscf# environ replacements.
230171525Sscfrun_test -r -g FOO -s FOO ${BAR} 1 -g FOO -u FOO -g FOO
231178430Sscfcheck_result "${BAR} 0 0 ${BAR} 0 0 ${NULL}"
232171525Sscf
233171525Sscfrun_test -r -g FOO -u FOO -g FOO -s FOO ${BAR} 1 -g FOO
234178430Sscfcheck_result "${BAR} 0 0 ${NULL} 0 0 ${BAR}"
235199983Sgreen
236199983Sgreen
237199983Sgreen# corruption (blanking) of environ members.
238199983Sgreenexport BLANK_ME=
239199983Sgreenexport AFTER_BLANK=blanked
240199983Sgreenrun_test -b BLANK_ME -p MORE=vars -g FOO -g BLANK_ME -g AFTER_BLANK
241199983Sgreencheck_result "0 0 ${FOO} ${NULL} ${AFTER_BLANK}"
242199983Sgreen
243199983Sgreenrun_test -b BLANK_ME -u FOO -g FOO -g AFTER_BLANK
244199983Sgreencheck_result "0 0 ${NULL} ${AFTER_BLANK}"
245199983Sgreen
246199983Sgreenexport BLANK_ME2=
247199983Sgreenexport AFTER_BLANKS=blankD
248199983Sgreenrun_test -b BLANK_ME -b AFTER_BLANK -b BLANK_ME2 -g FOO -g AFTER_BLANKS
249199983Sgreencheck_result "${FOO} ${AFTER_BLANKS}"
250