@@ -11,11 +11,17 @@ if [ -z ${EXPECTED_EASYBUILD_VERSION} ]; then
1111 exit 1
1212fi
1313
14+ if [ -z ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} ]; then
15+ echo " \$ EESSI_SOFTWARE_SUBDIR_OVERRIDE has to be set (e.g., x86_64/intel/haswell) so we can do well defined string comparison for the architecture."
16+ exit 1
17+ fi
18+
1419# initialize assert framework
1520if [ ! -d assert.sh ]; then
1621 echo " assert.sh not cloned."
1722 echo " "
1823 echo " run \` git clone https://github.com/lehmannro/assert.sh.git\` "
24+ echo " (see workflow file that calls this script for how to only clone specific commit if you are worried about security)"
1925 exit 1
2026fi
2127. assert.sh/assert.sh
@@ -28,12 +34,16 @@ for shell in ${SHELLS[@]}; do
2834 echo RUNNING TESTS FOR SHELL: $shell
2935 echo = | awk ' NF += (OFS = $_) + 100'
3036 if [[ ! " ${TEST_SHELLS[*]} " =~ [[:space:]]${shell} [[:space:]] ]]; then
31- # ## EXCEPTION FOR CSH ###
3237 echo -e " \033[33mWe don't now how to test the shell '$shell ', PRs are Welcome.\033[0m"
3338 else
39+ if [ " $shell " = " csh" ]; then
40+ # make sure our .cshrc is empty before we begin as we will clobber it
41+ [ -f ~ /.cshrc ] && mv ~ /.cshrc ~ /.cshrc_orig
42+ fi
43+
3444 # TEST 1: Source Script and check Module Output
35- expected= " Module for EESSI/$EESSI_VERSION loaded successfully "
36- assert " $shell -c 'source init/lmod/$shell ' 2>&1 " " ${expected} "
45+ expected_pattern= " .*EESSI has selected $EESSI_SOFTWARE_SUBDIR_OVERRIDE as the compatible CPU target for EESSI/$EESSI_VERSION .* "
46+ assert_raises " $shell -c 'source init/lmod/$shell ' 2>&1 | grep -E \ "${expected_pattern} \" "
3747
3848 # TEST 2: Check if module overviews first section is the loaded EESSI module
3949 if [ " $shell " = " csh" ]; then
@@ -43,21 +53,22 @@ for shell in ${SHELLS[@]}; do
4353 echo " source init/lmod/$shell " > ~ /.cshrc
4454 MODULE_SECTIONS=($( $shell -c " module ov" 2>&1 | grep -e ' ---' ) )
4555 else
46- MODULE_SECTIONS=($( $shell -c " source init/lmod/$shell 2 >/dev/null; module ov 2>&1 | grep -e '---'" ) )
56+ MODULE_SECTIONS=($( $shell -c " source init/lmod/$shell >/dev/null 2>&1 ; module ov 2>&1 | grep -e '---'" ) )
4757 fi
48- PATTERN=" /cvmfs/software\.eessi\.io/versions/$EESSI_VERSION /software/linux/x86_64/(intel/haswell|amd/zen3) /modules/all"
58+ PATTERN=" /cvmfs/software\.eessi\.io/versions/$EESSI_VERSION /software/linux/$EESSI_SOFTWARE_SUBDIR_OVERRIDE /modules/all"
4959 assert_raises ' echo "${MODULE_SECTIONS[1]}" | grep -E "$PATTERN"'
60+ # echo "${MODULE_SECTIONS[1]}" "$PATTERN"
5061
5162 # TEST 3: Check if module overviews second section is the EESSI init module
52- assert " echo ${MODULE_SECTIONS[4]} " " /cvmfs/software.eessi.io/versions/ $EESSI_VERSION / init/modules"
63+ assert " echo ${MODULE_SECTIONS[4]} " " /cvmfs/software.eessi.io/init/modules"
5364
5465 # TEST 4: Load EasyBuild module and check version
5566 # eb --version outputs: "This is EasyBuild 5.1.1 (framework: 5.1.1, easyblocks: 5.1.1) on host ..."
5667 if [ " $shell " = " csh" ]; then
5768 echo " source init/lmod/$shell " > ~ /.cshrc
58- command=" $shell -c 'module load EasyBuild/${EXPECTED_EASYBUILD_VERSION} ; eb --version' | cut -d \" \" -f4 "
69+ command=" $shell -c 'module load EasyBuild/${EXPECTED_EASYBUILD_VERSION} ; eb --version' | tail -n 1 | awk '{print \$ 4}' "
5970 else
60- command=" $shell -c 'source init/lmod/$shell 2 >/dev/null; module load EasyBuild/${EXPECTED_EASYBUILD_VERSION} ; eb --version | cut -d \" \" -f4 '"
71+ command=" $shell -c 'source init/lmod/$shell >/dev/null 2>&1 ; module load EasyBuild/${EXPECTED_EASYBUILD_VERSION} ; eb --version' | tail -n 1 | awk '{print \$ 4} '"
6172 fi
6273 assert " $command " " $EXPECTED_EASYBUILD_VERSION "
6374
@@ -69,12 +80,82 @@ for shell in ${SHELLS[@]}; do
6980 EASYBUILD_PATH=$( $shell -c " source init/lmod/$shell 2>/dev/null; module load EasyBuild/${EXPECTED_EASYBUILD_VERSION} ; which eb" )
7081 fi
7182 # escape the dots in ${EASYBUILD_VERSION}
72- PATTERN=" /cvmfs/software\.eessi\.io/versions/$EESSI_VERSION /software/linux/x86_64/(intel/haswell|amd/zen3) /software/EasyBuild/${EXPECTED_EASYBUILD_VERSION// ./ \\ .} /bin/eb"
73- echo " $EASYBUILD_PATH " | grep -E " $PATTERN "
83+ PATTERN=" /cvmfs/software\.eessi\.io/versions/$EESSI_VERSION /software/linux/$EESSI_SOFTWARE_SUBDIR_OVERRIDE /software/EasyBuild/${EXPECTED_EASYBUILD_VERSION// ./ \\ .} /bin/eb"
84+ # echo "$EASYBUILD_PATH" | grep -E "$PATTERN"
7485 assert_raises ' echo "$EASYBUILD_PATH" | grep -E "$PATTERN"'
86+ # echo "$EASYBUILD_PATH" "$PATTERN"
87+
88+ # TEST 6 and 7: Check the various options (EESSI_DEFAULT_MODULES_APPEND, EESSI_DEFAULT_MODULES_APPEND, EESSI_EXTRA_MODULEPATH) all work
89+ if [ " $shell " = " csh" ]; then
90+ echo " setenv EESSI_DEFAULT_MODULES_APPEND append_module" > ~ /.cshrc
91+ echo " setenv EESSI_DEFAULT_MODULES_PREPEND prepend_module" >> ~ /.cshrc
92+ echo " setenv EESSI_EXTRA_MODULEPATH .github/workflows/modules" >> ~ /.cshrc
93+ echo " source init/lmod/$shell " >> ~ /.cshrc
94+ TEST_LMOD_SYSTEM_DEFAULT_MODULES=$( $shell -c ' echo $LMOD_SYSTEM_DEFAULT_MODULES' )
95+ TEST_MODULEPATH=$( $shell -c ' echo $MODULEPATH' )
96+ elif [ " $shell " = " fish" ]; then
97+ TEST_LMOD_SYSTEM_DEFAULT_MODULES=$( $shell -c ' set -x EESSI_DEFAULT_MODULES_APPEND append_module ; set -x EESSI_DEFAULT_MODULES_PREPEND prepend_module ; set -x EESSI_EXTRA_MODULEPATH .github/workflows/modules ; source init/lmod/' " $shell " ' 2>/dev/null; echo $LMOD_SYSTEM_DEFAULT_MODULES' )
98+ TEST_MODULEPATH=$( $shell -c ' set -x EESSI_DEFAULT_MODULES_APPEND append_module ; set -x EESSI_DEFAULT_MODULES_PREPEND prepend_module ; set -x EESSI_EXTRA_MODULEPATH .github/workflows/modules ; source init/lmod/' " $shell " ' 2>/dev/null; echo $MODULEPATH' )
99+ else
100+ TEST_LMOD_SYSTEM_DEFAULT_MODULES=$( $shell -c ' export EESSI_DEFAULT_MODULES_APPEND=append_module ; export EESSI_DEFAULT_MODULES_PREPEND=prepend_module ; export EESSI_EXTRA_MODULEPATH=.github/workflows/modules ; source init/lmod/' " $shell " ' ; echo $LMOD_SYSTEM_DEFAULT_MODULES' )
101+ TEST_MODULEPATH=$( $shell -c ' export EESSI_DEFAULT_MODULES_APPEND=append_module ; export EESSI_DEFAULT_MODULES_PREPEND=prepend_module ; export EESSI_EXTRA_MODULEPATH=.github/workflows/modules ; source init/lmod/' " $shell " ' 2>/dev/null; echo $MODULEPATH' )
102+ fi
103+ LMOD_SYSTEM_DEFAULT_MODULES_PATTERN=' ^prepend_module:.*:append_module$'
104+ # echo "$TEST_LMOD_SYSTEM_DEFAULT_MODULES" AND "$LMOD_SYSTEM_DEFAULT_MODULES_PATTERN"
105+ assert_raises ' echo "$TEST_LMOD_SYSTEM_DEFAULT_MODULES" | grep -E "$LMOD_SYSTEM_DEFAULT_MODULES_PATTERN"'
106+ if [ " $shell " = " fish" ]; then
107+ MODULEPATH_PATTERN=' \.github/workflows/modules$'
108+ else
109+ MODULEPATH_PATTERN=' :\.github/workflows/modules$'
110+ fi
111+ # echo "$TEST_MODULEPATH" AND "$MODULEPATH_PATTERN"
112+ assert_raises ' echo "$TEST_MODULEPATH" | grep -E "$MODULEPATH_PATTERN"'
113+
114+ # TEST 8 and 9: Add a conditional test depending on whether we have the Lmod command is available locally or not (Ubuntu-based location for CI)
115+ if [ -d " $LMOD_PKG /init" ]; then
116+ echo " Running check for locally available Lmod with purge"
117+ if [ " $shell " = " csh" ]; then
118+ echo " source $LMOD_PKG /init/$shell " > ~ /.cshrc
119+ echo " source init/lmod/$shell " >> ~ /.cshrc
120+ TEST_EESSI_WITH_PURGE=$( $shell -c ' echo' )
121+ echo " source $LMOD_PKG /init/$shell " > ~ /.cshrc
122+ echo " setenv EESSI_NO_MODULE_PURGE_ON_INIT 1" >> ~ /.cshrc
123+ echo " source init/lmod/$shell " >> ~ /.cshrc
124+ TEST_EESSI_WITHOUT_PURGE=$( $shell -c ' echo $EESSI_NO_MODULE_PURGE_ON_INIT' )
125+ elif [ " $shell " = " fish" ]; then
126+ TEST_EESSI_WITH_PURGE=$( $shell -c " source $LMOD_PKG /init/$shell 2>/dev/null ; source init/lmod/$shell 2>/dev/null" )
127+ TEST_EESSI_WITHOUT_PURGE=$( $shell -c " set -x EESSI_NO_MODULE_PURGE_ON_INIT 1 ; source $LMOD_PKG /init/$shell 2>/dev/null ; source init/lmod/$shell 2>/dev/null" )
128+ else
129+ TEST_EESSI_WITH_PURGE=$( $shell -c " source $LMOD_PKG /init/$shell 2>/dev/null ; source init/lmod/$shell 2>/dev/null" )
130+ TEST_EESSI_WITHOUT_PURGE=$( $shell -c " export EESSI_NO_MODULE_PURGE_ON_INIT=1 ; source $LMOD_PKG /init/$shell 2>/dev/null ; source init/lmod/$shell 2>/dev/null" )
131+ fi
132+ # In the first case we should have the test and in the second case we shouldn't
133+ pattern=" Modules purged before initialising EESSI"
134+ echo $TEST_EESSI_WITH_PURGE
135+ assert_raises ' echo "$TEST_EESSI_WITH_PURGE" | grep "$pattern"'
136+ # this case should raise 1
137+ echo $TEST_EESSI_WITHOUT_PURGE
138+ assert_raises ' echo "$TEST_EESSI_WITHOUT_PURGE" | grep "$pattern"' 1
139+ fi
140+
141+ # Optional test 10, check if the prompt has been updated
142+ if [ " $shell " = " bash" ] || [ " $shell " = " ksh" ] || [ " $shell " = " zsh" ]; then
143+ # Typically this is a non-interactive shell, so manually unset PS1 and reset to a non-exported variable when testing
144+ TEST_EESSI_PS1_UPDATE=$( $shell -c " unset PS1 ; PS1='$ ' ; source init/lmod/$shell 2>/dev/null ; echo \"\$ PS1\" " )
145+ TEST_EESSI_NO_PS1_UPDATE=$( $shell -c " unset PS1 ; source init/lmod/$shell 2>/dev/null ; echo \"\$ PS1\" " )
146+ pattern=" {EESSI/${EESSI_VERSION} } "
147+ assert_raises ' echo "$TEST_EESSI_PS1_UPDATE" | grep "$pattern"'
148+ assert_raises ' echo "$TEST_EESSI_NO_PS1_UPDATE" | grep "$pattern"' 1
149+ fi
75150
76151 # End Test Suite
77152 assert_end " source_eessi_$shell "
153+
154+ if [ " $shell " = " csh" ]; then
155+ # Restore our .cshrc
156+ [ -f ~ /.cshrc_orig ] && mv ~ /.cshrc_orig ~ /.cshrc
157+ fi
158+
78159 fi
79160done
80161
0 commit comments