File: inc3.11.8

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 (163 lines) | stat: -rw-r--r-- 5,226 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
#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          to be called from test3.11
#	   Several cases for core based reservations
#          Plugin select/cons_res needed
#
############################################################################
# Copyright (C) 2009 Lawrence Livermore National Security
# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
# Written by Dave Bremer <dbremer@llnl.gov>
# CODE-OCEC-09-009. All rights reserved.
#
#
# 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.
############################################################################

proc inc3_11_8 {} {
	global user_name
	global file_in bin_sleep sbatch number scontrol
	global re_word_str scancel
	global cluster_cpus def_partition

	set res_name "resv3.11.8"

	log_info "+++++ STARTING TEST 8 +++++"

	# Make the job script
	make_bash_script $file_in "$bin_sleep 100"

	# Make a reservation, just to get node size information
	set ret_code [create_res $res_name "StartTime=now Duration=1 NodeCnt=1 User=$user_name"]
	if {$ret_code != 0} {
		fail "Unable to create a valid reservation"
	}
	set host_name ""
	spawn $scontrol show res $res_name
	expect {
		-re "Nodes=($re_word_str)" {
			set host_name $expect_out(1,string)
			exp_continue
		}
		timeout {
			delete_res $res_name
			fail "scontrol not responding"
		}
		eof {
			wait
		}
	}
	# Delete the reservation
	set ret_code [delete_res $res_name]
	if {$ret_code != 0} {
		fail "Unable to delete reservation ($res_name)"
	}
	if {$host_name eq ""} {
		fail "Failed to get host name"
	}

	lassign [get_node_cpus $host_name] cpu_tot threads_per_core

	set boards  1
	set sockets 1
	set cores_per_socket 1
	spawn $scontrol show node $host_name
	expect {
		-re " CoresPerSocket=($number)" {
			set cores_per_socket $expect_out(1,string)
			exp_continue
		}
		-re " Sockets=($number)" {
			set sockets $expect_out(1,string)
			exp_continue
		}
		-re " Boards=($number)" {
			set boards $expect_out(1,string)
			exp_continue
		}
		timeout {
			fail "scontrol not responding"
		}
		eof {
			wait
		}
	}
	set cores_per_node [ expr $boards * $sockets * $cores_per_socket ]
	set core_res_num   [ expr $cores_per_node / 2 ]
	set cpu_res_num    [ expr $cpu_tot / 2 ]

	# (First test) Submit the batch job: a simple job using half the CPUs on the selected node
	set job_id 0
	spawn $sbatch -w $host_name --time=10:00 --ntasks-per-node=$cpu_res_num --output=/dev/null $file_in
	expect {
		-re "Submitted batch job ($number)" {
			set job_id $expect_out(1,string)
			exp_continue
		}
		timeout {
			cancel_job $job_id
			fail "sbatch not responding"
		}
		eof {
			wait
		}
	}
	if {$job_id == 0} {
		fail "Batch submit failure"
	}

	if {[wait_for_job $job_id "RUNNING"] != 0} {
		cancel_job $job_id
		fail "Job failed to start"
	}
	log_debug "Job is running as expected"

	# Make the reservation using free cores in a node
	set ret_code [create_res $res_name "StartTime=now Duration=60 Nodes=$host_name CoreCnt=$core_res_num User=$user_name"]
	subtest {$ret_code == 0} "A reservation using the free cores in a node should succeed"

	# Delete the reservation
	set ret_code [delete_res $res_name]
	if {$ret_code != 0} {
		cancel_job $job_id
		fail "Unable to delete reservation ($res_name)"
	}

	set core_res_num  [expr $core_res_num + 1]
	# Make the reservation using more cores then free in a node
	set ret_code [create_res $res_name "StartTime=now Duration=60 Nodes=$host_name CoreCnt=$core_res_num User=$user_name"]
	if {! [
		subtest {$ret_code != 0} "A reservation using more cores than free in a node should fail"
	] } {
		delete_res $res_name
	}

	# Make the reservation using more cores than free in a node (now)
	# but those cores being free at reservation start time
	set ret_code [create_res $res_name "StartTime=now+3600 Duration=60 Nodes=$host_name CoreCnt=$core_res_num User=$user_name"]
	subtest {$ret_code == 0} "A reservation using more cores than currently free but free at reservation start time should succeed"

	# Make the reservation using more cores than free at reservation start time
	set ret_code [create_res $res_name "StartTime=now+300 Duration=60 Nodes=$host_name CoreCnt=$core_res_num User=$user_name"]
	subtest {$ret_code != 0} "A reservation using more cores than free at reservation start time should fail"

	delete_res $res_name
	cancel_job $job_id
}