mirror of
https://github.com/envmodules/modules.git
synced 2026-05-30 00:12:31 +08:00
ts: add test env save/restore mechanism
Add the save_test_env and reset_test_env procedure to record original test environment (global and environment variables) and restore it once a test set has been done.
This commit is contained in:
@@ -41,7 +41,7 @@ fi
|
||||
# make target
|
||||
target=test
|
||||
testserie=modules
|
||||
setuptestfiles=(00/005 00/006 00/010 00/050 00/080)
|
||||
setuptestfiles=(00/005 00/006 00/010 00/050 00/080 00/085)
|
||||
if [ $# -gt 0 ]; then
|
||||
if [ "$1" = "cov" ]; then
|
||||
export COVERAGE=y
|
||||
@@ -49,7 +49,7 @@ if [ $# -gt 0 ]; then
|
||||
elif [ "$1" = "install" ]; then
|
||||
target=testinstall
|
||||
testserie=install
|
||||
setuptestfiles=(00/005 00/006 00/010)
|
||||
setuptestfiles=(00/005 00/006 00/010 00/011)
|
||||
shift
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -1242,3 +1242,100 @@ proc setenv_loaded_module {modlist modfilelist {notaskedmodlist {}}} {
|
||||
unsetenv_path_var MODULES_LMNOTUASKED
|
||||
}
|
||||
}
|
||||
|
||||
# when saving variable ignore internal variable used to perform tests
|
||||
array set skipped_var [list runtests 1 subdir 1 errorInfo 1 test_counts 1\
|
||||
errorCode 1 comp_error 1 dir 1 test_name 1 comp_output 1 comp_exit 1\
|
||||
autoinit_mode 1 endpipe 1 saved_var 1 saved_array_var 1 saved_env_var 1\
|
||||
env 1 skipped_var 1 auto_execs 1 shell 1]
|
||||
|
||||
# save name and value for any global variables
|
||||
proc save_test_env {} {
|
||||
# reset dump structs
|
||||
foreach var [list saved_var saved_array_var saved_env_var] {
|
||||
global $var
|
||||
if {[info exists $var]} {
|
||||
array unset $var
|
||||
}
|
||||
}
|
||||
|
||||
global env skipped_var
|
||||
|
||||
foreach var [info globals] {
|
||||
if {![info exists skipped_var($var)]} {
|
||||
if {[array exists ::$var]} {
|
||||
set saved_var($var) [array get ::$var]
|
||||
set saved_array_var($var) 1
|
||||
} else {
|
||||
set saved_var($var) [set ::$var]
|
||||
}
|
||||
}
|
||||
}
|
||||
send_user "\tSaved test variables: [array names saved_var]\n"
|
||||
array set saved_env_var [array get ::env]
|
||||
send_user "\tSaved test environment variables: [array names\
|
||||
saved_env_var]\n"
|
||||
}
|
||||
|
||||
# restore test environment to its initial saved sate
|
||||
proc reset_test_env {} {
|
||||
global saved_var saved_array_var saved_env_var env skipped_var
|
||||
|
||||
# reset Tcl global variables
|
||||
foreach var [info globals] {
|
||||
if {![info exists skipped_var($var)]} {
|
||||
# temp variables should be unset
|
||||
if {![info exists saved_var($var)]} {
|
||||
lappend unset_list $var
|
||||
unset ::$var
|
||||
# initial value should be restored if changed
|
||||
} elseif {![info exists saved_array_var($var)]} {
|
||||
if {$saved_var($var) ne [set ::$var]} {
|
||||
lappend restore_list $var
|
||||
set ::$var $saved_var($var)
|
||||
}
|
||||
} else {
|
||||
if {$saved_var($var) ne [array get ::$var]} {
|
||||
lappend restore_list $var
|
||||
array set ::$var $saved_var($var)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
# unset saved variables should be restored
|
||||
foreach var [array names saved_var] {
|
||||
if {![info exists ::$var]} {
|
||||
lappend restore_list $var
|
||||
set ::$var $saved_var($var)
|
||||
}
|
||||
}
|
||||
|
||||
if {[info exists unset_list]} {
|
||||
send_user "\tUnset temp variables: $unset_list\n"
|
||||
}
|
||||
if {[info exists restore_list]} {
|
||||
send_user "\tRestore test variable initial values: $restore_list\n"
|
||||
}
|
||||
|
||||
# reset environment variables
|
||||
foreach var [array names env] {
|
||||
# temp variables should be unset
|
||||
if {![info exists saved_env_var($var)]} {
|
||||
send_user "\tUnset $var\n"
|
||||
unset env($var)
|
||||
# initial value should be restored if changed
|
||||
} else {
|
||||
if {$saved_env_var($var) ne $env($var)} {
|
||||
send_user "\tSetup $var = '$saved_env_var($var)'\n"
|
||||
set env($var) $saved_env_var($var)
|
||||
}
|
||||
}
|
||||
}
|
||||
# unset saved variables should be restored
|
||||
foreach var [array names saved_env_var] {
|
||||
if {![info exists env($var)]} {
|
||||
send_user "\tSetup $var = '$saved_env_var($var)'\n"
|
||||
set env($var) $saved_env_var($var)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
23
testsuite/install.00-init/011-save_test_env.exp
Normal file
23
testsuite/install.00-init/011-save_test_env.exp
Normal file
@@ -0,0 +1,23 @@
|
||||
##############################################################################
|
||||
# Modules Revision 3.0
|
||||
# Providing a flexible user environment
|
||||
#
|
||||
# File: modules.00-init/%M%
|
||||
# Revision: %I%
|
||||
# First Edition: 2020/12/06
|
||||
# Last Mod.: %U%, %G%
|
||||
#
|
||||
# Authors: Xavier Delaruelle, xavier.delaruelle@cea.fr
|
||||
#
|
||||
# Description: Testuite testsequence
|
||||
# Command:
|
||||
# Sub-Command:
|
||||
#
|
||||
# Comment: %C{
|
||||
# Save variable set defined to perform test, which will
|
||||
# be restored at end of each test set
|
||||
# }C%
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
save_test_env
|
||||
23
testsuite/modules.00-init/085-save_test_env.exp
Normal file
23
testsuite/modules.00-init/085-save_test_env.exp
Normal file
@@ -0,0 +1,23 @@
|
||||
##############################################################################
|
||||
# Modules Revision 3.0
|
||||
# Providing a flexible user environment
|
||||
#
|
||||
# File: modules.00-init/%M%
|
||||
# Revision: %I%
|
||||
# First Edition: 2020/12/06
|
||||
# Last Mod.: %U%, %G%
|
||||
#
|
||||
# Authors: Xavier Delaruelle, xavier.delaruelle@cea.fr
|
||||
#
|
||||
# Description: Testuite testsequence
|
||||
# Command:
|
||||
# Sub-Command:
|
||||
#
|
||||
# Comment: %C{
|
||||
# Save variable set defined to perform test, which will
|
||||
# be restored at end of each test set
|
||||
# }C%
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
save_test_env
|
||||
@@ -62,3 +62,6 @@ proc _test_modules {shell cmd output} {
|
||||
send_user "expected: $output\n";
|
||||
}
|
||||
}
|
||||
|
||||
# save specific test env
|
||||
save_test_env
|
||||
|
||||
@@ -28,3 +28,6 @@ unset modload
|
||||
unset line2
|
||||
unset line2x
|
||||
unset find_msg_sh
|
||||
|
||||
# restore orig saved test env
|
||||
save_test_env
|
||||
|
||||
@@ -259,3 +259,6 @@ set c16contre "$mlu {$c16modpath1re}\n$mll {$c16mod1}\n$mll {$c16mod2}\n$mll $c1
|
||||
|
||||
# generate modulefiles that cannot be recorded in git repository
|
||||
create_endspace_test_modulefiles
|
||||
|
||||
# save specific test env
|
||||
save_test_env
|
||||
|
||||
@@ -257,3 +257,6 @@ unset homewithcolldotmod
|
||||
unset homewithcolldotmodre
|
||||
unset hometestcoll
|
||||
unset hometestdotmod
|
||||
|
||||
# restore orig saved test env
|
||||
save_test_env
|
||||
|
||||
@@ -27,3 +27,6 @@ set whatis_cf "$env(MODULEWHATISCACHE)apropos.cache"
|
||||
if { [ file exists $whatis_cf ] } {
|
||||
catch { exec /bin/rm $whatis_cf }
|
||||
}
|
||||
|
||||
# save specific test env
|
||||
save_test_env
|
||||
|
||||
@@ -23,3 +23,6 @@
|
||||
|
||||
unset env(MODULEWHATISCACHE)
|
||||
unset whatis_cf
|
||||
|
||||
# restore orig saved test env
|
||||
save_test_env
|
||||
|
||||
@@ -136,3 +136,6 @@ set ibadvers0 "badmodvers"
|
||||
set obadvers0 "badmodvers/foo"
|
||||
set ibadvers1 "badmodvers/dir1"
|
||||
set obadvers1 "badmodvers/dir1/2.0"
|
||||
|
||||
# save specific test env
|
||||
save_test_env
|
||||
|
||||
@@ -136,3 +136,6 @@ unset ibadvers0
|
||||
unset obadvers0
|
||||
unset ibadvers1
|
||||
unset obadvers1
|
||||
|
||||
# restore orig saved test env
|
||||
save_test_env
|
||||
|
||||
@@ -36,3 +36,5 @@ set version6 "1.10"
|
||||
set module6 "$module/$version6"
|
||||
set modulefile6 "$modpath/$module6"
|
||||
|
||||
# save specific test env
|
||||
save_test_env
|
||||
|
||||
@@ -34,3 +34,6 @@ unset version5
|
||||
unset version6
|
||||
unset module6
|
||||
unset modulefile6
|
||||
|
||||
# restore orig saved test env
|
||||
save_test_env
|
||||
|
||||
@@ -46,3 +46,5 @@ set modulepath "$path\:$modpath"
|
||||
|
||||
setenv_path_var MODULEPATH $modulepath
|
||||
|
||||
# save specific test env
|
||||
save_test_env
|
||||
|
||||
@@ -47,3 +47,6 @@ if { $verbose > 1 } {
|
||||
if { [ version_test "BEGINENV=\[1-9\]" ] } {
|
||||
file delete $env(_MODULESBEGINENV_)
|
||||
}
|
||||
|
||||
# restore orig saved test env
|
||||
save_test_env
|
||||
|
||||
Reference in New Issue
Block a user