1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280
|
##############################################################################
# Modules Revision 3.0
# Providing a flexible user environment
#
# File: modules.50-cmds/%M%
# Revision: %I%
# First Edition: 2018/04/01
# Last Mod.: %U%, %G%
#
# Authors: Xavier Delaruelle, xavier.delaruelle@cea.fr
#
# Description: Testuite testsequence
# Command: load, unload, display, test, switch, whatis,
# apropos, purge, reload, aliases, savelist, save,
# restore, saveshow, saverm, use, unuse, avail
# Modulefiles:
# Sub-Command:
#
# Comment: %C{
# Test module commands called from modulefile with an empty string
# argument called
# }C%
#
##############################################################################
skip_if_quick_mode
# ensure auto symbolic versions are not set for these tests
setenv_var MODULES_ADVANCED_VERSION_SPEC 0
set module "modemptyarg"
set modulepath "$modpath.2"
set modulepathre "$modpathre.2"
# setup specific environment
setenv_path_var MODULEPATH $modulepath
# no test of module commands that can only be called from the top level
# (command-line). these commands are already checked in 151-module-onlytop.exp
#
# test load mode
#
# wrong arg number if command does not accept any argument
foreach cmd [list purge reload aliases] {
testouterr_cmd "sh" "load $module/$cmd" "ERR" [msg_load $module/$cmd [msg_moderr "Unexpected number of args for '$cmd' command" "module $cmd {}" $modulepath/$module/$cmd 27]]
}
# on most module commands, empty arg leads to error
# test both empty names {} and "" on same module command
testouterr_cmd "sh" "load $module/load" "ERR" [msg_load $module/load $err_emptymodname [err_reqlo {}]]
if {[is_conf_enabled autohandling conflictunload]} {
set ans [list]
lappend ans [list set __MODULES_LMCONFLICT "$module/unload&"]
lappend ans [list set _LMFILES_ "$modulepath/$module/unload"]
lappend ans [list set LOADEDMODULES "$module/unload"]
set tserr {}
} else {
set ans ERR
set tserr [msg_load $module/unload $err_emptymodname $err_emptymodname]
}
testouterr_cmd "sh" "load $module/unload" $ans $tserr
testouterr_cmd "sh" "load $module/load-any" "ERR" [msg_load $module/load-any [err_reqlo {} {}]]
set ans [list]
lappend ans [list set __MODULES_LMPREREQ "$module/try-load&$module/try-load|"]
lappend ans [list set _LMFILES_ "$modulepath/$module/try-load"]
lappend ans [list set LOADEDMODULES "$module/try-load"]
testouterr_cmd "sh" "load $module/try-load" $ans {}
# for some module commands, error is not fatal and modulefile is loaded
foreach cmd [list display test whatis] {
set ans [list]
lappend ans [list set _LMFILES_ "$modulepath/$module/$cmd"]
lappend ans [list set LOADEDMODULES "$module/$cmd"]
lappend ans [list ERR]
testouterr_cmd "sh" "load $module/$cmd" $ans [msg_load $module/$cmd $err_emptymodname]
}
testouterr_cmd "sh" "load $module/swap" ERR [msg_load $module/swap $err_emptymodname]
# switch: an empty second arg leads to one name rule
testouterr_cmd_re "sh" "load $module/swap2" ERR [msg_load $module/swap2 $err_path'barunk' [err_reqlo barunk]]
testouterr_cmd "sh" "load $module/swap3" ERR [msg_load $module/swap3 $err_emptymodname]
foreach cmd [list use unuse] {
set ans [list]
lappend ans [list set _LMFILES_ "$modulepath/$module/$cmd"]
lappend ans [list set LOADEDMODULES "$module/$cmd"]
lappend ans [list ERR]
testouterr_cmd "sh" "load $module/$cmd" $ans [msg_load $module/$cmd $err_emptydirname]
}
# or error is reported as modulefile error rather global error
foreach cmd [list save restore saveshow saverm] {
testouterr_cmd "sh" "load $module/$cmd" "ERR" [msg_load $module/$cmd [msg_moderr $msg_collnameempty "module $cmd {}" $modulepath/$module/$cmd 27]]
}
set ans [list]
lappend ans [list set _LMFILES_ "$modulepath/$module/apropos"]
lappend ans [list set LOADEDMODULES "$module/apropos"]
# other evaluated modulefiles lead to an error result on stdout
lappend ans [list ERR]
testouterr_cmd_re "sh" "load $module/apropos" $ans {.+}
set ans [list]
lappend ans [list set _LMFILES_ "$modulepath/$module/avail"]
lappend ans [list set LOADEDMODULES "$module/avail"]
testouterr_cmd_re "sh" "load $module/avail" $ans ".+"
set ans [list]
lappend ans [list set _LMFILES_ $modulepath/$module/list]
lappend ans [list set LOADEDMODULES $module/list]
testouterr_cmd sh "load $module/list" $ans $no_loaded
set ans [list]
lappend ans [list set _LMFILES_ $modulepath/$module/savelist]
lappend ans [list set LOADEDMODULES $module/savelist]
testouterr_cmd sh "load $module/savelist" $ans [msg_no_named_coll]
#
# test unload mode
#
# wrong arg number if command does not accept any argument
foreach cmd [list purge reload aliases] {
setenv_loaded_module "$module/$cmd" "$modulepath/$module/$cmd"
testouterr_cmd "sh" "unload $module/$cmd" "ERR" [msg_unload $module/$cmd [msg_moderr "Unexpected number of args for '$cmd' command" "module $cmd {}" $modulepath/$module/$cmd 27]]
}
# on most module commands, empty arg leads to error
foreach cmd [list load load-any try-load unload] {
setenv_loaded_module "$module/$cmd" "$modulepath/$module/$cmd"
set ans [list]
lappend ans [list unset _LMFILES_]
lappend ans [list unset LOADEDMODULES]
testouterr_cmd "sh" "unload $module/$cmd" $ans ""
}
# for some module commands, error is not fatal and modulefile is unloaded
foreach cmd [list display test whatis] {
setenv_loaded_module "$module/$cmd" "$modulepath/$module/$cmd"
set ans [list]
lappend ans [list unset _LMFILES_]
lappend ans [list unset LOADEDMODULES]
lappend ans [list ERR]
testouterr_cmd "sh" "unload $module/$cmd" $ans [msg_unload $module/$cmd $err_emptymodname]
}
setenv_loaded_module "$module/swap" "$modulepath/$module/swap"
set ans [list]
lappend ans [list unset _LMFILES_]
lappend ans [list unset LOADEDMODULES]
testouterr_cmd "sh" "unload $module/swap" $ans {}
# switch: an empty second arg leads to one name rule
setenv_loaded_module "$module/swap2" "$modulepath/$module/swap2"
testouterr_cmd_re "sh" "unload $module/swap2" $ans {}
setenv_loaded_module "$module/swap3" "$modulepath/$module/swap3"
testouterr_cmd_re "sh" "unload $module/swap3" $ans {}
lappend ans [list ERR]
foreach cmd [list use unuse] {
setenv_loaded_module "$module/$cmd" "$modulepath/$module/$cmd"
testouterr_cmd "sh" "unload $module/$cmd" $ans [msg_unload $module/$cmd $err_emptydirname]
}
# or error is reported as modulefile error rather global error
foreach cmd [list save restore saveshow saverm] {
setenv_loaded_module "$module/$cmd" "$modulepath/$module/$cmd"
testouterr_cmd "sh" "unload $module/$cmd" "ERR" [msg_unload $module/$cmd [msg_moderr $msg_collnameempty "module $cmd {}" $modulepath/$module/$cmd 27]]
}
setenv_loaded_module "$module/apropos" "$modulepath/$module/apropos"
set ans [list]
lappend ans [list unset _LMFILES_]
lappend ans [list unset LOADEDMODULES]
# other evaluated modulefiles lead to an error result on stdout
lappend ans [list ERR]
testouterr_cmd_re "sh" "unload $module/apropos" $ans {.+}
setenv_loaded_module "$module/avail" "$modulepath/$module/avail"
set ans [list]
lappend ans [list unset _LMFILES_]
lappend ans [list unset LOADEDMODULES]
testouterr_cmd_re "sh" "unload $module/avail" $ans ".+"
setenv_loaded_module $module/list $modulepath/$module/list
set ans [list]
lappend ans [list unset _LMFILES_]
lappend ans [list unset LOADEDMODULES]
testouterr_cmd sh "unload $module/list" $ans "$cur_matchingloaded\n 1) $module/list "
setenv_loaded_module $module/savelist $modulepath/$module/savelist
set ans [list]
lappend ans [list unset _LMFILES_]
lappend ans [list unset LOADEDMODULES]
testouterr_cmd sh "unload $module/savelist" $ans [msg_no_named_coll]
# restore environment
unsetenv_loaded_module
#
# test display mode
#
proc display_stderr_content {modfile content} {
if {$content ne ""} {
append content "\n"
}
return "$::modlin\n$modfile:\n\n$content$::modlin"
}
# on all module commands, command line with empty arg is printed
foreach cmd [list load load-any try-load unload] {
# test both empty names {} and "" on same module command
testouterr_cmd_re "sh" "display $module/$cmd" "OK" [display_stderr_content "$modulepathre/$module/$cmd" "module\t\t$cmd {} {}"]
}
foreach cmd [list use unuse list purge reload aliases savelist display test save restore saveshow saverm whatis apropos avail] {
testouterr_cmd_re "sh" "display $module/$cmd" "OK" [display_stderr_content "$modulepathre/$module/$cmd" "module\t\t$cmd {}"]
}
testouterr_cmd_re "sh" "display $module/swap" "OK" [display_stderr_content "$modulepathre/$module/swap" "module\t\tswap {} barunk"]
testouterr_cmd_re "sh" "display $module/swap2" "OK" [display_stderr_content "$modulepathre/$module/swap2" "module\t\tswap barunk {}"]
#
# test help mode
#
proc help_stderr_content {modfile content {procwarn 0}} {
if {$content ne ""} {
append content "\n"
}
if {$procwarn} {
append content "WARNING: Unable to find ModulesHelp in $modfile.\n"
}
return "$::modlin\nModule Specific Help for $modfile:\n\n$content$::modlin"
}
# on all module commands, command line is ignored
foreach cmd [list load load-any try-load unload use unuse list purge reload aliases savelist display test swap swap2 save restore saveshow saverm whatis apropos avail] {
testouterr_cmd_re "sh" "help $module/$cmd" "OK" [help_stderr_content "$modulepathre/$module/$cmd" "" 1]
}
#
# test test mode
#
proc test_stderr_content {modfile content {procwarn 0}} {
if {$content ne ""} {
append content "\n"
}
if {$procwarn} {
append content "WARNING: Unable to find ModulesTest in $modfile.\n"
}
return "$::modlin\nModule Specific Test for $modfile:\n\n$content$::modlin"
}
# on all module commands, command line is ignored
foreach cmd [list load load-any try-load unload use unuse list purge reload aliases savelist display test swap swap2 save restore saveshow saverm whatis apropos avail] {
testouterr_cmd_re "sh" "test $module/$cmd" "OK" [test_stderr_content "$modulepathre/$module/$cmd" "" 1]
}
#
# test whatis mode
#
testouterr_cmd "sh" "whatis $module" "OK" ""
#
# Cleanup
#
reset_test_env
# remove procs
rename display_stderr_content {}
rename help_stderr_content {}
rename test_stderr_content {}
|