ts: test load subcmd with error_on_multi_load config in 50/590

This commit is contained in:
Xavier Delaruelle
2023-08-10 13:43:29 +02:00
parent 9c89577f22
commit 005660403d
11 changed files with 649 additions and 2 deletions

View File

@@ -1,3 +1,3 @@
#%Module
module-alias foo/alias foo/2.0
module-alias foo/alias foo/4.0
module-tag mytag foo/1.0

View File

@@ -0,0 +1,12 @@
#%Module
module-whatis [module-info name]
append-path TSPATH dir1
setenv TS ok
chdir /tmp
set-alias alall value
set-function funcall value
complete bash compall value
if {![module-info mode scan]} {
puts stdout all-out
puts prestdout all-pre-out
}

View File

@@ -0,0 +1 @@
#%Module

View File

@@ -0,0 +1,8 @@
#%Module
if {[info exists env(TESTSUITE_ERROR_ON_MULTI_LOAD)]} {
switch -- $env(TESTSUITE_ERROR_ON_MULTI_LOAD) {
forbidden - depre_load_forbidden {
module-forbid err/1.0
}
}
}

View File

@@ -0,0 +1,74 @@
#%Module
if {[info exists env(TESTSUITE_ERROR_ON_MULTI_LOAD)]} {
switch -- $env(TESTSUITE_ERROR_ON_MULTI_LOAD) {
bad - load_last_bad - load_first_bad {
bad
}
break - load_first_break {
break
}
continue {
continue
}
error {
error msg
}
conflict {
conflict foo
}
reqmis {
prereq unk
}
depre_load_error {
prereq --optional foo
if {[module-info mode load]} {
error msg
}
}
depre_unload_error {
prereq --optional foo
if {[module-info mode unload]} {
error msg
}
}
depre_load_bad {
prereq --optional foo
if {[module-info mode load]} {
bad
}
}
depre_unload_bad {
prereq --optional foo
if {[module-info mode unload]} {
bad
}
}
depre_load_break {
prereq --optional foo
if {[module-info mode load]} {
break
}
}
depre_unload_break {
prereq --optional foo
if {[module-info mode unload]} {
break
}
}
depre_load_reqmis {
prereq --optional foo
if {[module-info mode load]} {
prereq unk
}
}
depre_load_conflict {
prereq --optional foo
if {[module-info mode load]} {
conflict all
}
}
depre_load_forbidden {
prereq --optional foo
}
}
}

View File

@@ -0,0 +1 @@
#%Module

View File

@@ -0,0 +1 @@
#%Module

View File

@@ -0,0 +1,11 @@
#%Module
if {[info exists env(TESTSUITE_ERROR_ON_MULTI_LOAD)]} {
switch -- $env(TESTSUITE_ERROR_ON_MULTI_LOAD) {
load_last_bad {
module load foo/1.0 err/1.0
}
load_first_bad - load_first_break {
module load err/1.0 foo/1.0
}
}
}

View File

@@ -0,0 +1 @@
#%Module

View File

@@ -193,9 +193,10 @@ setenv_path_var MODULEPATH $modpath.4
setenv_var MODULERCFILE $env(TESTSUITEDIR)/etc/modulerc.multi1:$env(TESTSUITEDIR)/etc/modulerc.multi2
set tserr "foo/1.0 <mytag>
foo/2.0
foo/alias"
testouterr_cmd_re sh {avail -t --starts-with --indepth -o alias:tag foo} OK $tserr
testouterr_cmd_re sh {load foo/alias} ERR $err_path'foo/2.0'
testouterr_cmd_re sh {load foo/alias} ERR $err_path'foo/4.0'
setenv_var MODULERCFILE $env(TESTSUITEDIR)/etc/modulerc.multi2:$env(TESTSUITEDIR)/etc/modulerc.multi1
testouterr_cmd_re sh {load foo/alias} ERR $err_path'foo/3.0'

View File

@@ -0,0 +1,537 @@
##############################################################################
# Modules Revision 3.0
# Providing a flexible user environment
#
# File: modules.50-cmds/%M%
# Revision: %I%
# First Edition: 2023/08/08
# Last Mod.: %U%, %G%
#
# Authors: Xavier Delaruelle, xavier.delaruelle@cea.fr
#
# Description: Testuite testsequence
# Command: load, ml
# Modulefiles: error, foo, all, setenv
# Sub-Command:
#
# Comment: %C{
# Test error_on_multi_load configuration option with
# load sub-command
# }C%
#
##############################################################################
skip_if_quick_mode
set mp $modpath.4
set mpre $modpathre.4
setenv_path_var MODULEPATH $mp
setenv_var MODULES_AUTO_HANDLING 1
set ans_continue [list]
lappend ans_continue [list out all-pre-out]
lappend ans_continue [list set TSPATH dir1]
lappend ans_continue [list set LOADEDMODULES all/1.0:foo/1.0]
lappend ans_continue [list set _LMFILES_ $mp/all/1.0:$mp/foo/1.0]
lappend ans_continue [list set __MODULES_LMREFRESH all/1.0]
lappend ans_continue [list set TS ok]
lappend ans_continue [list alias alall value]
lappend ans_continue [list funcall "() { value; }; export -f funcall;"]
lappend ans_continue [list out {complete value compall;}]
lappend ans_continue [list chdir /tmp]
lappend ans_continue [list out all-out]
lappend ans_continue [list ERR]
set ans_all [list]
lappend ans_all [list out all-pre-out]
lappend ans_all [list set TSPATH dir1]
lappend ans_all [list set __MODULES_LMREFRESH all/1.0]
lappend ans_all [list set _LMFILES_ $mp/all/1.0:$mp/err/1.0:$mp/foo/1.0]
lappend ans_all [list set LOADEDMODULES all/1.0:err/1.0:foo/1.0]
lappend ans_all [list set TS ok]
lappend ans_all [list alias alall value]
lappend ans_all [list funcall "() { value; }; export -f funcall;"]
lappend ans_all [list out {complete value compall;}]
lappend ans_all [list chdir /tmp]
lappend ans_all [list out all-out]
set ans_conflict_force [list]
lappend ans_conflict_force [list out all-pre-out]
lappend ans_conflict_force [list set TSPATH dir1]
lappend ans_conflict_force [list set __MODULES_LMCONFLICT err/1.0&foo]
lappend ans_conflict_force [list set __MODULES_LMREFRESH all/1.0]
lappend ans_conflict_force [list set _LMFILES_ $mp/all/1.0:$mp/foo/1.0:$mp/err/1.0]
lappend ans_conflict_force [list set LOADEDMODULES all/1.0:foo/1.0:err/1.0]
lappend ans_conflict_force [list set TS ok]
lappend ans_conflict_force [list alias alall value]
lappend ans_conflict_force [list funcall "() { value; }; export -f funcall;"]
lappend ans_conflict_force [list out {complete value compall;}]
lappend ans_conflict_force [list chdir /tmp]
lappend ans_conflict_force [list out all-out]
set ans_conflict [list]
lappend ans_conflict [list out all-pre-out]
lappend ans_conflict [list set TSPATH dir1]
lappend ans_conflict [list set __MODULES_LMCONFLICT err/1.0&foo]
lappend ans_conflict [list set LOADEDMODULES all/1.0:err/1.0]
lappend ans_conflict [list set _LMFILES_ $mp/all/1.0:$mp/err/1.0]
lappend ans_conflict [list set __MODULES_LMREFRESH all/1.0]
lappend ans_conflict [list set TS ok]
lappend ans_conflict [list alias alall value]
lappend ans_conflict [list funcall "() { value; }; export -f funcall;"]
lappend ans_conflict [list out {complete value compall;}]
lappend ans_conflict [list chdir /tmp]
lappend ans_conflict [list out all-out]
lappend ans_conflict [list ERR]
set ans_reqmis_force [list]
lappend ans_reqmis_force [list out all-pre-out]
lappend ans_reqmis_force [list set TSPATH dir1]
lappend ans_reqmis_force [list set __MODULES_LMPREREQ err/1.0&unk]
lappend ans_reqmis_force [list set __MODULES_LMREFRESH all/1.0]
lappend ans_reqmis_force [list set _LMFILES_ $mp/all/1.0:$mp/err/1.0:$mp/foo/1.0]
lappend ans_reqmis_force [list set LOADEDMODULES all/1.0:err/1.0:foo/1.0]
lappend ans_reqmis_force [list set TS ok]
lappend ans_reqmis_force [list alias alall value]
lappend ans_reqmis_force [list funcall "() { value; }; export -f funcall;"]
lappend ans_reqmis_force [list out {complete value compall;}]
lappend ans_reqmis_force [list chdir /tmp]
lappend ans_reqmis_force [list out all-out]
lappend ans_reqmis_force [list ERR]
set ans_forbidden [list]
lappend ans_forbidden [list out all-pre-out]
lappend ans_forbidden [list set TSPATH dir1]
lappend ans_forbidden [list set __MODULES_LMREFRESH all/1.0]
lappend ans_forbidden [list set _LMFILES_ $mp/all/1.0:$mp/foo/1.0]
lappend ans_forbidden [list set LOADEDMODULES all/1.0:foo/1.0]
lappend ans_forbidden [list set TS ok]
lappend ans_forbidden [list alias alall value]
lappend ans_forbidden [list funcall "() { value; }; export -f funcall;"]
lappend ans_forbidden [list out {complete value compall;}]
lappend ans_forbidden [list chdir /tmp]
lappend ans_forbidden [list out all-out]
lappend ans_forbidden [list ERR]
set ans_not_found $ans_forbidden
set ans_already_loaded [list]
lappend ans_already_loaded [list out all-pre-out]
lappend ans_already_loaded [list set TSPATH dir1]
lappend ans_already_loaded [list set __MODULES_LMREFRESH all/1.0]
lappend ans_already_loaded [list set _LMFILES_ $mp/err/1.0:$mp/all/1.0:$mp/foo/1.0]
lappend ans_already_loaded [list set LOADEDMODULES err/1.0:all/1.0:foo/1.0]
lappend ans_already_loaded [list set TS ok]
lappend ans_already_loaded [list alias alall value]
lappend ans_already_loaded [list funcall "() { value; }; export -f funcall;"]
lappend ans_already_loaded [list out {complete value compall;}]
lappend ans_already_loaded [list chdir /tmp]
lappend ans_already_loaded [list out all-out]
set ans_depre_error [list]
lappend ans_depre_error [list out all-pre-out]
lappend ans_depre_error [list set TS1 {}]
lappend ans_depre_error [list set TSPATH dir1]
lappend ans_depre_error [list set TS2 {}]
lappend ans_depre_error [list set LOADEDMODULES err/1.0:all/1.0:setenv/1.0]
lappend ans_depre_error [list set _LMFILES_ $mp/err/1.0:$mp/all/1.0:$mp/setenv/1.0]
lappend ans_depre_error [list set __MODULES_LMREFRESH all/1.0]
lappend ans_depre_error [list set TS ok]
lappend ans_depre_error [list alias alall value]
lappend ans_depre_error [list funcall "() { value; }; export -f funcall;"]
lappend ans_depre_error [list out {complete value compall;}]
lappend ans_depre_error [list chdir /tmp]
lappend ans_depre_error [list out all-out]
lappend ans_depre_error [list ERR]
set ans_depre_error_force [list]
lappend ans_depre_error_force [list out all-pre-out]
lappend ans_depre_error_force [list set TS1 {}]
lappend ans_depre_error_force [list set TSPATH dir1]
lappend ans_depre_error_force [list set TS2 {}]
lappend ans_depre_error_force [list set LOADEDMODULES all/1.0:foo/1.0:setenv/1.0]
lappend ans_depre_error_force [list set _LMFILES_ $mp/all/1.0:$mp/foo/1.0:$mp/setenv/1.0]
lappend ans_depre_error_force [list set __MODULES_LMREFRESH all/1.0]
lappend ans_depre_error_force [list unset __MODULES_LMPREREQ]
lappend ans_depre_error_force [list set TS ok]
lappend ans_depre_error_force [list alias alall value]
lappend ans_depre_error_force [list funcall "() { value; }; export -f funcall;"]
lappend ans_depre_error_force [list out {complete value compall;}]
lappend ans_depre_error_force [list chdir /tmp]
lappend ans_depre_error_force [list out all-out]
lappend ans_depre_error_force [list ERR]
set ans_depre_unload_error_force [list]
lappend ans_depre_unload_error_force [list out all-pre-out]
lappend ans_depre_unload_error_force [list set TS1 {}]
lappend ans_depre_unload_error_force [list set TSPATH dir1]
lappend ans_depre_unload_error_force [list set TS2 {}]
lappend ans_depre_unload_error_force [list set LOADEDMODULES err/1.0:all/1.0:foo/1.0:setenv/1.0]
lappend ans_depre_unload_error_force [list set _LMFILES_ $mp/err/1.0:$mp/all/1.0:$mp/foo/1.0:$mp/setenv/1.0]
lappend ans_depre_unload_error_force [list set __MODULES_LMREFRESH all/1.0]
lappend ans_depre_unload_error_force [list set TS ok]
lappend ans_depre_unload_error_force [list alias alall value]
lappend ans_depre_unload_error_force [list funcall "() { value; }; export -f funcall;"]
lappend ans_depre_unload_error_force [list out {complete value compall;}]
lappend ans_depre_unload_error_force [list chdir /tmp]
lappend ans_depre_unload_error_force [list out all-out]
lappend ans_depre_unload_error_force [list ERR]
set ans_single_foo [list]
lappend ans_single_foo [list set _LMFILES_ $mp/foo/1.0]
lappend ans_single_foo [list set LOADEDMODULES foo/1.0]
set ans_load_last [list]
lappend ans_load_last [list set _LMFILES_ $mp/foo/1.0:$mp/lerr/1.0]
lappend ans_load_last [list set LOADEDMODULES foo/1.0:lerr/1.0]
lappend ans_load_last [list set __MODULES_LMPREREQ lerr/1.0&foo/1.0|err/1.0]
if {[cmpversion $tclsh_version 8.6] == -1} {
set custom_error_trace " invoked from within
\"if \{\[info exists env(TESTSUITE_ERROR_ON_MULTI_LOAD)\]\} \{
switch -- \$env(TESTSUITE_ERROR_ON_MULTI_LOAD) \{
bad - load_last_bad - load_first_b...\""
} else {
set custom_error_trace {}
}
#
# continue behavior (multiple module to load)
#
setenv_var MODULES_ERROR_ON_MULTI_LOAD continue
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD bad
set line_num [expr {[cmpversion $tclsh_version 8.6] == -1 ? 2 : 5}]
set ts_bad [msg_load err/1.0 [msg_moderr {invalid command name "bad"} bad $mp/err/1.0 $line_num {} {} {} $custom_error_trace]]
testouterr_cmd bash {load all/1.0 err/1.0 foo/1.0} $ans_continue $ts_bad
# --force has no effect
testouterr_cmd bash {load --force all/1.0 err/1.0 foo/1.0} $ans_continue $ts_bad
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD break
set ts_break [msg_load err/1.0 $err_evalabort]
testouterr_cmd bash {load all/1.0 err/1.0 foo/1.0} $ans_continue $ts_break
# --force has no effect
testouterr_cmd bash {load --force all/1.0 err/1.0 foo/1.0} $ans_continue $ts_break
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD continue
testouterr_cmd bash {load all/1.0 err/1.0 foo/1.0} $ans_all {}
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD error
set line_num [expr {[cmpversion $tclsh_version 8.6] == -1 ? 2 : 14}]
set ts_error_verbose [msg_load all/1.0]\n\n
append ts_error_verbose [msg_load err/1.0 [msg_moderr msg {error msg} $mp/err/1.0 $line_num {} {} {} $custom_error_trace]]\n\n
append ts_error_verbose [msg_load foo/1.0]
testouterr_cmd bash {load -v all/1.0 err/1.0 foo/1.0} $ans_continue $ts_error_verbose
# ml command follows abort behavior
testouterr_cmd bash {ml -v all/1.0 err/1.0 foo/1.0} ERR $ts_error_verbose
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD conflict
# conflict declared after load attempt of conflicting module
set ts_conflict_declared_after [msg_load err/1.0 [err_conlo foo]]
testouterr_cmd bash {load all/1.0 foo/1.0 err/1.0} $ans_continue $ts_conflict_declared_after
# --force by-pass conflict error
set ts_conflict_force_declared_after [msg_load err/1.0 [err_conlof foo]]
testouterr_cmd bash {load --force all/1.0 foo/1.0 err/1.0} $ans_conflict_force $ts_conflict_force_declared_after
# conflict declared before load attempt of conflicting module
set ts_conflict_declared_before [msg_load foo/1.0 [err_conlo err/1.0]]
testouterr_cmd bash {load all/1.0 err/1.0 foo/1.0} $ans_conflict $ts_conflict_declared_before
# ml command follows abort behavior
testouterr_cmd bash {ml all/1.0 err/1.0 foo/1.0} ERR $ts_conflict_declared_before
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD reqmis
set ts_reqmis [msg_load err/1.0 $err_path'unk' [err_reqlo unk]]
testouterr_cmd bash {load all/1.0 err/1.0 foo/1.0} $ans_continue $ts_reqmis
# --force by-pass missing requirement error
set ts_reqmis_force [msg_load err/1.0 $err_path'unk' [err_reqlof unk]]
testouterr_cmd bash {load --force all/1.0 err/1.0 foo/1.0} $ans_reqmis_force $ts_reqmis_force
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD depre_load_error
setenv_loaded_module [list err/1.0] [list $mp/err/1.0]
setenv_var __MODULES_LMPREREQ err/1.0&err/1.0|foo
set line_num [expr {[cmpversion $tclsh_version 8.6] == -1 ? 2 : 25}]
set ts_depre_load_error [msg_load err/1.0 [msg_moderr msg {error msg} $mp/err/1.0 $line_num {} {} {} $custom_error_trace]]\n\n
append ts_depre_load_error [msg_load foo/1.0 [err_depre err/1.0]]
testouterr_cmd bash {load all/1.0 foo/1.0 setenv/1.0} $ans_depre_error $ts_depre_load_error
# --force by-pass dependent reload error
set ts_depre_load_error_force [msg_load err/1.0 [msg_moderr msg {error msg} $mp/err/1.0 $line_num {} {} {} $custom_error_trace]]\n\n
append ts_depre_load_error_force [msg_load foo/1.0 [err_depref err/1.0] {Unloading dependent: err/1.0}]
testouterr_cmd bash {load --force all/1.0 foo/1.0 setenv/1.0} $ans_depre_error_force $ts_depre_load_error_force
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD depre_unload_error
set line_num [expr {[cmpversion $tclsh_version 8.6] == -1 ? 2 : 31}]
set ts_depre_unload_error [msg_unload err/1.0 [msg_moderr msg {error msg} $mp/err/1.0 $line_num {} {} {} $custom_error_trace]]\n\n
append ts_depre_unload_error [msg_load foo/1.0 [err_depun err/1.0]]
testouterr_cmd bash {load all/1.0 foo/1.0 setenv/1.0} $ans_depre_error $ts_depre_unload_error
# --force by-pass dependent reload error
set ts_depre_unload_error_force [msg_unload err/1.0 [msg_moderr msg {error msg} $mp/err/1.0 $line_num {} {} {} $custom_error_trace]]\n\n
append ts_depre_unload_error_force [msg_load foo/1.0 [err_depunf err/1.0]]
# FIXME: --force should be able to unload err/1.0
testouterr_cmd bash {load --force all/1.0 foo/1.0 setenv/1.0} $ans_depre_unload_error_force $ts_depre_unload_error_force
unsetenv_loaded_module
unsetenv_var __MODULES_LMPREREQ
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD forbidden
set ts_forbidden [err_accessdenied err/1.0]
testouterr_cmd bash {load all/1.0 err/1.0 foo/1.0} $ans_forbidden $ts_forbidden
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD not_found
set ts_not_found $err_path'unk/1.0'
testouterr_cmd bash {load all/1.0 unk/1.0 foo/1.0} $ans_not_found $ts_not_found
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD already_loaded
setenv_loaded_module [list err/1.0] [list $mp/err/1.0]
testouterr_cmd bash {load all/1.0 err/1.0 foo/1.0} $ans_already_loaded {}
unsetenv_loaded_module
#
# continue behavior (single module to load, no effect)
#
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD bad
testouterr_cmd bash {load err/1.0} ERR $ts_bad
# --force has no effect
testouterr_cmd bash {load --force err/1.0} ERR $ts_bad
testouterr_cmd bash {load foo/1.0} $ans_single_foo {}
#
# continue behavior ("module load" command in modulefile, no effect)
#
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD load_last_bad
set ts_load_bad $ts_bad\n\n
append ts_load_bad [msg_load lerr/1.0 [err_reqlo err/1.0]]
testouterr_cmd bash {load lerr/1.0} ERR $ts_load_bad
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD load_first_bad
testouterr_cmd bash {load lerr/1.0} ERR $ts_load_bad
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD load_first_break
set ts_load_break $ts_break\n\n
append ts_load_break [msg_load lerr/1.0 [err_reqlo err/1.0]]
testouterr_cmd bash {load lerr/1.0} ERR $ts_load_break
#
# abort behavior (multiple module to load)
#
setenv_var MODULES_ERROR_ON_MULTI_LOAD abort
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD bad
testouterr_cmd bash {load all/1.0 err/1.0 foo/1.0} ERR $ts_bad
testouterr_cmd bash {ml all/1.0 err/1.0 foo/1.0} ERR $ts_bad
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD break
testouterr_cmd bash {load all/1.0 err/1.0 foo/1.0} ERR $ts_break
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD continue
testouterr_cmd bash {load all/1.0 err/1.0 foo/1.0} $ans_all {}
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD error
set line_num [expr {[cmpversion $tclsh_version 8.6] == -1 ? 2 : 14}]
set ts_error_verbose_abort [msg_load all/1.0]\n\n
append ts_error_verbose_abort [msg_load err/1.0 [msg_moderr msg {error msg} $mp/err/1.0 $line_num {} {} {} $custom_error_trace]]
testouterr_cmd bash {load -v all/1.0 err/1.0 foo/1.0} ERR $ts_error_verbose_abort
# --force has no effect
testouterr_cmd bash {load --force -v all/1.0 err/1.0 foo/1.0} ERR $ts_error_verbose_abort
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD conflict
# conflict declared after load attempt of conflicting module
testouterr_cmd bash {load all/1.0 foo/1.0 err/1.0} ERR $ts_conflict_declared_after
# --force by-pass conflict error
testouterr_cmd bash {load --force all/1.0 foo/1.0 err/1.0} $ans_conflict_force $ts_conflict_force_declared_after
# conflict declared before load attempt of conflicting module
testouterr_cmd bash {load all/1.0 err/1.0 foo/1.0} ERR $ts_conflict_declared_before
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD reqmis
testouterr_cmd bash {load all/1.0 err/1.0 foo/1.0} ERR $ts_reqmis
testouterr_cmd bash {ml all/1.0 err/1.0 foo/1.0} ERR $ts_reqmis
# --force by-pass missing requirement error
testouterr_cmd bash {load --force all/1.0 err/1.0 foo/1.0} $ans_reqmis_force $ts_reqmis_force
setenv_loaded_module [list err/1.0] [list $mp/err/1.0]
setenv_var __MODULES_LMPREREQ err/1.0&err/1.0|foo
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD depre_load_error
testouterr_cmd bash {load all/1.0 foo/1.0 setenv/1.0} ERR $ts_depre_load_error
# --force by-pass dependent reload error
testouterr_cmd bash {load --force all/1.0 foo/1.0 setenv/1.0} $ans_depre_error_force $ts_depre_load_error_force
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD depre_unload_error
testouterr_cmd bash {load all/1.0 foo/1.0 setenv/1.0} ERR $ts_depre_unload_error
# --force by-pass dependent reload error
# FIXME: --force should be able to unload err/1.0
testouterr_cmd bash {load --force all/1.0 foo/1.0 setenv/1.0} $ans_depre_unload_error_force $ts_depre_unload_error_force
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD depre_load_bad
set line_num [expr {[cmpversion $tclsh_version 8.6] == -1 ? 2 : 37}]
set ts_depre_load_bad [msg_load err/1.0 [msg_moderr {invalid command name "bad"} bad $mp/err/1.0 $line_num {} {} {} $custom_error_trace]]\n\n
append ts_depre_load_bad [msg_load foo/1.0 [err_depre err/1.0]]
testouterr_cmd bash {load all/1.0 foo/1.0 setenv/1.0} ERR $ts_depre_load_bad
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD depre_unload_bad
set line_num [expr {[cmpversion $tclsh_version 8.6] == -1 ? 2 : 43}]
set ts_depre_unload_bad [msg_unload err/1.0 [msg_moderr {invalid command name "bad"} bad $mp/err/1.0 $line_num {} {} {} $custom_error_trace]]\n\n
append ts_depre_unload_bad [msg_load foo/1.0 [err_depun err/1.0]]
testouterr_cmd bash {load all/1.0 foo/1.0 setenv/1.0} ERR $ts_depre_unload_bad
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD depre_load_break
set ts_depre_load_break [msg_load err/1.0 $err_evalabort]\n\n
append ts_depre_load_break [msg_load foo/1.0 [err_depre err/1.0]]
testouterr_cmd bash {load all/1.0 foo/1.0 setenv/1.0} ERR $ts_depre_load_break
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD depre_unload_break
set ts_depre_unload_break [msg_unload err/1.0 $err_evalabort]\n\n
append ts_depre_unload_break [msg_load foo/1.0 [err_depun err/1.0]]
testouterr_cmd bash {load all/1.0 foo/1.0 setenv/1.0} ERR $ts_depre_unload_break
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD depre_load_reqmis
set ts_depre_load_reqmis [msg_load err/1.0 [err_prereq unk]]\n\n
append ts_depre_load_reqmis [msg_load foo/1.0 [err_depre err/1.0]]
testouterr_cmd bash {load all/1.0 foo/1.0 setenv/1.0} ERR $ts_depre_load_reqmis
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD depre_load_conflict
set ts_depre_load_conflict [msg_load err/1.0 [err_conlo all]]\n\n
append ts_depre_load_conflict [msg_load foo/1.0 [err_depre err/1.0]]
testouterr_cmd bash {load all/1.0 foo/1.0 setenv/1.0} ERR $ts_depre_load_conflict
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD depre_load_forbidden
set ts_depre_load_forbidden [msg_load foo/1.0 [err_accessdenied err/1.0] [err_depre err/1.0]]
testouterr_cmd bash {load all/1.0 foo/1.0 setenv/1.0} ERR $ts_depre_load_forbidden
unsetenv_loaded_module
unsetenv_var __MODULES_LMPREREQ
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD forbidden
testouterr_cmd bash {load all/1.0 err/1.0 foo/1.0} ERR $ts_forbidden
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD not_found
testouterr_cmd bash {load all/1.0 unk/1.0 foo/1.0} ERR $ts_not_found
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD already_loaded
setenv_loaded_module [list err/1.0] [list $mp/err/1.0]
testouterr_cmd bash {load all/1.0 err/1.0 foo/1.0} $ans_already_loaded {}
unsetenv_loaded_module
#
# abort behavior (single module to load, no effect)
#
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD bad
testouterr_cmd bash {load err/1.0} ERR $ts_bad
# --force has no effect
testouterr_cmd bash {load --force err/1.0} ERR $ts_bad
testouterr_cmd bash {load foo/1.0} $ans_single_foo {}
#
# abort behavior ("module load" command in modulefile, no effect)
#
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD load_last_bad
testouterr_cmd bash {load lerr/1.0} ERR $ts_load_bad
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD load_first_bad
testouterr_cmd bash {load lerr/1.0} ERR $ts_load_bad
setenv_var TESTSUITE_ERROR_ON_MULTI_LOAD load_first_break
testouterr_cmd bash {load lerr/1.0} ERR $ts_load_break
#
# Cleanup
#
reset_test_env