File: test28.2

package info (click to toggle)
slurm-wlm 22.05.8-4%2Bdeb12u3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 48,492 kB
  • sloc: ansic: 475,246; exp: 69,020; sh: 8,862; javascript: 6,528; python: 6,444; makefile: 4,185; perl: 4,069; pascal: 131
file content (167 lines) | stat: -rwxr-xr-x 4,517 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
#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          checks that the --array environment variables are correct, and
#          checks that the --output and --error files were created and
#          contain the correct information.
############################################################################
# Copyright (C) 2011-2014 SchedMD LLC
# Written by Nathan Yee <nyee32@schedmd.com>
#
# This file is part of Slurm, a resource management program.
# For details, see <https://slurm.schedmd.com/>.
# Please also read the included file: DISCLAIMER.
#
# Slurm is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2 of the License, or (at your option)
# any later version.
#
# Slurm is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along
# with Slurm; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
############################################################################
source ./globals

set file_script  "$test_dir/script"
set file_out     "$test_dir/%A_%a.output"
set file_error   "$test_dir/%A_%a.error"
set job_id       0
set array_begin  0
set array_end    4
set array_id     ""
set array_in     ""
set array_var    ""

if {[get_config_param "MaxArraySize"] < [expr $array_end + 1]} {
	skip "MaxArraySize is too small"
}

make_bash_script $file_script "
$bin_echo array_id=\$SLURM_ARRAY_JOB_ID
$bin_echo task_count=\$SLURM_ARRAY_TASK_COUNT
$bin_echo task_id=\$SLURM_ARRAY_TASK_ID
$bin_echo task_min=\$SLURM_ARRAY_TASK_MIN
$bin_echo task_max=\$SLURM_ARRAY_TASK_MAX
$bin_echo task_step=\$SLURM_ARRAY_TASK_STEP
$bin_sleep aaaa
exit 0
"

#
# Submit a job array with no output or error flags and make sure the default
# output file is created
#
set job_id 0
spawn $sbatch --array=$array_begin-[expr $array_end -1] -t1 $file_script
expect {
	-re "Submitted batch job ($number)" {
		set job_id $expect_out(1,string)
		exp_continue
	}
	timeout {
		fail "sbatch not responding"
	}
	eof {
		wait
	}
}
if {$job_id == 0} {
	fail "sbatch did not submit job"
}

wait_for_job -fail $job_id "DONE"

for {set cnt 0} {$cnt<$array_end} {incr cnt} {
	wait_for_file -fail slurm-${job_id}_${cnt}.out
}

# submit a batch with an array from 0 to 3; array size 4
set job_id 0
spawn $sbatch --array=$array_begin-[expr $array_end -1] --output=$file_out --error=$file_error -t1 $file_script
expect {
	-re "Submitted batch job ($number)" {
		set job_id $expect_out(1,string)
		exp_continue
	}
	timeout {
		fail "sbatch not responding"
	}
	eof {
		wait
	}

}
if {$job_id == 0} {
	fail "sbatch did not submit jobs"
}

wait_for_job -fail $job_id "DONE"

# Checks that the correct error and output files were created with the correct format
for {set cnt 0} {$cnt<$array_end} {incr cnt} {
	wait_for_file -fail $test_dir/${job_id}_${cnt}.output
	wait_for_file -fail $test_dir/${job_id}_${cnt}.error
}
log_debug "Checking environment variables"
# Checks that the array job ids are correct
set max_inx [expr $array_end - 1]
for {set index 0} {$index < $array_end} {incr index} {
	set env_cnt 0
	spawn $bin_cat $test_dir/${job_id}_${index}.output
	expect {
		-re "array_id=$job_id" {
			incr env_cnt
			exp_continue
		}
		-re "task_count=$array_end" {
			incr env_cnt
			exp_continue
		}
		-re "task_id=$index" {
			incr env_cnt
			exp_continue
		}
		-re "task_min=0" {
			incr env_cnt
			exp_continue
		}
		-re "task_max=$max_inx" {
			incr env_cnt
			exp_continue
		}
		-re "task_step=1" {
			incr env_cnt
			exp_continue
		}
		eof {
			wait
		}
	}
	if {$env_cnt != 6} {
		fail "Missing environment variables in the job output file ($test_dir/${job_id}_${index}.output) ($env_cnt != 6)"
	}
}

# checks the contents of of the error file
for {set index 0} {$index < $array_end} {incr index} {
	set err_match 0
	spawn $bin_cat $test_dir/${job_id}_${index}.error
	expect {
		-re "$sleep_error_message" {
			log_debug "Do not worry this error is expected"
			incr err_match
		}
		eof {
			wait
		}
	}
	if {$err_match != 1} {
		fail "Bad contents in the job error file ($test_dir/${job_id}_${index}.error)"
	}
}