1*dcdfe824SRobert Mustacchi#!/usr/bin/ksh 2*dcdfe824SRobert Mustacchi# 3*dcdfe824SRobert Mustacchi# This file and its contents are supplied under the terms of the 4*dcdfe824SRobert Mustacchi# Common Development and Distribution License ("CDDL"), version 1.0. 5*dcdfe824SRobert Mustacchi# You may only use this file in accordance with the terms of version 6*dcdfe824SRobert Mustacchi# 1.0 of the CDDL. 7*dcdfe824SRobert Mustacchi# 8*dcdfe824SRobert Mustacchi# A full copy of the text of the CDDL should have accompanied this 9*dcdfe824SRobert Mustacchi# source. A copy of the CDDL is also available via the Internet at 10*dcdfe824SRobert Mustacchi# http://www.illumos.org/license/CDDL. 11*dcdfe824SRobert Mustacchi# 12*dcdfe824SRobert Mustacchi 13*dcdfe824SRobert Mustacchi# 14*dcdfe824SRobert Mustacchi# Copyright 2016 Joyent, Inc. 15*dcdfe824SRobert Mustacchi# 16*dcdfe824SRobert Mustacchi 17*dcdfe824SRobert Mustacchi# 18*dcdfe824SRobert Mustacchi# Test quick_exit(3C). We specifically test the following things: 19*dcdfe824SRobert Mustacchi# o That we get a requested exit status 20*dcdfe824SRobert Mustacchi# o That at_quick_exit() functions fire in a registered, reverse order. 21*dcdfe824SRobert Mustacchi# 22*dcdfe824SRobert Mustacchi# These are all done by helper programs 23*dcdfe824SRobert Mustacchi# 24*dcdfe824SRobert Mustacchi 25*dcdfe824SRobert Mustacchiset -o errexit 26*dcdfe824SRobert Mustacchiset -o pipefail 27*dcdfe824SRobert Mustacchi 28*dcdfe824SRobert Mustacchiqe_root=$(dirname $0) 29*dcdfe824SRobert Mustacchiqe_status32=$qe_root/quick_exit_status.32 30*dcdfe824SRobert Mustacchiqe_status64=$qe_root/quick_exit_status.64 31*dcdfe824SRobert Mustacchiqe_order32=$qe_root/quick_exit_order.32 32*dcdfe824SRobert Mustacchiqe_order64=$qe_root/quick_exit_order.64 33*dcdfe824SRobert Mustacchi 34*dcdfe824SRobert Mustacchifunction fatal 35*dcdfe824SRobert Mustacchi{ 36*dcdfe824SRobert Mustacchi typeset msg="$*" 37*dcdfe824SRobert Mustacchi echo "Test Failed: $msg" >&2 38*dcdfe824SRobert Mustacchi exit 1 39*dcdfe824SRobert Mustacchi} 40*dcdfe824SRobert Mustacchi 41*dcdfe824SRobert Mustacchifunction check_status 42*dcdfe824SRobert Mustacchi{ 43*dcdfe824SRobert Mustacchi typeset stat=$1 44*dcdfe824SRobert Mustacchi $qe_status32 $stat 45*dcdfe824SRobert Mustacchi if [[ $? -ne $stat ]]; then 46*dcdfe824SRobert Mustacchi fatal "Test failed: Expected $qestatus32 to exit $stat " \ 47*dcdfe824SRobert Mustacchi "got $?" 48*dcdfe824SRobert Mustacchi fi 49*dcdfe824SRobert Mustacchi 50*dcdfe824SRobert Mustacchi $qe_status64 $stat 51*dcdfe824SRobert Mustacchi if [[ $? -ne $stat ]]; then 52*dcdfe824SRobert Mustacchi fatal "Test failed: Expected $qestatus64 to exit $stat " \ 53*dcdfe824SRobert Mustacchi "got $?" >&2 54*dcdfe824SRobert Mustacchi fi 55*dcdfe824SRobert Mustacchi} 56*dcdfe824SRobert Mustacchi 57*dcdfe824SRobert Mustacchifunction check_order 58*dcdfe824SRobert Mustacchi{ 59*dcdfe824SRobert Mustacchi $qe_order32 || fatal "$qe_order32 returned $?" 60*dcdfe824SRobert Mustacchi $qe_order64 || fatal "$qe_order32 returned $?" 61*dcdfe824SRobert Mustacchi} 62*dcdfe824SRobert Mustacchi 63*dcdfe824SRobert Mustacchicheck_status 0 64*dcdfe824SRobert Mustacchicheck_status 23 65*dcdfe824SRobert Mustacchicheck_status 42 66*dcdfe824SRobert Mustacchicheck_order 67*dcdfe824SRobert Mustacchiexit 0 68