From 014f0e14a3c6a044d99a67c8f4e1c4065452479e Mon Sep 17 00:00:00 2001 From: Didier Raboud Date: Sun, 23 May 2010 00:05:04 +0200 Subject: Imported Upstream version 4.0-20090301 --- test/lsbfuncs.sh | 387 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 387 insertions(+) create mode 100755 test/lsbfuncs.sh (limited to 'test/lsbfuncs.sh') diff --git a/test/lsbfuncs.sh b/test/lsbfuncs.sh new file mode 100755 index 0000000..7ff8fb7 --- /dev/null +++ b/test/lsbfuncs.sh @@ -0,0 +1,387 @@ +# lsbfuncs.sh : LSB test suite specific common shell functions +# +########################################################################## +# (C) Copyright 1998-2001 The Open Group +# +# All rights reserved. No part of this source code may be reproduced, +# stored in a retrieval system, or transmitted, in any form or by any +# means, electronic, mechanical, photocopying, recording or otherwise, +# except as stated in the end-user licence agreement, without the prior +# permission of the copyright owners. +# +# X/Open and the 'X' symbol are trademarks of X/Open Company Limited in +# the UK and other countries. +# +# PROJECT: LSB-FHS +# PRODUCT: LSB.fhs/SRC/lsblib/lsbfuncs.sh +# AUTHOR: Andrew Josey, The Open Group +# DATE CREATED: 21 Dec 1998 +########################################################################## + +# This is $Revision: 1.6 $ +# +# $Log: lsbfuncs.sh,v $ +# Revision 1.6 2002/01/17 02:21:24 cyeoh +# modifies lsb_test_symlink soboth symlink "from" and "to" are followed +# for symlinks. This changes the behaviour such that if the "to" is +# a symlink but "from" does point to what "to" points to then it returns +# true. +# +# Revision 1.5 2001/07/20 11:49:47 ajosey +# add further diagnostics +# +# Revision 1.4 2001/07/20 11:27:33 ajosey +# add in more diagnostics to lsb_test_file +# +# Revision 1.3 2001/07/20 11:20:08 ajosey +# add in diagnostic to lsb_test_file +# +# Revision 1.2 2001/07/18 06:58:55 ajosey +# add header, and cvs revision stuff +# +# +#Current contents +# lsb_setarch() +# lsb_test_symlink() +# lsb_test_dir() +# lsb_test_dir_searchable() +# lsb_test_file() +# lsb_test_exec +# lsb_test_device_by_name() +# These functions return the following codes +# +# PASS=0 +# FAIL=1 +# WARNING=2 +# UNRESOLVED=3 +# + +# lsb_setarch: sets the $lsb_arch environment variable to the +# current architecture +lsb_setarch() +{ + lsb_arch=`uname -m` + case $lsb_arch in + i?86) lsb_arch=i386;; + sparc) lsb_arch=sparc;; + *) lsb_arch=unknown;; + esac +} + +# lsb_test_symlink symlink destination +# Argument 1: symlink from name +# Argument 2: to name +# Returns +# 0 = PASS, yes symlink points to destination +# 1 = FAIL, +# 3 = UNRESOLVED,Setup problem +# +# On a failure or setup problem a diagnostic message is omitted +# +# Calls lsblib routines: +# lsb_realpath, lsb_issymlink +# +lsb_test_symlink() { + func_name=lsb_is_symlink + # validate that we have two arguments + if test $# -lt 2 + then + echo "$func_name: Missing argument"; return 3 # unresolved + fi + from="$1" + to="$2" + + # cannot use test -L as not in POSIX.2 so call wrapper + # that does an lstat() + lsb_issymlink $from + rval=$? + if test $rval -eq 3 # unresolved + then + return 3 # unresolved + fi + if ! test $rval -eq 0 + then + if ! test -e $from + then + echo "$from does not exist (expected symlink to $to)" + return 1 # fail + else + echo "$from expected to be symlink to $to, returned non-symlink" + return 1 # fail + fi + else + # its a symlink so lets validate where it points to + # need to call realpath , which is a c program wrapping on realpath3c + pathptr=`lsb_realpath $from` + if test $? -ne 0 + then + return 3 # unresolved + fi + pathptr_to=`lsb_realpath $to` + if test $? -ne 0 + then + # Destination does not point anywhere + return 3 # unresolved + fi + if test "$pathptr" = "$pathptr_to" + then + return 0 # pass + else + echo "$from expected to be symlink to $to, pointed to $pathptr" + return 1 # fail + fi + fi +} + +# lsb_test_dir filename +# test for presence of a directory called filename +# Argument: filename to test if its a directory +# Returns: 0 PASS , it's a directory +# 1 FAIL, its not a directory or a symlink +# 2 WARNING its a symlink +# 3 UNRESOLVED error +lsb_test_dir() { + func_name=lsb_test_dir + # validate that we have one arguments + if test $# -lt 1 + then + echo "$func_name: Missing argument" + return 3 # unresolved + fi + + _fname=$1 + # if it does not exist then fail + if ! test -e $_fname + then + tet_infoline "$_fname: directory not found" + return 1 # fail + fi + + # since test -d will follow the symlink, we should check + # for a symlink using the lstat wrapper first + lsb_issymlink $_fname + rval=$? + if test $rval -eq 3 # unresolved + then + return 3 # unresolved + fi + if ! test $rval -eq 0 + then + # not a symlink + if test -d $_fname + then + # success + return 0 # pass + else + # not a symlink and not a directory + tet_infoline "$_fname: not a directory or a symlink" + return 1 # fail + fi + else + # warning , its a symlink when we expected a directory + return 2 # warning + fi +} +# lsb_test_dir_searchable filename +# test for presence of a directory and that it can be searched +# Argument: filename +# Returns: 0 PASS , it's a file and it exists +# 1 FAIL, its not a file or a symlink +# 3 UNRESOLVED error +lsb_test_dir_searchable() { + func_name=lsb_test_dir_searchable + # validate that we have one arguments + if test $# -lt 1 + then + echo "$func_name: Missing argument" + return 3 + fi + lsb_test_dir $1 + funcret=$? + if test $funcret -eq 0 -o $funcret -eq 2 + then + ( ls $1 ) > /dev/null 2> _lsb.stderr + if test $? -ne 0 + then + echo "$func_name: expected be able to search directory $1, got an error" + if test -s _lsb.stderr + then + cat _lsb.stderr + rm _lsb.stderr + fi + else + rm _lsb.stderr + return 0 + fi + + else + return $funcret + fi + + + +} +# lsb_test_file filename +# test for presence of a filename +# Argument: filename +# Returns: 0 PASS , it's a file and it exists +# 1 FAIL, its not a file or a symlink +# 2 WARNING its a symlink +# 3 UNRESOLVED error +lsb_test_file() { + func_name=lsb_test_file + # validate that we have one arguments + if test $# -lt 1 + then + echo "$func_name: Missing argument" + return 3 + fi + _fname=$1 + # if it does not exist then fail + if ! test -e $_fname + then + tet_infoline "$_fname: file not found" + return 1 + fi + # since test -f will follow the symlink, we should check + # for a symlink using the lstat wrapper first + lsb_issymlink $_fname + rval=$? + if test $rval -eq 3 + then + return 3 + fi + if ! test $rval -eq 0 + then + # not a symlink + if test -f $_fname + then + # success + return 0 + else + # not a symlink and not a file + tet_infoline "$_fname: not a file or a symlink" + return 1 + fi + else + # warning , its a symlink when we expected a file + tet_infoline "$_fname: found a symlink" + return 2 + fi +} + + +# lsb_test_exec: +# check that a utility can be executed +# if privilege is needed then an lsb_execwithpriv tool is used. +# +# if a utility needs an argument such as a file to parse that should be +# supplied. +# Returns: +# 0 - PASS +# 1 - Fail +# 3 - Unresolved +# + +lsb_test_exec() +{ + +test $# -eq 0 && return 3 # unresolved + +_ExecWithPriv="" +if test "$1" = "lsb_execwithpriv" +then + _ExecWithPriv="$1" ; shift + case "$1" + in + *) _ExecWithPriv="$_ExecWithPriv IGNORED_ARG" ; shift ;; + esac +fi + +rm -f _ltexec.stderr > /dev/null 2>&1 +#( $_ExecWithPriv exec "$@" ) > /dev/null 2> _ltexec.stderr +( $_ExecWithPriv exec "$@" ) +return $? + +#if test -s _ltexec.stderr +#then +# cat _ltexec.stderr +# rm -f _ltexec.stderr +# return 1 # fail +#else +# rm -f _ltexec.stderr +# return 0 # pass +#fi +} + +# lsb_test_device_by_name name b|c major# minor# +# +# test whether a device exists, the type and the expected major and +# minor number +# +# Calls : +# lsb_devstat a wrapper to stat that when called with a device +# name as the first argument outputs four space separated strings +# device-name type majorno minorno +# +# Returns: +# 0 PASS +# 1 FAIL +# 3 Unresolved + +lsb_test_device_by_name() { + func_name=lsb_test_device_by_name + # validate that we have one arguments + if test $# -lt 4 + then + echo "$func_name: Missing argument(s)" + return 3 # unresolved + fi + _devname=$1 + _devtype=$2 + _major=$3 + _minor=$4 + + case $_devtype in + b) + if ! test -b $_devname + then + return 1 # fail + fi ;; + c) + if ! test -c $_devname + then + return 1 # fail + fi ;; + *) + echo "$func_name: unknown device type argument ($_devtype)" + return 3 # unresolved + ;; + esac + + _retval=`lsb_devstat $_devname` + set $_retval + if test "$1" = "$_devname" -a "$2" = "$_devtype" -a "$3" = "$_major" -a "$4" = "$_minor" + then + return 0 # pass + else + if ! test "$1" = "$_devname" + then + echo "$func_name: expected device name:\"$_devname\" got \"$1\"" + fi + if ! test "$2" = "$_devtype" + then + echo "$func_name: expected device type: \"$_devtype\" got \"$2\"" + fi + if ! test "$3" = "$_major" + then + echo "$func_name: expected major number: \"$_major\" got \"$3\"" + fi + if ! test "$4" = "$_minor" + then + echo "$func_name: expected minor number: \"$_minor\" got \"$4\"" + fi + return 1 # fail + fi + +} -- cgit v1.2.3