File: testsuite-common

package info (click to toggle)
insserv 1.12.0-4
  • links: PTS, VCS
  • area: main
  • in suites: lenny
  • size: 560 kB
  • ctags: 412
  • sloc: ansic: 3,808; sh: 1,346; perl: 353; makefile: 234
file content (319 lines) | stat: -rw-r--r-- 6,752 bytes parent folder | download
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
#
# Common test suite definitions, declarations, and functions
#
set -eC
set +o posix
unset ${!LC@}
export LANG=POSIX

: ${insserv:=${PWD}/insserv}
: ${tmpdir:=${PWD}/root}
: ${initddir:=${tmpdir}/etc/init.d}
: ${insconf:=${tmpdir}/etc/insserv.conf}
: ${overridedir:=${tmpdir}/etc/insserv/override}
: ${issuse=""}
: ${debug:=""}

declare -i retval=0
declare -i checkfailed=0
declare -i testcount=0
declare -i testfailed=0
finish_test ()
{
    if test 0 -ne $retval ; then
        echo "error: $testcount test executed, $checkfailed fatal tests failed, $testfailed nonfatal test failed."
    else
        echo "success: $testcount test executed, $testfailed nonfatal tests failed."
    fi
    rm -rf ${tmpdir}
    return $retval
}
trap 'finish_test' EXIT

mkdir -p $initddir

if test -n "${issuse}" ; then
    runlevel_path ()
    {
	local -a level=($@)
	level=(${level[@]/%s/S})
	level=(${level[@]/#/rc})
	level=(${level[@]/rc[bB]*/boot})
	printf "${initddir}/%s.d\n" ${level[@]}
    }
    list_rclinks()
    {
	pushd $initddir/ &> /dev/null
	echo ${initddir##*/}:
	ls ${1+"$@"} *
	popd &> /dev/null
    }
    cat <<-'EOF' > $insconf
	$local_fs	boot.localfs +boot.crypto
	$network	network
	$named		+named +dnsmasq +lwresd $network
	$remote_fs	$local_fs +nfs +smbfs
	$syslog		syslog
	$portmap	portmap
	$time		boot.clock +ntp
	<interactive>	boot.crypto boot.clock boot.localfs boot.rootfsck apache apache2 kdump ntp
	EOF
else
    runlevel_path ()
    {
	printf "${initddir}/../rc%s.d\n" ${1+"$@"}
    }
    list_rclinks()
    {
	pushd $initddir/../ &> /dev/null
	ls ${1+"$@"} *
	popd &> /dev/null
    }
    cat <<-'EOF' > $insconf
	$local_fs	+mountall +umountfs
	$network	+networking +ifupdown
	$named		+named +dnsmasq +lwresd +bind9 $network
	$remote_fs	$local_fs +mountnfs +mountnfs-bootclean +umountnfs +sendsigs
	$syslog		+syslog +sysklogd
	$portmap	portmap
	$time		hwclock
	<interactive>	udev mountdevsubfs checkroot checkfs console-screen
	EOF
fi
chmod u+w,a+r $insconf

insserv_reg ()
{
    script=$(printf "${initddir}/%s\n" ${1+"$@"})
    $insserv $debug -c $insconf -p $initddir -o $overridedir $script
}

insserv_del ()
{
    script=$(printf "${initddir}/%s\n" ${1+"$@"})
    $insserv $debug -c $insconf -p $initddir -o $overridedir -r $script
}

initdir_purge ()
{
    rm -rf ${initddir} ${initddir}/../rc*.d/
    mkdir -p ${initddir}
}

relpath ()
{
    local OLDIFS IFS
    local -a orgwords
    local -a locwords
    local -i relp=0
    local -i deep=0
    local p l
    local path=""

    OLDIFS="$IFS"; IFS=/
    eval orgwords=(${1// /\\\\ }) ; shift
    eval locwords=(${1// /\\\\ }) ; shift
    IFS="$OLDIFS"
    unset OLDIFS

    deep=0
    relp=0
    for l in "${locwords[@]}" ; do
        if test "$l" = ".." ; then
	    ((deep++))
	    continue
	elif test $deep -gt 0 ; then
	    while ((deep-- > 0)) ; do
		unset locwords[$((relp+deep))]
		(((relp-1)-deep < 0)) || unset locwords[$(((relp-1)-deep))]
	    done
	    continue
        fi
	((relp++))
    done
    locwords=(${locwords[@]})

    deep=0
    relp=0
    for p in "${orgwords[@]}" ; do
	if test "$p" = ".." ; then
	    ((deep++))
	    continue
	elif test $deep -gt 0 ; then
	    while ((deep-- > 0)) ; do
		unset orgwords[$((relp+deep))]
		(((relp-1)-deep < 0)) || unset orgwords[$(((relp-1)-deep))]
	    done
	    continue
	fi
	((relp++))
    done
    orgwords=(${orgwords[@]})

    deep=0
    relp=0
    for p in "${orgwords[@]}" ; do
	eval l="\${locwords[$((deep++))]}"
	if test "$l" != "$p" -o $relp -ne 0 ; then
	    ((relp++))
	    path="${path}/$p"
	    test -n "$l" || continue
		if test $relp -eq 1 ; then
		    path="..${path}"
		else
		    path="../${path}"
		fi
	 fi
    done
    unset orgwords p l

    if test $deep -lt ${#locwords[@]} ; then
	relp=0
	while test $relp -lt $deep; do
	    unset locwords[$((relp++))]
	done
	while test ${#locwords[@]} -gt 0  ; do
	    path="../${path}"
	    unset locwords[$((relp++))]
	done
    fi

    echo "$path"
}

counttest ()
{
    testcount=$(expr $testcount + 1)
}

error ()
{
    echo error: $@
    checkfailed=$(expr $checkfailed + 1)
    retval=1
}

warning ()
{
    echo warning: $@
    testfailed=$(expr $testfailed + 1)
}

addscript ()
{
    local scriptname=$1
    local script=${initddir}/$scriptname
    cat > $script
    chmod u+w,a+rx $script
}

remscript ()
{
    local scriptname=$1
    local script=${initddir}/$scriptname
    rm -f $script
}

insertscript ()
{
    local scriptname=$1
    addscript   $scriptname
    insserv_reg $scriptname
}

present_ok ()
{
    local rcdpath=$(runlevel_path $1); shift
    local script=$1;   shift
    local ret=0
    test -L ${rcdpath}/[KS][0-9][0-9]$script || ret=1
    counttest
    return $ret
}

check_script_present ()
{
    local runlevel=$1; shift
    local script=$1;   shift
    present_ok $runlevel $script && return 0
    error "script $script not present in runlevel $runlevel"
}

test_script_present ()
{
    local runlevel=$1; shift
    local script=$1;   shift
    present_ok $runlevel $script && return 0
    warning "script $script not present in runlevel $runlevel"
}

check_script_not_present ()
{
    local runlevel=$1; shift
    local script=$1;   shift
    if present_ok $runlevel $script ; then
	error "script $script present in runlevel $runlevel"
    fi
    return 0
}

test_script_not_present ()
{
    local runlevel=$1; shift
    local script=$1;   shift
    if present_ok $runlevel $script ; then
	warning "script $script present in runlevel $runlevel"
    fi
    return 0
}

order_ok ()
{
    local rcdpath=$(runlevel_path $1); shift
    local script1=$1;  shift
    local script2=$1;  shift
    local ret=0 scr order=""
    pushd $rcdpath &> /dev/null
    if test -n "${issuse}" ; then
	for scr in S[0-9][0-9]* ; do
	    test -e "${scr}" || continue
	    test -L "${scr}" || continue
	    case "${scr#S[0-9][0-9]}" in
	    ${script1}) order="${order:+$order }${script1}" ;;
	    ${script2}) order="${order:+$order }${script2}" ;;
	    esac
	done
    else
	for scr in [SK][0-9][0-9]* ; do
	    test -e "${scr}" || continue
	    test -L "${scr}" || continue
	    case "${scr#[SK][0-9][0-9]}" in
	    ${script1}) order="${order:+$order }${script1}" ;;
	    ${script2}) order="${order:+$order }${script2}" ;;
	    esac
	done
    fi
    popd &> /dev/null
    test "$order" = "$script1 $script2" || ret=1
    counttest
    return $ret
}

# Fatal check
check_order ()
{
    local runlevel=$1
    local script1=$2
    local script2=$3
    order_ok ${1+"$@"} || error   "incorrect $runlevel sequence $script1 not before $script2" || true
}

# Non-fatal check
test_order ()
{
    local runlevel=$1
    local script1=$2
    local script2=$3
    order_ok ${1+"$@"} || warning "incorrect $runlevel sequence $script1 not before $script2" || true
}