1*b4dd7d09SAndy Fiddaman# 2*b4dd7d09SAndy Fiddaman# CDDL HEADER START 3*b4dd7d09SAndy Fiddaman# 4*b4dd7d09SAndy Fiddaman# The contents of this file are subject to the terms of the 5*b4dd7d09SAndy Fiddaman# Common Development and Distribution License (the "License"). 6*b4dd7d09SAndy Fiddaman# You may not use this file except in compliance with the License. 7*b4dd7d09SAndy Fiddaman# 8*b4dd7d09SAndy Fiddaman# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*b4dd7d09SAndy Fiddaman# or http://www.opensolaris.org/os/licensing. 10*b4dd7d09SAndy Fiddaman# See the License for the specific language governing permissions 11*b4dd7d09SAndy Fiddaman# and limitations under the License. 12*b4dd7d09SAndy Fiddaman# 13*b4dd7d09SAndy Fiddaman# When distributing Covered Code, include this CDDL HEADER in each 14*b4dd7d09SAndy Fiddaman# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*b4dd7d09SAndy Fiddaman# If applicable, add the following below this CDDL HEADER, with the 16*b4dd7d09SAndy Fiddaman# fields enclosed by brackets "[]" replaced with your own identifying 17*b4dd7d09SAndy Fiddaman# information: Portions Copyright [yyyy] [name of copyright owner] 18*b4dd7d09SAndy Fiddaman# 19*b4dd7d09SAndy Fiddaman# CDDL HEADER END 20*b4dd7d09SAndy Fiddaman# 21*b4dd7d09SAndy Fiddaman 22*b4dd7d09SAndy Fiddaman# 23*b4dd7d09SAndy Fiddaman# Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. 24*b4dd7d09SAndy Fiddaman# 25*b4dd7d09SAndy Fiddaman 26*b4dd7d09SAndy Fiddaman# 27*b4dd7d09SAndy Fiddaman# Run the ksh93 minimum set of tests 28*b4dd7d09SAndy Fiddaman# 29*b4dd7d09SAndy Fiddaman 30*b4dd7d09SAndy Fiddaman# 31*b4dd7d09SAndy Fiddaman# Notes: 32*b4dd7d09SAndy Fiddaman# - "builtins.sh" may fail in some locales like this: 33*b4dd7d09SAndy Fiddaman# -- snip -- 34*b4dd7d09SAndy Fiddaman# ## Running ksh test: LANG='zh_TW.EUC' script='builtins.sh' 35*b4dd7d09SAndy Fiddaman# builtins.sh[274]: printf "%T" now 36*b4dd7d09SAndy Fiddaman# -- snip -- 37*b4dd7d09SAndy Fiddaman# 38*b4dd7d09SAndy Fiddaman# - "options.sh" may currently fail in some locales with: 39*b4dd7d09SAndy Fiddaman# -- snip -- 40*b4dd7d09SAndy Fiddaman# options.sh[145]: -G ** failed -- expected 'bam.c bar bar.c bar/bam.c bar/foo.c foo foo/bam.c', got 'bam.c bar bar/bam.c bar.c bar/foo.c foo foo/bam.c' 41*b4dd7d09SAndy Fiddaman# options.sh[149]: -G **/*.c failed -- expected 'bam.c bar.c bar/bam.c bar/foo.c foo/bam.c', got 'bam.c bar/bam.c bar.c bar/foo.c foo/bam.c' 42*b4dd7d09SAndy Fiddaman# -- snip -- 43*b4dd7d09SAndy Fiddaman# This may be simply a different sort order or a bug in the test suite. 44*b4dd7d09SAndy Fiddaman# Currently under investigation. 45*b4dd7d09SAndy Fiddaman# 46*b4dd7d09SAndy Fiddaman# - "glob.sh" may currently fail in some locales (e.g. en_US.UTF-8) with: 47*b4dd7d09SAndy Fiddaman# -- snip -- 48*b4dd7d09SAndy Fiddaman# glob.sh[157] glob -- expected '<d> <dd> <de> <Beware>', got '<Beware> <d> <dd> <de>' 49*b4dd7d09SAndy Fiddaman# glob.sh[277] glob -- expected '<abc> <abe> <bdir> <ca> <de> <man> <Beware>', got '<abc> <abe> <bdir> <Beware> <ca> <de> <man>' 50*b4dd7d09SAndy Fiddaman# -- snip -- 51*b4dd7d09SAndy Fiddaman# This may be simply a different sort order or a bug in the test suite. 52*b4dd7d09SAndy Fiddaman# Currently under investigation. 53*b4dd7d09SAndy Fiddaman# 54*b4dd7d09SAndy Fiddaman# - These tests need a working system clock, otherwise they'll bite you. 55*b4dd7d09SAndy Fiddaman# 56*b4dd7d09SAndy Fiddaman# - The current list of locales was mainly composed to cover various encodings 57*b4dd7d09SAndy Fiddaman# and all important markets based on suggestions by Sun's i18n team. 58*b4dd7d09SAndy Fiddaman# 59*b4dd7d09SAndy Fiddaman# - More locales should be tested here (via ON_KSH_TEST_LOCALES below). 60*b4dd7d09SAndy Fiddaman# Locales like "ru_RU.KOI8-R","de_DE.UTF-8", "is_IS.ISO8859-1", 61*b4dd7d09SAndy Fiddaman# "is_IS.UTF-8" and "nl_BE.ISO8859-15" are on our wishlist - but 62*b4dd7d09SAndy Fiddaman# that is getting little bit more compliciated because these locales use 63*b4dd7d09SAndy Fiddaman# ',' as decimal delimter. The best solution may be to wait for ksh93 64*b4dd7d09SAndy Fiddaman# being integrated into OS/Net and then change the test sequence to 65*b4dd7d09SAndy Fiddaman# use ksh93's associative/compound variables (this may require a flag 66*b4dd7d09SAndy Fiddaman# day... ;-( ). 67*b4dd7d09SAndy Fiddaman# 68*b4dd7d09SAndy Fiddaman# - Due to the timing sensitivity of some of the tests, these tests should 69*b4dd7d09SAndy Fiddaman# be run on a quiet system with no other activity. 70*b4dd7d09SAndy Fiddaman# 71*b4dd7d09SAndy Fiddaman 72*b4dd7d09SAndy FiddamanTESTSRC= $(LIBSHELLBASE)/common/tests 73*b4dd7d09SAndy Fiddaman 74*b4dd7d09SAndy Fiddaman# ON_KSH_TEST_LOCALES can be overridden via 75*b4dd7d09SAndy Fiddaman# $ export ON_KSH_TEST_LOCALES=<value> # before $ make install # 76*b4dd7d09SAndy FiddamanON_KSH_TEST_LOCALES = \ 77*b4dd7d09SAndy Fiddaman C \ 78*b4dd7d09SAndy Fiddaman en_US.UTF-8 en_US en_US.ISO8859-15@euro \ 79*b4dd7d09SAndy Fiddaman he_IL.UTF-8 \ 80*b4dd7d09SAndy Fiddaman hi_IN.UTF-8 \ 81*b4dd7d09SAndy Fiddaman ja ja_JP.PCK ja_JP.UTF-8 ja_JP.eucJP \ 82*b4dd7d09SAndy Fiddaman ko_KR.UTF-8 ko_KR.EUC \ 83*b4dd7d09SAndy Fiddaman th_TH.TIS620 \ 84*b4dd7d09SAndy Fiddaman zh_CN.EUC zh_CN.GBK \ 85*b4dd7d09SAndy Fiddaman zh_CN.GB18030 zh_CN.GB18030@pinyin zh_CN.GB18030@radical zh_CN.GB18030@stroke \ 86*b4dd7d09SAndy Fiddaman zh_CN.UTF-8 zh_CN.UTF-8@pinyin zh_CN.UTF-8@radical zh_CN.UTF-8@stroke \ 87*b4dd7d09SAndy Fiddaman zh_HK.BIG5HK \ 88*b4dd7d09SAndy Fiddaman zh_TW.BIG5 zh_TW.EUC zh_TW.UTF-8 89*b4dd7d09SAndy Fiddaman 90*b4dd7d09SAndy Fiddaman# ON_KSH_TEST_LIST can be overridden via 91*b4dd7d09SAndy Fiddaman# $ export ON_KSH_TEST_LIST=<value> # before $ make install # 92*b4dd7d09SAndy FiddamanON_KSH_TEST_LIST = $(TESTSRC)/*.sh 93*b4dd7d09SAndy Fiddaman 94*b4dd7d09SAndy Fiddaman# Boolean (true/false) flag to control whether we should make test 95*b4dd7d09SAndy Fiddaman# failures non-fatal 96*b4dd7d09SAndy FiddamanON_KSH_TEST_IGNORE_TESTFAILURE=false 97*b4dd7d09SAndy Fiddaman 98*b4dd7d09SAndy Fiddaman# We must wait for other things in this subdir to finish before running 99*b4dd7d09SAndy Fiddaman# the test suite, otherwise we may run into trouble that this activity 100*b4dd7d09SAndy Fiddaman# may disturb the test suite run (resulting in weird "heisenbug"-like 101*b4dd7d09SAndy Fiddaman# test failures). 102*b4dd7d09SAndy Fiddamantestshell: $(PROG) 103*b4dd7d09SAndy Fiddaman @ \ 104*b4dd7d09SAndy Fiddaman builtin basename ; \ 105*b4dd7d09SAndy Fiddaman print '# NOTE: Make sure your binaries in ROOT match your kernel!' ; \ 106*b4dd7d09SAndy Fiddaman ( \ 107*b4dd7d09SAndy Fiddaman set +o errexit ; \ 108*b4dd7d09SAndy Fiddaman export PATH="$(SRC)/cmd/ksh/$(LIBSHELLMACH):/bin:/usr/bin" ; \ 109*b4dd7d09SAndy Fiddaman printf "# which ksh='%s', ksh93='%s'\n" \ 110*b4dd7d09SAndy Fiddaman "$$(which ksh)" "$$(which ksh93)" ; \ 111*b4dd7d09SAndy Fiddaman ) ; \ 112*b4dd7d09SAndy Fiddaman if [[ "$$(isalist)" != ~(F)$(LIBSHELLMACH) ]] ; then \ 113*b4dd7d09SAndy Fiddaman printf \ 114*b4dd7d09SAndy Fiddaman "# ISA='%s' not available on this system, skipping tests...\n" \ 115*b4dd7d09SAndy Fiddaman "$(LIBSHELLMACH)" ; \ 116*b4dd7d09SAndy Fiddaman exit 0 ; \ 117*b4dd7d09SAndy Fiddaman fi ; \ 118*b4dd7d09SAndy Fiddaman print "# Libraries used:" ; \ 119*b4dd7d09SAndy Fiddaman LD_LIBRARY_PATH_64="$(ROOTLIB64)/" \ 120*b4dd7d09SAndy Fiddaman LD_LIBRARY_PATH_32="$(ROOTLIB)/" \ 121*b4dd7d09SAndy Fiddaman LD_LIBRARY_PATH="$(ROOTLIB64)/:$(ROOTLIB)/" \ 122*b4dd7d09SAndy Fiddaman /usr/bin/ldd "$(SRC)/cmd/ksh/$(LIBSHELLMACH)/ksh" ; \ 123*b4dd7d09SAndy Fiddaman print "# Running tests:" ; \ 124*b4dd7d09SAndy Fiddaman redirect 2>&1 ; \ 125*b4dd7d09SAndy Fiddaman (supported_locales="$$(/usr/bin/locale -a)" ; \ 126*b4dd7d09SAndy Fiddaman for test_lang in $(ON_KSH_TEST_LOCALES) ; do \ 127*b4dd7d09SAndy Fiddaman if [[ "$$(egrep "^$${test_lang}\$$" <<< "$${supported_locales}")" == "" ]] ; then \ 128*b4dd7d09SAndy Fiddaman printf \ 129*b4dd7d09SAndy Fiddaman "# Locale '%s' not supported, skipping tests...\n" \ 130*b4dd7d09SAndy Fiddaman "$${test_lang}" ; \ 131*b4dd7d09SAndy Fiddaman continue ; \ 132*b4dd7d09SAndy Fiddaman fi ; \ 133*b4dd7d09SAndy Fiddaman (for test_item in $(ON_KSH_TEST_LIST) ; do \ 134*b4dd7d09SAndy Fiddaman [[ "$${test_item}" == "$(TESTSRC)/builtins.sh" || \ 135*b4dd7d09SAndy Fiddaman "$${test_item}" == "$(TESTSRC)/glob.sh" || \ 136*b4dd7d09SAndy Fiddaman "$${test_item}" == "$(TESTSRC)/options.sh" ]] || \ 137*b4dd7d09SAndy Fiddaman $(ON_KSH_TEST_IGNORE_TESTFAILURE) && \ 138*b4dd7d09SAndy Fiddaman set +o errexit ; \ 139*b4dd7d09SAndy Fiddaman for mode in 'plain_script:-s' 'compiled_script:-c' ; do \ 140*b4dd7d09SAndy Fiddaman printf \ 141*b4dd7d09SAndy Fiddaman "## Running %s test: LANG='%s' script='%s', mode='%s'\n" \ 142*b4dd7d09SAndy Fiddaman "$(LIBSHELLMACH)/ksh" \ 143*b4dd7d09SAndy Fiddaman "$${test_lang}" \ 144*b4dd7d09SAndy Fiddaman "$$(basename "$${test_item}")" \ 145*b4dd7d09SAndy Fiddaman "$${mode%:*}"; \ 146*b4dd7d09SAndy Fiddaman ( \ 147*b4dd7d09SAndy Fiddaman ulimit -s 65536 ; \ 148*b4dd7d09SAndy Fiddaman test_output="$$( ( \ 149*b4dd7d09SAndy Fiddaman export \ 150*b4dd7d09SAndy Fiddaman SHELL="$(SRC)/cmd/ksh/$(LIBSHELLMACH)/ksh" \ 151*b4dd7d09SAndy Fiddaman LD_LIBRARY_PATH_64="$(ROOTLIB64)/" \ 152*b4dd7d09SAndy Fiddaman LD_LIBRARY_PATH_32="$(ROOTLIB)/" \ 153*b4dd7d09SAndy Fiddaman LD_LIBRARY_PATH="$(ROOTLIB64)/:$(ROOTLIB)/" ; \ 154*b4dd7d09SAndy Fiddaman "$${SHELL}" "$(TESTSRC)/shtests" -t "$${mode#*:}" \ 155*b4dd7d09SAndy Fiddaman LD_LIBRARY_PATH_64="$${LD_LIBRARY_PATH_64}" \ 156*b4dd7d09SAndy Fiddaman LD_LIBRARY_PATH_32="$${LD_LIBRARY_PATH_32}" \ 157*b4dd7d09SAndy Fiddaman LD_LIBRARY_PATH="$${LD_LIBRARY_PATH}" \ 158*b4dd7d09SAndy Fiddaman SHELL="$${SHELL}" \ 159*b4dd7d09SAndy Fiddaman LANG="$${test_lang}" \ 160*b4dd7d09SAndy Fiddaman LC_ALL="$${test_lang}" \ 161*b4dd7d09SAndy Fiddaman VMALLOC_OPTIONS=abort \ 162*b4dd7d09SAndy Fiddaman SHCOMP="$(ROOTBIN)/shcomp" \ 163*b4dd7d09SAndy Fiddaman "$${test_item}" \ 164*b4dd7d09SAndy Fiddaman ) 2>&1 | while read ; do \ 165*b4dd7d09SAndy Fiddaman printf "#\t%s\n" "$${REPLY}" ; \ 166*b4dd7d09SAndy Fiddaman done | tee /dev/stderr)" ; \ 167*b4dd7d09SAndy Fiddaman [[ "$${test_output}" == ~(E)test.*passed\ \[\ [[:digit:]]*\ test.*\ 0\ errors\ \] ]] || \ 168*b4dd7d09SAndy Fiddaman (print "##--------> test failed" ; exit 1) \ 169*b4dd7d09SAndy Fiddaman ) ; \ 170*b4dd7d09SAndy Fiddaman done ; \ 171*b4dd7d09SAndy Fiddaman set -o errexit ; \ 172*b4dd7d09SAndy Fiddaman done) ; \ 173*b4dd7d09SAndy Fiddaman done) 174