#!/usr/bin/expect
############################################################################
# Purpose: Test of SLURM functionality
#          sacctmgr show config
#
# Output:  "TEST: #.#" followed by "SUCCESS" if test was successful, OR
#          "FAILURE: ..." otherwise with an explanation of the failure, OR
#          anything else indicates a failure mode that must be investigated.
############################################################################
# Copyright (C) 2008 Lawrence Livermore National Security.
# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
# Written by Joseph Donaghy <donaghy1@llnl.gov>
# CODE-OCEC-09-009. All rights reserved.
#
# This file is part of SLURM, a resource management program.
# For details, see <http://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 test_id     "21.25"
set exit_code   0

print_header $test_id

#
# Use sacctmgr to create a cluster
#
set slurm_conf_matches    0
set slurmdbd_conf_matches 0
spawn $sacctmgr show config
expect {
	-re "You are not running a supported accounting_storage plugin" {
		set slurm_conf_matches    2
		set slurmdbd_conf_matches 2
		exp_continue
	}
	-re "AccountingStorageType *= *accounting_storage/slurmdbd" {
		incr slurm_conf_matches
		exp_continue
	}
	-re "AccountingStorageType" {
		incr slurm_conf_matches
		set slurmdbd_conf_matches 2
		exp_continue
	}
	-re "SLURM_CONF" {
		incr slurm_conf_matches
		exp_continue
	}
	-re "DbdHost" {
		incr slurmdbd_conf_matches
		exp_continue
	}
	-re "SLURMDBD_CONF" {
		incr slurmdbd_conf_matches
		exp_continue
	}
	timeout {
		send_user "\nFAILURE: sacctmgr add not responding\n"
		set exit_code 1
	}
	eof {
		wait
	}
}
if {$slurm_conf_matches != 2} {
	send_user "\nFAILURE:  sacctmgr failed to show slurm_conf values\n"
	set exit_code 1
}
if {$slurmdbd_conf_matches != 2} {
	send_user "\nFAILURE:  sacctmgr failed to show slurmdbd configuration\n"
	set exit_code 1
}

if {$exit_code == 0} {
	print_success $test_id
}

exit $exit_code
