From 34a60922e2b94fb35872a9bd6fe3eefa6a95826c Mon Sep 17 00:00:00 2001 From: Yu Jian Date: Fri, 24 Aug 2012 21:19:41 +0800 Subject: [PATCH] LU-1661 tests: improve setup_posix_users() This patch improves setup_posix_users() in posix.cfg to use do_rpc_nodes to add groups and users on remote nodes, so as to simplify add_group() and add_user() and make them become common functions to be used by other test scripts. Test-Parameters: clientdistro=el5 testlist=posix Signed-off-by: Yu Jian Change-Id: Ie07f32dffe7d7ae2037d92bab372977efff2e5fe Reviewed-on: http://review.whamcloud.com/3770 Tested-by: Hudson Tested-by: Maloo Reviewed-by: Minh Diep Reviewed-by: Oleg Drokin --- lustre/tests/posix/posix.cfg | 147 ++++++++++++++--------------------------- lustre/tests/test-framework.sh | 57 ++++++++++++++++ 2 files changed, 106 insertions(+), 98 deletions(-) diff --git a/lustre/tests/posix/posix.cfg b/lustre/tests/posix/posix.cfg index 51f50aa..86980b6 100644 --- a/lustre/tests/posix/posix.cfg +++ b/lustre/tests/posix/posix.cfg @@ -1,15 +1,17 @@ #!/bin/bash -# vim:expandtab:shiftwidth=4:softtabstop=4:tabstop=4: # # This file contains the global variables and common functions # used in the posix test scripts. set -e -LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)} + +LUSTRE=${LUSTRE:-$(cd $(dirname $0)/../..; echo $PWD)} . $LUSTRE/tests/test-framework.sh + #************************ Initialize Global Variables *************************# export POSIX_SRC=${POSIX_SRC:-"/usr/src/posix"} export POSIX_RUN=${POSIX_RUN:-"$POSIX_SRC/run_posix_suite.pl"} -export TEST_BIN="$POSIX_SRC/TESTROOT-gcc$(gcc -v 2>&1 | tail -1 | cut -d' ' -f3)-$(uname -m).tgz" +export TEST_BIN="$POSIX_SRC/TESTROOT-gcc$(gcc -v 2>&1 | tail -1 | + cut -d' ' -f3)-$(uname -m).tgz" # Root directory of the POSIX test suite installation. export INSTALL_DIR=${INSTALL_DIR:-"$POSIX_SRC/tet"} @@ -22,81 +24,16 @@ export RESULT_DIR=${RESULT_DIR:-"$INSTALL_DIR/test_sets/results"} # Test groups for POSIX compliance test suite. USER_GROUPS="vsxg0,vsxg1,vsxg2" -SUPP_GROUPS="supp1,supp2,supp3,supp4,supp5,supp6,supp7,supp8,supp9,supp10,supp11,supp12,supp13,supp14,supp15,supp16,supp17,supp18,supp19,supp20,supp21,supp22,supp23,supp24,supp25,supp26,supp27,supp28,supp29,supp30,supp31" -export GROUP_ID=${GROUP_ID:-"1000"} -export USER_ID=${USER_ID:-"1000"} +for i in $(seq 31); do + SUPP_GROUPS="$SUPP_GROUPS,supp$i" +done +SUPP_GROUPS=${SUPP_GROUPS#,} -#***************************** Common Functions *******************************# -# Check and add a test group. -add_group() { - local node=${1:-$(hostname)} - local group_id=$2 - local group_name=$3 - local rc=0 - - if ! (do_nodes $node " - error() { set +x; echo Error: \\\$2: \\\$1; echo XXRETCODE:\\\$1; exit \\\$1; } - gid=\\\$(getent group $group_name | cut -d: -f3); - if [ \"x\\\$gid\" != \"x\" ]; then - [ \\\$gid -eq $group_id ] || \\ - error 1 \\\"inconsistent group ID: new: $group_id, old: \\\$gid\\\"; - else - groupadd -g $group_id $group_name - fi;" 2>&1 | dshbak -c - exit ${PIPESTATUS[0]}) - then - rc=${PIPESTATUS[0]} - fi - - return $rc -} - -# Check and add a test user. -add_user() { - local node=${1:-$(hostname)} - local user_id=$2 - local user_name=$3 - local group_name=$4 - local home_dir - local rc=0 - - if [[ "$user_name" = "vsx0" ]]; then - home_dir=$INSTALL_DIR/test_sets - else - home_dir=$INSTALL_DIR - fi - - if ! (do_nodes $node " - error() { set +x; echo Error: \\\$2: \\\$1; echo XXRETCODE:\\\$1; exit \\\$1; } - SUPP_GROUPS=$SUPP_GROUPS; - uid=\\\$(getent passwd $user_name | cut -d: -f3); - if [ \"x\\\$uid\" != \"x\" ]; then - if [ \\\$uid -eq $user_id ]; then - dir=\\\$(getent passwd $user_name | cut -d: -f6) - if [ \"x\\\$dir\" != \"x$home_dir\" ]; then - mkdir -p $home_dir - usermod -d $home_dir $user_name - fi - else - error 1 \\\"inconsistent user ID: new: $user_id, old: \\\$uid\\\" - fi - else - mkdir -p $home_dir - if [ \"x$user_name\" = \"xvsx0\" ]; then - useradd -M -u $user_id -d $home_dir -g $group_name -G $SUPP_GROUPS $user_name - else - useradd -M -u $user_id -d $home_dir -g $group_name $user_name - fi - fi" 2>&1 | dshbak -c - exit ${PIPESTATUS[0]}) - then - rc=${PIPESTATUS[0]} - fi - - return $rc -} +export GROUP_ID=${GROUP_ID:-"2000000000"} +export USER_ID=${USER_ID:-"2000000000"} +#***************************** Common Functions *******************************# # Remove users and groups for running the POSIX test suite. delete_posix_users() { local node=${1:-$(hostname)} @@ -113,29 +50,43 @@ delete_posix_users() { # Setup users and groups for running the POSIX test suite. setup_posix_users() { - local node=${1:-$(hostname)} - local gid=$((GROUP_ID + 1)) - local uid=$USER_ID - local user group - local i - - for group in ${USER_GROUPS//,/ } ${SUPP_GROUPS//,/ }; do - if ! add_group $node $gid $group; then - delete_posix_users $node - setup_posix_users $node - fi - gid=$(( gid + 1 )) - done - - for i in 0 1 2; do - user=vsx$i - group=vsxg$i - if ! add_user $node $uid $user $group; then - delete_posix_users $node - setup_posix_users $node - fi - uid=$(( uid + 1 )) - done + local node=${1:-$HOSTNAME} + local gid=$GROUP_ID + local uid=$USER_ID + local user group + local home + local opts + local i + + for group in ${USER_GROUPS//,/ } ${SUPP_GROUPS//,/ }; do + if ! do_rpc_nodes $node add_group $gid $group; then + delete_posix_users $node + return 1 + fi + gid=$((gid + 1)) + done + + for i in 0 1 2; do + user=vsx$i + group=vsxg$i + + if [[ "$user" = "vsx0" ]]; then + home=$INSTALL_DIR/test_sets + opts="-G $SUPP_GROUPS" + else + home=$INSTALL_DIR + opts="" + fi + + if ! do_rpc_nodes $node add_user $uid $user $group $home $opts + then + delete_posix_users $node + return 2 + fi + uid=$((uid + 1)) + done + + return 0 } prep() { diff --git a/lustre/tests/test-framework.sh b/lustre/tests/test-framework.sh index 70a4327..ad29a3e 100644 --- a/lustre/tests/test-framework.sh +++ b/lustre/tests/test-framework.sh @@ -4242,6 +4242,63 @@ setstripe_nfsserver () { do_nodev $nfsserver lfs setstripe "$@" } +# Check and add a test group. +add_group() { + local group_id=$1 + local group_name=$2 + local rc=0 + + local gid=$(getent group $group_name | cut -d: -f3) + if [[ -n "$gid" ]]; then + [[ "$gid" -eq "$group_id" ]] || { + error_noexit "inconsistent group ID:" \ + "new: $group_id, old: $gid" + rc=1 + } + else + groupadd -g $group_id $group_name + rc=${PIPESTATUS[0]} + fi + + return $rc +} + +# Check and add a test user. +add_user() { + local user_id=$1 + shift + local user_name=$1 + shift + local group_name=$1 + shift + local home=$1 + shift + local opts="$@" + local rc=0 + + local uid=$(getent passwd $user_name | cut -d: -f3) + if [[ -n "$uid" ]]; then + if [[ "$uid" -eq "$user_id" ]]; then + local dir=$(getent passwd $user_name | cut -d: -f6) + if [[ "$dir" != "$home" ]]; then + mkdir -p $home + usermod -d $home $user_name + rc=${PIPESTATUS[0]} + fi + else + error_noexit "inconsistent user ID:" \ + "new: $user_id, old: $uid" + rc=1 + fi + else + mkdir -p $home + useradd -M -u $user_id -d $home -g $group_name $opts $user_name + rc=${PIPESTATUS[0]} + fi + + return $rc +} + check_runas_id_ret() { local myRC=0 local myRUNAS_UID=$1 -- 1.8.3.1