File: 180-logger.exp

package info (click to toggle)
modules 5.6.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 23,036 kB
  • sloc: exp: 79,659; sh: 6,142; tcl: 5,900; makefile: 1,493; ansic: 474; python: 265; csh: 202; perl: 47; ruby: 44; lisp: 13
file content (421 lines) | stat: -rw-r--r-- 14,128 bytes parent folder | download | duplicates (2)
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
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
##############################################################################
#   Modules Revision 3.0
#   Providing a flexible user environment
#
#   File:		modules.00-init/%M%
#   Revision:		%I%
#   First Edition:	2024/04/25
#   Last Mod.:		%U%, %G%
#
#   Authors:		Xavier Delaruelle, xavier.delaruelle@cea.fr
#
#   Description:	Testuite testsequence
#   Command:		load, display, avail
#   Modulefiles:    bar, foo
#   Sub-Command:
#
#   Comment:	%C{
#         Test logger feature
#		}C%
#
##############################################################################

if {[is_config_locked logger] || [is_config_locked logged_events]} {
    send_user "\tskipping logger tests as configuration option is locked\n"
} elseif {$is_global_rc_file} {
    send_user "\tskipping logger tests as global RC file is present\n"
} else {

set mp $modpath.4
set mpre $modpathre.4
setenv_path_var MODULEPATH $mp

setenv_var MODULES_SEARCH_MATCH starts_with
setenv_var MODULES_IMPLICIT_DEFAULT 1
setenv_var MODULES_AUTO_HANDLING 1

set log_cmd $env(TESTSUITEDIR)/stdin_to_file
set log_file $env(TESTSUITEDIR)/logfile

proc log_file_content {struct_content_list} {
    set formatted_content_list {}
    foreach struct_line_list $struct_content_list {
        set formatted_line_list [list "user=\"$::username\""]
        foreach {key val} $struct_line_list {
            lappend formatted_line_list "$key=\"$val\""
        }
        lappend formatted_content_list [join $formatted_line_list]
    }
    return [join $formatted_content_list \n]
}

setenv_var TESTSUITE_LOGGER load_dep_and_alias

set ans [list]
lappend ans [list set __MODULES_LMREFRESH bar/1]
lappend ans [list set __MODULES_LMPREREQ bar/1&foo/1.0]
lappend ans [list set _LMFILES_ $mp/foo/1.0:$mp/bar/1]
lappend ans [list set LOADEDMODULES foo/1.0:bar/1]
lappend ans [list set __MODULES_LMTAG foo/1.0&auto-loaded]
lappend ans [list alias albar bar]

set ans_unload [list]
lappend ans_unload [list unset __MODULES_LMPREREQ]
lappend ans_unload [list unset _LMFILES_]
lappend ans_unload [list unset LOADEDMODULES]
lappend ans_unload [list unset __MODULES_LMREFRESH]
lappend ans_unload [list unset __MODULES_LMTAG]
lappend ans_unload [list unalias albar]

set ans_reload [list]
lappend ans_reload [list set __MODULES_LMPREREQ bar/1&foo/1.0]
lappend ans_reload [list set _LMFILES_ $mp/foo/1.0:$mp/bar/1]
lappend ans_reload [list set LOADEDMODULES foo/1.0:bar/1]
lappend ans_reload [list set __MODULES_LMREFRESH bar/1]
lappend ans_reload [list set __MODULES_LMTAG foo/1.0&auto-loaded]
lappend ans_reload [list alias albar bar]


#
# basic log tests
#

unsetenv_var MODULERCFILE
setenv_var MODULES_LOGGER "$log_cmd $log_file"

setenv_var MODULES_LOGGED_EVENTS requested_cmd

set tserr "$mp:\nbar/1"
set anslog [list]
lappend anslog [list command avail arguments {bar/1 -t}]
set tslog [log_file_content $anslog]
testouterrfile_cmd sh {avail -t bar/1} OK $tserr $log_file $tslog


setenv_var MODULES_LOGGED_EVENTS requested_cmd:requested_eval

set tserr [msg_top_load bar/1 {} foo/1.0 {}]
set anslog [list]
lappend anslog [list command load arguments bar/1]
lappend anslog [list mode load module bar/1 specified bar/1 modulefile $mp/bar/1 requested 1]
set tslog [log_file_content $anslog]
testouterrfile_cmd sh {load bar/1} $ans $tserr $log_file $tslog


setenv_var MODULES_LOGGED_EVENTS auto_eval
set anslog [list]
lappend anslog [list mode load module foo/1.0 specified foo/1.0 modulefile $mp/foo/1.0 requested 0]
set tslog [log_file_content $anslog]
testouterrfile_cmd sh {load bar/1} $ans $tserr $log_file $tslog


setenv_var MODULES_LOGGED_EVENTS requested_cmd:requested_eval:auto_eval
set anslog [list]
lappend anslog [list command load arguments bar/1]
lappend anslog [list mode load module foo/1.0 specified foo/1.0 modulefile $mp/foo/1.0 requested 0]
lappend anslog [list mode load module bar/1 specified bar/1 modulefile $mp/bar/1 requested 1]
set tslog [log_file_content $anslog]
testouterrfile_cmd sh {load bar/1} $ans $tserr $log_file $tslog

file delete $log_file
skip_if_quick_mode


#
# command log tests
#

setenv_var MODULES_LOGGED_EVENTS requested_cmd

set anslog [list]
lappend anslog [list command ml arguments bar/1]
set tslog [log_file_content $anslog]
testouterrfile_cmd sh {ml bar/1} $ans $tserr $log_file $tslog

setenv_var MODULES_LOGGED_EVENTS {}

file delete $log_file
set tslog [couldnotopen_nofile $log_file]
testouterrfile_cmd sh {ml bar/1} $ans $tserr $log_file $tslog

setenv_var MODULES_LOGGED_EVENTS requested_cmd

set anslog [list]
lappend anslog [list command load arguments bar/1]
set tslog [log_file_content $anslog]
testouterrfile_cmd sh {ml load bar/1} $ans $tserr $log_file $tslog

set anslog [list]
lappend anslog [list command ml arguments -bar/1]
set tslog [log_file_content $anslog]
testouterrfile_cmd sh {ml -bar/1} OK {} $log_file $tslog

# junk value in option
setenv_var MODULES_LOGGED_EVENTS unk:requested_cmd
testouterrfile_cmd sh {ml -bar/1} OK {} $log_file $tslog

setenv_var MODULES_LOGGED_EVENTS unk
file delete $log_file
set tslog [couldnotopen_nofile $log_file]
testouterrfile_cmd sh {ml load bar/1} $ans $tserr $log_file $tslog

setenv_var MODULES_LOGGED_EVENTS requested_cmd

file delete $log_file
set tserr [err_invopt --bar-arg]
set tslog [couldnotopen_nofile $log_file]
testouterrfile_cmd sh {ml --bar-arg bar/1} ERR $tserr $log_file $tslog

testouterrfile_cmd sh {--bar-arg load bar/1} ERR $tserr $log_file $tslog

set tserr [err_invcmd unk]
testouterrfile_cmd sh {unk bar/1} ERR $tserr $log_file $tslog

# basic options are not recorded
file delete $log_file
testoutfile_cmd sh {-V} OK $log_file $tslog
testoutfile_cmd sh {--help} OK $log_file $tslog


#
# evaluation log tests
#

# top commands
setenv_var MODULES_LOGGED_EVENTS requested_eval
set anslog [list]
lappend anslog [list mode display module bar/2 specified bar modulefile $mp/bar/2 requested 1]
set tslog [log_file_content $anslog]
testoutfile_cmd sh {display bar} OK $log_file $tslog

set anslog [list]
lappend anslog [list mode help module bar/2 specified bar modulefile $mp/bar/2 requested 1]
set tslog [log_file_content $anslog]
testoutfile_cmd sh {help bar} OK $log_file $tslog

set anslog [list]
lappend anslog [list mode test module bar/2 specified bar modulefile $mp/bar/2 requested 1]
set tslog [log_file_content $anslog]
testoutfile_cmd sh {test bar} OK $log_file $tslog

set anslog [list]
lappend anslog [list mode load module bar/2 specified bar modulefile $mp/bar/2 requested 1]
set tslog [log_file_content $anslog]
testoutfile_cmd sh {source bar} OK $log_file $tslog

setenv_var MODULES_LOGGED_EVENTS auto_eval
file delete $log_file
set tslog [couldnotopen_nofile $log_file]
testoutfile_cmd sh {display bar} OK $log_file $tslog
testoutfile_cmd sh {help bar} OK $log_file $tslog
testoutfile_cmd sh {test bar} OK $log_file $tslog
testoutfile_cmd sh {source bar} OK $log_file $tslog


setenv_var MODULES_LOGGED_EVENTS requested_eval:auto_eval

setenv_loaded_module [list foo/1.0 bar/1] [list $mp/foo/1.0 $mp/bar/1] [list foo/1.0]
setenv_var __MODULES_LMPREREQ bar/1&foo/1.0
setenv_var __MODULES_LMREFRESH bar/1

set anslog [list]
lappend anslog [list mode unload module bar/1 specified bar modulefile $mp/bar/1 requested 1]
lappend anslog [list mode unload module foo/1.0 specified foo/1.0 modulefile $mp/foo/1.0 requested 0]
set tslog [log_file_content $anslog]
testoutfile_cmd sh {unload bar} $ans_unload $log_file $tslog

set anslog [list]
lappend anslog [list mode unload module bar/1 specified bar/1 modulefile $mp/bar/1 requested 1]
lappend anslog [list mode unload module foo/1.0 specified foo/1.0 modulefile $mp/foo/1.0 requested 0]
lappend anslog [list mode load module foo/1.0 specified foo/1.0 modulefile $mp/foo/1.0 requested 0]
lappend anslog [list mode load module bar/1 specified bar/1 modulefile $mp/bar/1 requested 1]
set tslog [log_file_content $anslog]
testoutfile_cmd sh {reload} $ans_reload $log_file $tslog

setenv_var MODULES_LOGGED_EVENTS requested_eval
set anslog [list]
lappend anslog [list mode unload module bar/1 specified bar/1 modulefile $mp/bar/1 requested 1]
lappend anslog [list mode load module bar/1 specified bar/1 modulefile $mp/bar/1 requested 1]
set tslog [log_file_content $anslog]
testoutfile_cmd sh {reload} $ans_reload $log_file $tslog

set anslog [list]
lappend anslog [list mode unload module bar/1 specified bar modulefile $mp/bar/1 requested 1]
set tslog [log_file_content $anslog]
testoutfile_cmd sh {unload bar} $ans_unload $log_file $tslog

setenv_var MODULES_LOGGED_EVENTS auto_eval
set anslog [list]
lappend anslog [list mode unload module foo/1.0 specified foo/1.0 modulefile $mp/foo/1.0 requested 0]
lappend anslog [list mode load module foo/1.0 specified foo/1.0 modulefile $mp/foo/1.0 requested 0]
set tslog [log_file_content $anslog]
testoutfile_cmd sh {reload} $ans_reload $log_file $tslog

set anslog [list]
lappend anslog [list mode unload module foo/1.0 specified foo/1.0 modulefile $mp/foo/1.0 requested 0]
set tslog [log_file_content $anslog]
testoutfile_cmd sh {unload bar} $ans_unload $log_file $tslog


# internal evaluation are not recorded (whatis, scan, refresh)
setenv_var MODULES_LOGGED_EVENTS requested_eval:auto_eval

file delete $log_file
set tslog [couldnotopen_nofile $log_file]
testoutfile_cmd sh {whatis bar} OK $log_file $tslog

set ans_search [list]
lappend ans_search [list out all-pre-out]
lappend ans_search [list out all-out]
testoutfile_cmd sh {search bar} $ans_search $log_file $tslog

testoutfile_cmd sh {avail bar tag:loaded} OK $log_file $tslog

set ans_refresh [list]
lappend ans_refresh [list alias albar bar]
testoutfile_cmd sh {refresh} $ans_refresh $log_file $tslog

unsetenv_loaded_module
unsetenv_var __MODULES_LMREFRESH
unsetenv_var __MODULES_LMPREREQ


# global modulerc evaluation (appears as requested evaluation)
setenv_var MODULES_LOGGED_EVENTS requested_eval
setenv_var MODULERCFILE $mp/bar/2

set tserr [msg_top_load bar/1 {} foo/1.0 {}]
set anslog [list]
lappend anslog [list mode load module $mp/bar/2 specified $mp/bar/2 modulefile $mp/bar/2 requested 1]
lappend anslog [list mode load module bar/1 specified bar/1 modulefile $mp/bar/1 requested 1]
set tslog [log_file_content $anslog]
testouterrfile_cmd sh {load bar/1} $ans $tserr $log_file $tslog

unsetenv_var MODULERCFILE


# broken evaluation
setenv_var MODULES_LOGGED_EVENTS requested_eval:auto_eval

setenv_var TESTSUITE_LOGGER load_dep_and_break
file delete $log_file
set anslog [list]
lappend anslog [list mode load module foo/1.0 specified foo/1.0 modulefile $mp/foo/1.0 requested 0]
lappend anslog [list mode load module bar/1 specified bar/1 modulefile $mp/bar/1 requested 1]
set tslog [log_file_content $anslog]
testoutfile_cmd sh {load bar/1} ERR $log_file $tslog

setenv_var TESTSUITE_LOGGER load_dep_and_unk
file delete $log_file
testoutfile_cmd sh {load bar/1} ERR $log_file $tslog

setenv_var TESTSUITE_LOGGER dep_break
file delete $log_file
testoutfile_cmd sh {load bar/1} ERR $log_file $tslog

setenv_var TESTSUITE_LOGGER dep_unk
file delete $log_file
testoutfile_cmd sh {load bar/1} ERR $log_file $tslog


#
# broken configurations
#

setenv_var TESTSUITE_LOGGER load_dep_and_alias

# no logger command defined
setenv_var MODULES_LOGGED_EVENTS requested_cmd
setenv_var MODULES_LOGGER {}

file delete $log_file
set tserr "$mp:\nbar/1"
set tslog [couldnotopen_nofile $log_file]
testouterrfile_cmd sh {avail -t bar/1} OK $tserr $log_file $tslog

setenv_var MODULES_LOGGED_EVENTS requested_cmd:requested_eval

set tserr [msg_top_load bar/1 {} foo/1.0 {}]
testouterrfile_cmd sh {load bar/1} $ans $tserr $log_file $tslog


# bad logger command defined
setenv_var MODULES_LOGGER {/path/to/unk}

file delete $log_file
set tserr "$mp:\nbar/1\n\n[warn_couldnotexec_nofile /path/to/unk]"
set tslog [couldnotopen_nofile $log_file]
testouterrfile_cmd sh {avail -t bar/1} OK $tserr $log_file $tslog

setenv_var MODULES_LOGGED_EVENTS requested_cmd:requested_eval

set tserr [msg_top_load bar/1 {} foo/1.0 {}]\n\n[warn_couldnotexec_nofile /path/to/unk]
testouterrfile_cmd sh {load bar/1} $ans $tserr $log_file $tslog


#
# logger command behaving strangely
#

setenv_var MODULES_LOGGER "$log_cmd $log_file"

setenv_var MODULES_LOGGED_EVENTS requested_eval:auto_eval
setenv_loaded_module [list foo/1.0 bar/1] [list $mp/foo/1.0 $mp/bar/1] [list foo/1.0]
setenv_var __MODULES_LMPREREQ bar/1&foo/1.0
setenv_var __MODULES_LMREFRESH bar/1

# logger command sends output message
setenv_var TESTSUITE_LOGGER logger_cmd_out_msg

file delete $log_file
set anslog [list]
lappend anslog [list mode unload module bar/1 specified bar/1 modulefile $mp/bar/1 requested 1]
lappend anslog [list mode unload module foo/1.0 specified foo/1.0 modulefile $mp/foo/1.0 requested 0]
lappend anslog [list mode load module foo/1.0 specified foo/1.0 modulefile $mp/foo/1.0 requested 0]
lappend anslog [list mode load module bar/1 specified bar/1 modulefile $mp/bar/1 requested 1]
set tslog [log_file_content $anslog]
testouterrfile_cmd sh {reload} $ans_reload {} $log_file $tslog

# logger command sends error message
setenv_var TESTSUITE_LOGGER logger_cmd_err_msg

file delete $log_file
testouterrfile_cmd sh {reload} $ans_reload {} $log_file $tslog

# logger command exits with non-zero code
setenv_var TESTSUITE_LOGGER logger_cmd_exit_code

file delete $log_file
set tserr $warn_issue_logging
testouterrfile_cmd sh {reload} $ans_reload $tserr $log_file $tslog

# logger command crashes after first log message sent
setenv_var TESTSUITE_LOGGER logger_cmd_crash

file delete $log_file
set anslog [list]
lappend anslog [list mode unload module bar/1 specified bar/1 modulefile $mp/bar/1 requested 1]
set tslog [log_file_content $anslog]
testouterrfile_cmd sh {reload} $ans_reload $tserr $log_file $tslog

# logger command crashes without setting a non-zero exit code after first log message sent
setenv_var TESTSUITE_LOGGER logger_cmd_silent_crash

file delete $log_file
testouterrfile_cmd sh {reload} $ans_reload {} $log_file $tslog

unsetenv_loaded_module
unsetenv_var __MODULES_LMREFRESH
unsetenv_var __MODULES_LMPREREQ


#
#  Cleanup
#

file delete $log_file
rename log_file_content {}

}

reset_test_env