#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Test of job account (--account option).
############################################################################
# Copyright (C) 2004-2007 The Regents of the University of California.
# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
# Written by Morris Jette <jette1@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.
############################################################################
source ./globals

set file_in     "$test_dir/input"
set job_id1     0
set job_id2     0

if [param_contains [get_config_param "AccountingStorageEnforce"] "associations"] {
	skip "This test will not work when associations are enforced"
}
if {[get_config_param "AccountingStorageType"] eq "accounting_storage/slurmdbd"} {
	skip "This test will not work when invalid account names are subject to change"
}

global env
set env(SLURM_ACCOUNT) QA_ACCT

#
# Build input script file
#
make_bash_script $file_in "$bin_sleep 5"

#
# Spawn an sbatch job that just sleeps for a while
#
set timeout $max_job_delay
spawn $sbatch --output=/dev/null --error=/dev/null --account=MY_ACCT -t1 $file_in
expect {
	-re "Submitted batch job ($number)" {
		set job_id1 $expect_out(1,string)
		exp_continue
	}
	timeout {
		fail "sbatch not responding"
	}
	eof {
		wait
	}
}
if {$job_id1 == 0} {
	fail "Batch submit failure"
}

#
# Confirm account info within first job based SLURM_ACCOUNT
#
set match_acct 0
spawn $scontrol show job $job_id1
expect {
	-re "Account=my_acct" {
		set match_acct 1
		exp_continue
	}
	timeout {
		fail "scontrol not responding"
	}
	eof {
		wait
	}
}

subtest {$match_acct != 0} "Account information processed"

#
# Spawn an srun job that should get account from SLURM_ACCOUNT env var
#
make_bash_script $file_in "$bin_env | $bin_grep SLURM_ACCOUNT"
set match_acct  0
spawn $srun -v -t1 $file_in
expect {
	# needed for cray systems
	-re "Granted job allocation ($number)" {
		set job_id2 $expect_out(1,string)
		exp_continue
	}
	-re "launching ($number)" {
		set job_id2 $expect_out(1,string)
		exp_continue
	}
	-re "SLURM_ACCOUNT=QA_ACCT" {
		set match_acct 1
		exp_continue
	}
	timeout {
		fail "srun not responding"
	}
	eof {
		wait
	}
}

subtest {$match_acct != 0} "Account information processed"

#
# Confirm account info within second job based SLURM_ACCOUNT
#
set match_acct 0
spawn $scontrol show job $job_id2
expect {
	-re "Account=qa_acct" {
		set match_acct 1
		exp_continue
	}
	timeout {
		fail "scontrol not responding"
	}
	eof {
		wait
	}
}

subtest {$match_acct != 0} "Account information processed"
