1#
2# CDDL HEADER START
3#
4# The contents of this file are subject to the terms of the
5# Common Development and Distribution License (the "License").
6# You may not use this file except in compliance with the License.
7#
8# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9# or http://www.opensolaris.org/os/licensing.
10# See the License for the specific language governing permissions
11# and limitations under the License.
12#
13# When distributing Covered Code, include this CDDL HEADER in each
14# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15# If applicable, add the following below this CDDL HEADER, with the
16# fields enclosed by brackets "[]" replaced with your own identifying
17# information: Portions Copyright [yyyy] [name of copyright owner]
18#
19# CDDL HEADER END
20#
21
22#
23# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24# Use is subject to license terms.
25#
26
27#
28# Test whether the ksh93/poll builtin works as expected
29#
30
31# test setup
32function err_exit
33{
34	print -u2 -n "\t"
35	print -u2 -r ${Command}[$1]: "${@:2}"
36	(( Errors++ ))
37}
38alias err_exit='err_exit $LINENO'
39
40set -o nounset
41Command=${0##*/}
42integer Errors=0
43
44
45builtin -f libshell.so.1 poll || err_exit "poll builtin not found."
46
47compound d1=(
48	compound -A u=(
49		[y]=( fd=5 events="POLLIN" revents="" )
50		[x]=( fd=5 events="POLLIN" revents="" )
51	)
52)
53
54# test 1:
55cat /dev/zero | { redirect 5<&0 ; poll -e d1.res -t 5. d1.u ; } || err_exit "poll returned non-zero exit code $?"
56[[ "${d1.u[x].revents}" == "POLLIN" ]] || err_exit "d1.u[x].revents contains '${d1.u[x].revents}', not POLLIN"
57[[ "${d1.u[y].revents}" == "POLLIN" ]] || err_exit "d1.u[y].revents contains '${d1.u[y].revents}', not POLLIN"
58[[ "${d1.res[*]}" == "x y" ]] || err_exit "d1.res contains '${d1.res[*]}', not 'x y'"
59
60# test 2:
61unset d1.res
62
63d1.u[z]=( fd=5 events="POLLOUT" revents="" )
64{ poll -e d1.res -t 5. d1.u ; } 5</dev/null 5>/dev/null || err_exit "poll returned non-zero exit code $?"
65[[ "${d1.u[x].revents}" == "POLLIN"             ]] || err_exit "d1.u[x].revents contains '${d1.u[x].revents}', not 'POLLIN'"
66[[ "${d1.u[y].revents}" == "POLLIN"             ]] || err_exit "d1.u[y].revents contains '${d1.u[y].revents}', not 'POLLIN'"
67[[ "${d1.u[z].revents}" == "POLLOUT|POLLWRNORM" ]] || err_exit "d1.u[z].revents contains '${d1.u[z].revents}', not 'POLLOUT|POLLWRNORM,'"
68[[ "${d1.res[*]}" == "x y z" ]] || err_exit "d1.res contains '${d1.res[*]}', not 'x y z'"
69
70
71# tests done
72exit $((Errors))
73