1##############################################################################
2#   Modules Revision 3.0
3#   Providing a flexible user environment
4#
5#   File:		modules.50-cmds/%M%
6#   Revision:		%I%
7#   First Edition:	2018/04/16
8#   Last Mod.:		%U%, %G%
9#
10#   Authors:		Xavier Delaruelle, xavier.delaruelle@cea.fr
11#
12#   Description:	Testuite testsequence
13#   Command:        load, unload, display, test, help, whatis
14#   Modulefiles:    allenvchg
15#   Sub-Command:    append-path, prepend-path, setenv, remove-path,
16#                   unsetenv, getenv
17#
18#   Comment:	%C{
19#           Test all environment variable change modulefile commands against
20#           the different modes
21#		}C%
22#
23##############################################################################
24
25# ensure auto symbolic versions are not set for these tests
26setenv_var MODULES_ADVANCED_VERSION_SPEC 0
27
28set modulepath "$modpath.allin"
29set modulepathre "$modpathre.allin"
30set module "allenvchg"
31set modulefile "$modulepath/$module"
32set modulefilere "$modulepathre/$module"
33
34
35proc display_stderr_content {modfile content {premodlin 1}} {
36    if {$content ne ""} {
37        append content "\n"
38    }
39
40    if {$premodlin} {
41        set header "$::modlin\n"
42    } else {
43        set header ""
44    }
45
46    return "$header$modfile:\n\n$content$::modlin"
47}
48
49proc help_stderr_content {modfile content {procwarn 0} {premodlin 1}} {
50    if {$content ne ""} {
51        append content "\n"
52    }
53
54    if {$procwarn} {
55        append content "WARNING: Unable to find ModulesHelp in $modfile.\n"
56    }
57
58    if {$premodlin} {
59        set header "$::modlin\n"
60    } else {
61        set header ""
62    }
63
64    return "${header}Module Specific Help for $modfile:\n\n$content$::modlin"
65}
66
67proc test_stderr_content {modfile content {procwarn 0} {premodlin 1}} {
68    if {$content ne ""} {
69        append content "\n"
70    }
71
72    if {$procwarn} {
73        append content "WARNING: Unable to find ModulesTest in $modfile.\n"
74    } else {
75        append content "Test result: PASS\n"
76    }
77
78    if {$premodlin} {
79        set header "$::modlin\n"
80    } else {
81        set header ""
82    }
83
84    return "${header}Module Specific Test for $modfile:\n\n$content$::modlin"
85}
86
87
88# setup specific environment
89setenv_path_var MODULEPATH $modulepath
90
91#
92# test load mode
93#
94
95set tsall ",dir2,dir2:dir1,,_UNDEFINED_altered,dir2,_UNDEFINED_altered,ok8,ok9"
96
97set ans [list]
98lappend ans [list unset ts1]
99lappend ans [list set ts2 "dir2"]
100lappend ans [list set ts3 "dir2:dir1"]
101lappend ans [list set ts4 ""]
102lappend ans [list setpath TSPATH dir2]
103lappend ans [list set ts5 "_UNDEFINED_altered"]
104lappend ans [list set ts6 "dir2"]
105lappend ans [list set ts7 "_UNDEFINED_altered"]
106lappend ans [list set ts8 "ok8"]
107lappend ans [list set ts9 "ok9"]
108lappend ans [list setpath TSPATH2 ok8]
109lappend ans [list setpath TSPATH3 "ok8:ok9"]
110lappend ans [list setpath LOADEDMODULES "$module/1:$module/2"]
111lappend ans [list setpath _LMFILES_ "$modulefile/1:$modulefile/2"]
112lappend ans [list set tsall $tsall]
113# env changes spread to next loaded modulefiles
114testouterr_cmd_re "sh" "load $module/1 $module/2" $ans ""
115
116# test with value set to variable prior to load
117setenv_var ts2 "dir2"
118setenv_var ts3 "dir2:dir1"
119setenv_var ts4 ""
120setenv_path_var TSPATH "dir2"
121setenv_var ts5 "_UNDEFINED_altered"
122setenv_var ts6 "dir2"
123setenv_var ts7 "_UNDEFINED_altered"
124setenv_var ts8 "ok8"
125setenv_var ts9 "ok9"
126setenv_path_var TSPATH2 "ok8"
127setenv_path_var TSPATH3 "ok8:ok9"
128setenv_var tsall $tsall
129
130testouterr_cmd_re "sh" "load $module/1 $module/2" $ans ""
131
132
133#
134# test unload mode
135#
136
137# test with module loaded
138setenv_loaded_module [list "$module/1" "$module/2"] [list "$modulefile/1" "$modulefile/2"]
139
140set ans [list]
141lappend ans [list unset TSPATH2_modshare]
142lappend ans [list unset ts1]
143lappend ans [list unset ts2]
144lappend ans [list unset _LMFILES_]
145lappend ans [list unset LOADEDMODULES]
146lappend ans [list unset ts3]
147lappend ans [list unset ts4]
148lappend ans [list unset TSPATH]
149lappend ans [list unset ts5]
150lappend ans [list unset ts6]
151lappend ans [list unset TSPATH2]
152lappend ans [list unset ts7]
153lappend ans [list set TSPATH3 ok8]
154lappend ans [list unset ts8]
155lappend ans [list unset tsall]
156lappend ans [list unset ts9]
157lappend ans [list set TSPATH3_modshare "ok8:1"]
158lappend ans [list unset _LMFILES__modshare]
159lappend ans [list unset LOADEDMODULES_modshare]
160lappend ans [list unset TSPATH_modshare]
161testouterr_cmd "sh" "unload $module/1 $module/2" $ans ""
162
163# test with module loaded but vanished env vars
164unsetenv_var ts2
165unsetenv_var ts3
166unsetenv_var ts4
167unsetenv_path_var TSPATH
168unsetenv_var ts5
169unsetenv_var ts6
170unsetenv_var ts7
171unsetenv_var ts8
172unsetenv_var ts9
173unsetenv_path_var TSPATH2
174unsetenv_path_var TSPATH3
175unsetenv_var tsall
176
177set ans [list]
178lappend ans [list unset ts1]
179lappend ans [list unset ts2]
180lappend ans [list unset _LMFILES_]
181lappend ans [list unset LOADEDMODULES]
182lappend ans [list unset ts3]
183lappend ans [list unset ts4]
184lappend ans [list unset TSPATH]
185lappend ans [list unset ts5]
186lappend ans [list unset ts6]
187lappend ans [list unset ts7]
188lappend ans [list unset TSPATH2]
189lappend ans [list unset TSPATH3]
190lappend ans [list unset ts8]
191lappend ans [list unset tsall]
192lappend ans [list unset ts9]
193lappend ans [list unset _LMFILES__modshare]
194lappend ans [list unset LOADEDMODULES_modshare]
195testouterr_cmd "sh" "unload $module/1 $module/2" $ans ""
196
197# restore environment
198unsetenv_loaded_module
199
200
201#
202# test display mode
203#
204
205# test without module loaded
206set tsdisp "append-path\tTSPATH dir1
207prepend-path\tTSPATH dir2
208setenv\t\tts1 dir2:dir1
209remove-path\tTSPATH dir1
210setenv\t\tts2 dir2
211setenv\t\tts3 dir2:dir1
212unsetenv\tts1
213setenv\t\tts4 {}
214setenv\t\tts5 \\\$ts1
215remove-path\tTSPATH dir1
216setenv\t\tts6 dir2
217setenv\t\tts7 \\\$ts5
218setenv\t\tts8 ok8
219setenv\t\tts9 ok9
220append-path\tTSPATH2 ok8
221append-path\tTSPATH3 ok8 \\\$ts9
222module-whatis\t,dir2,dir2:dir1,,\\\$ts1altered,dir2,\\\$ts5,ok8,ok9"
223set tserr [display_stderr_content "$modulefilere/1" $tsdisp]
224set tsdisp "setenv\t\ttsall ,dir2,dir2:dir1,,\\\$ts1altered,dir2,\\\$ts5,ok8,ok9
225module-whatis\t,dir2,dir2:dir1,,\\\$ts1altered,dir2,\\\$ts5,ok8,ok9"
226append tserr "\n[display_stderr_content $modulefilere/2 $tsdisp 0]"
227testouterr_cmd_re "sh" "display $module/1 $module/2" "" $tserr
228
229# test with module loaded
230setenv_loaded_module [list "$module/1" "$module/2"] [list "$modulefile/1" "$modulefile/2"]
231setenv_var ts2 "dir2"
232setenv_var ts3 "dir2:dir1"
233setenv_var ts4 ""
234setenv_path_var TSPATH "dir2"
235setenv_var ts5 "_UNDEFINED_altered"
236setenv_var ts6 "dir2"
237setenv_var ts7 "_UNDEFINED_altered"
238setenv_var ts8 "ok8"
239setenv_var ts9 "ok9"
240setenv_path_var TSPATH2 "ok8"
241setenv_path_var TSPATH3 "ok8:ok9"
242setenv_var tsall $tsall
243
244testouterr_cmd_re "sh" "display $module/1 $module/2" "" $tserr
245
246# restore environment
247unsetenv_loaded_module
248unsetenv_var ts2
249unsetenv_var ts3
250unsetenv_var ts4
251unsetenv_path_var TSPATH
252unsetenv_var ts5
253unsetenv_var ts6
254unsetenv_var ts7
255unsetenv_var ts8
256unsetenv_var ts9
257unsetenv_path_var TSPATH2
258unsetenv_path_var TSPATH3
259unsetenv_var tsall
260
261
262#
263# test help mode
264#
265
266# test without module loaded
267set tserr [help_stderr_content "$modulefilere/1" $tsall]
268append tserr "\n[help_stderr_content $modulefilere/2 $tsall 0 0]"
269testouterr_cmd_re "sh" "help $module/1 $module/2" "" $tserr
270
271# test with module loaded
272setenv_loaded_module [list "$module/1" "$module/2"] [list "$modulefile/1" "$modulefile/2"]
273setenv_var ts2 "dir2"
274setenv_var ts3 "dir2:dir1"
275setenv_var ts4 ""
276setenv_path_var TSPATH "dir2"
277setenv_var ts5 "_UNDEFINED_altered"
278setenv_var ts6 "dir2"
279setenv_var ts7 "_UNDEFINED_altered"
280setenv_var ts8 "ok8"
281setenv_var ts9 "ok9"
282setenv_path_var TSPATH2 "ok8"
283setenv_path_var TSPATH3 "ok8:ok9"
284setenv_var tsall $tsall
285
286testouterr_cmd_re "sh" "help $module/1 $module/2" "" $tserr
287
288# restore environment
289unsetenv_loaded_module
290unsetenv_var ts2
291unsetenv_var ts3
292unsetenv_var ts4
293unsetenv_path_var TSPATH
294unsetenv_var ts5
295unsetenv_var ts6
296unsetenv_var ts7
297unsetenv_var ts8
298unsetenv_var ts9
299unsetenv_path_var TSPATH2
300unsetenv_path_var TSPATH3
301unsetenv_var tsall
302
303
304#
305# test test mode
306#
307
308# test without module loaded
309set tserr [test_stderr_content "$modulefilere/1" $tsall]
310append tserr "\n[test_stderr_content $modulefilere/2 $tsall 0 0]"
311testouterr_cmd_re "sh" "test $module/1 $module/2" "" $tserr
312
313# test with module loaded
314setenv_loaded_module [list "$module/1" "$module/2"] [list "$modulefile/1" "$modulefile/2"]
315setenv_var ts2 "dir2"
316setenv_var ts3 "dir2:dir1"
317setenv_var ts4 ""
318setenv_path_var TSPATH "dir2"
319setenv_var ts5 "_UNDEFINED_altered"
320setenv_var ts6 "dir2"
321setenv_var ts7 "_UNDEFINED_altered"
322setenv_var ts8 "ok8"
323setenv_var ts9 "ok9"
324setenv_path_var TSPATH2 "ok8"
325setenv_path_var TSPATH3 "ok8:ok9"
326setenv_var tsall $tsall
327
328testouterr_cmd_re "sh" "test $module/1 $module/2" "" $tserr
329
330# restore environment
331unsetenv_loaded_module
332unsetenv_var ts2
333unsetenv_var ts3
334unsetenv_var ts4
335unsetenv_path_var TSPATH
336unsetenv_var ts5
337unsetenv_var ts6
338unsetenv_var ts7
339unsetenv_var ts8
340unsetenv_var ts9
341unsetenv_path_var TSPATH2
342unsetenv_path_var TSPATH3
343unsetenv_var tsall
344
345
346#
347# test whatis mode
348#
349
350# *setenv and *-path cmds only init var if undefined with empty value
351set tsallwh1 ",,,,altered,,,,"
352set tsallwh2 ",dir2,dir2:dir1,,_UNDEFINED_alteredaltered,dir2,_UNDEFINED_altered,ok8,ok9"
353
354# test without module loaded
355set whatis "$modlin $modulepathre $modlin\n\\s+$module/1: $tsallwh1\n\\s+$module/2: "
356testouterr_cmd_re "sh" "whatis $module" "" $whatis
357
358# test with module loaded
359setenv_loaded_module [list "$module/1" "$module/2"] [list "$modulefile/1" "$modulefile/2"]
360setenv_var ts2 "dir2"
361setenv_var ts3 "dir2:dir1"
362setenv_var ts4 ""
363setenv_path_var TSPATH "dir2"
364setenv_var ts5 "_UNDEFINED_altered"
365setenv_var ts6 "dir2"
366setenv_var ts7 "_UNDEFINED_altered"
367setenv_var ts8 "ok8"
368setenv_var ts9 "ok9"
369setenv_path_var TSPATH2 "ok8"
370setenv_path_var TSPATH3 "ok8:ok9"
371setenv_var tsall $tsall
372
373set whatis "$modlin $modulepathre $modlin\n\\s+$module/1: $tsallwh2\n\\s+$module/2: $tsall"
374testouterr_cmd_re "sh" "whatis $module" "" $whatis
375
376# restore environment
377unsetenv_loaded_module
378unsetenv_var ts2
379unsetenv_var ts3
380unsetenv_var ts4
381unsetenv_path_var TSPATH
382unsetenv_var ts5
383unsetenv_var ts6
384unsetenv_var ts7
385unsetenv_var ts8
386unsetenv_var ts9
387unsetenv_path_var TSPATH2
388unsetenv_path_var TSPATH3
389unsetenv_var tsall
390
391
392#
393#  Cleanup
394#
395
396unsetenv_var MODULES_ADVANCED_VERSION_SPEC
397# restore MODULEPATH
398setenv_path_var MODULEPATH $modpath
399
400unset module
401unset modulefile
402unset modulefilere
403unset modulepath
404unset modulepathre
405unset whatis
406unset tsdisp
407unset tserr
408unset tsall
409unset tsallwh1
410unset tsallwh2
411unset ans
412
413# remove procs
414rename display_stderr_content {}
415rename help_stderr_content {}
416rename test_stderr_content {}
417