#!/usr/bin/env expect
############################################################################
# Purpose: Test for accounting records of specific jobs on specific nodes
# This is a sub-test of test12.3
############################################################################
# Copyright (C) SchedMD LLC.
#
# 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
source ./globals_accounting

proc inc12_3_2 {job_id_1 job_id_2 job_name_1 job_name_2 test_acct node_1 node_2 node_3} {
	global sacct

	log_info "Search for job $job_id_1 on node $node_1"
	set output ""
	wait_for {[regexp -line "^$job_id_1\\|" $output] && ![regexp -line "^$job_id_2\\|" $output]} {
		set output [run_command_output -fail "$sacct -A '$test_acct' -N$node_1 -X -P -o jobid,jobname"]
	}
	subtest [regexp -line "^$job_id_1\\|" $output] "sacct should show job 1 ($job_id_1) as having run on node 1 ($node_1)"
	subtest {![regexp -line "^$job_id_2\\|" $output]} "sacct should not show job 2 ($job_id_2) as having run on node 1 ($node_1)"

	log_info "Search for jobs $job_id_1 and $job_id_2 on node $node_2"
	set output ""
	wait_for {[regexp -line "^$job_id_1\\|" $output] && [regexp -line "^$job_id_2\\|" $output]} {
		set output [run_command_output -fail "$sacct -A '$test_acct' -N$node_2 -X -P -o jobid,jobname"]
	}
	subtest [regexp -line "^$job_id_1\\|" $output] "sacct should show job 1 ($job_id_1) as having run on node 2 ($node_2)"
	subtest [regexp -line "^$job_id_2\\|" $output] "sacct should show job 2 ($job_id_2) as having run on node 2 ($node_2)"

	log_info "Search for job $job_id_2 on node $node_3"
	set output ""
	wait_for {![regexp -line "$job_id_1\\|" $output] && [regexp -line "$job_id_2\\|" $output]} {
		set output [run_command_output -fail "$sacct -A '$test_acct' -N$node_3 -X -P -o jobid,jobname"]
	}
	subtest {![regexp -line "$job_id_1\\|" $output]} "sacct should not show job 1 ($job_id_1) as having run on node 3 ($node_3)"
	subtest [regexp -line "$job_id_2\\|" $output] "sacct should show job 2 ($job_id_2) as having run on node 3 ($node_3)"
}
