diff --git a/testsuite/expect/test12.4 b/testsuite/expect/test12.4
index 25cd2615a74a0ea386441a0b251bb27ac3c962db..08902aa615e7a19b0a239343ab9fe4a0fbf874e5 100755
--- a/testsuite/expect/test12.4
+++ b/testsuite/expect/test12.4
@@ -1,13 +1,13 @@
 #!/usr/bin/expect
 ############################################################################
-# Purpose: Test of SLURM functionality
-#          Test sacct --brief option.
+# Purpose: Test of SLURM sacct functionality
+#          sacct options b, g, j, l, n, p, u, v.
 #
 # 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-2009 TheLawrence Livermore National Security, LLC .
+# Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
 # LLNL-CODE-402394.
@@ -33,30 +33,235 @@ source ./globals
 
 set test_id     "12.4"
 set exit_code   0
-set matches     0
-set not_support 0
-
+set file_in     "test.$test_id.input"
+set test_acct   "test_acct"
+set timeout 60
 print_header $test_id
 
+#
+# Check accounting config and bail if not found.
+#
+if { [test_account_storage] == 0 } {
+	send_user "\nWARNING: This test can't be run without a usable AccountStorageType\n"
+	exit 0
+}
+
+if { [string compare [check_accounting_admin_level] "Administrator"] } {
+	send_user "\nWARNING: This test can't be run without being an Accounting administrator.\nUse sacctmgr mod user \$USER_NAME set admin=admin.\n"
+	exit 0
+}
+
+#
+# Identify the user and his current default account
+#
+set acct_name ""
+set user_name ""
+set user_gid ""
+spawn $bin_id -u -n
+expect {
+	 -re "($alpha_numeric_under)" {
+		set user_name $expect_out(1,string)
+		exp_continue
+	}
+	eof {
+		wait
+	}
+}
+
+spawn $bin_id -u
+expect {
+	 -re "($alpha_numeric_under)" {
+		set user_gid $expect_out(1,string)
+		exp_continue
+	}
+	eof {
+		wait
+	}
+}
+
+set s_pid [spawn $sacctmgr show user $user_name]
+expect {
+	-re "$user_name *($alpha_numeric_under)" {
+		set acct_name $expect_out(1,string)
+		exp_continue
+	}
+	timeout {
+		send_user "FAILURE: sacctmgr add not responding\n"
+		slow_kill $s_pid
+		exit 1
+	}
+	eof {
+		wait
+	}
+}
+
+#
+# Use sacctmgr to add an account
+#
+set aamatches 0
+set sadd_pid [spawn $sacctmgr -i add account $test_acct]
+expect {
+	-re "Adding Account" {
+		incr aamatches
+		exp_continue
+	}
+	-re "Nothing new added" {
+		send_user "\nWARNING: vestigial account $test_acct found\n"
+		incr aamatches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr add not responding\n"
+		slow_kill $sadd_pid
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+if {$aamatches != 1} {
+	send_user "\nFAILURE:  sacctmgr had a problem adding account.\n"
+	exit 1
+}
+
+#
+# Add self to this new account
+#
+set sadd_pid [spawn $sacctmgr -i create user name=$user_name account=$test_acct]
+expect {
+	 timeout {
+		send_user "\nFAILURE: sacctmgr add not responding\n"
+		slow_kill $sadd_pid
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+
+make_bash_script $file_in "$bin_id"
+
+#
+# Spawn a job via srun using this account
+#
+set job_id 0
+spawn $srun -N1 -v --account=$test_acct $bin_id
+expect {
+	-re "launching ($number)" {
+		set job_id $expect_out(1,string)
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: srun not responding\n"
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+if {$job_id == 0} {
+	send_user "\nFAILURE: did not get srun job_id3\n"
+	set exit_code 1
+} else {
+	set matches 0
+	spawn $scontrol show job $job_id
+	expect {
+		 -re "Account=$test_acct" {
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: scontrol not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+	if {$matches != 1} {
+		send_user "\nFAILURE: srun failed to use specified account\n"
+		set exit_code 1
+	}
+}
 ################################################################
 #
-# Proc: sacct
+# Proc: sacct_job
 #
-# Purpose:  pass sacct options to one location
+# Purpose:  Pass sacct options and test
 #
-# Returns: The number of matches.
+# Returns: Number of matches.
 #
-# Input: a switch option
+# Input: Switch options not requiring arguments
 #
 ################################################################
 
-proc sacct_job { soption } {
+proc sacct_job { soption job_id} {
 	global sacct
 set exit_code   0
 set matches     0
 set not_support 0
-	send_user "sacct -$soption\n"
-spawn $sacct -$soption
+	send_user "sacct -$soption -j $job_id\n"
+
+if { $soption == "-long" || $soption == "l" } {
+
+spawn $sacct -$soption -j $job_id
+expect {
+	-re "SLURM accounting storage is disabled" {
+		set not_support 1
+		exp_continue
+	}
+	-re "JobID......JobName....Partition..MaxVMSize" {
+		incr matches
+		exp_continue
+	}
+	-re "MaxVMSizeNode..MaxVMSizeTask..AveVMSize..MaxRSS" {
+		incr matches
+		exp_continue
+	}
+	-re "MaxRSSNode.MaxRSSTask.AveRSS.....MaxPages" {
+		incr matches
+		exp_continue
+	}
+	-re "MaxPagesNode.MaxPagesTask...AvePages...MinCPU" {
+		incr matches
+		exp_continue
+	}
+	-re "MinCPUNode.MinCPUTask.AveCPU.....NTasks" {
+		incr matches
+		exp_continue
+	}
+	-re "AllocCPUS..Elapsed....State......ExitCode" {
+		incr matches
+		exp_continue
+	}
+	-re "$job_id" {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacct not responding\n"
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$not_support != 0} {
+	send_user "\nWARNING: can not test without accounting enabled\n"
+	exit 0
+}
+if {$matches != 7} {
+	send_user "\nFAILURE: sacct -$soption failed ($matches)\n"
+	set exit_code 1
+}
+	return $matches
+}
+
+if { $soption == "-brief" || $soption == "b" } {
+
+spawn $sacct -$soption -j $job_id
 expect {
 	-re "SLURM accounting storage is disabled" {
 		set not_support 1
@@ -66,7 +271,43 @@ expect {
 		incr matches
 		exp_continue
 	}
-	-re "---------- ---------- --------" {
+	-re "$job_id" {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacct not responding\n"
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$not_support != 0} {
+	send_user "\nWARNING: can not test without accounting enabled\n"
+	exit 0
+}
+if {$matches != 2} {
+	send_user "\nFAILURE: sacct -$soption failed ($matches)\n"
+	set exit_code 1
+}
+	return $matches
+}
+
+if { $soption == "-parsable" || $soption == "p" } {
+
+spawn $sacct -$soption -j $job_id
+expect {
+	-re "SLURM accounting storage is disabled" {
+		set not_support 1
+		exp_continue
+	}
+	-re "JobID\\|JobName\\|Partition\\|Account\\|AllocCPUS\\|State\\|ExitCode\\|" {
+		incr matches
+		exp_continue
+	}
+	-re "$job_id\\|" {
 		incr matches
 		exp_continue
 	}
@@ -89,20 +330,334 @@ if {$matches != 2} {
 }
 	return $matches
 }
+
+if { $soption == "-parsable2" || $soption == "P" } {
+
+spawn $sacct -$soption -j $job_id
+expect {
+	-re "SLURM accounting storage is disabled" {
+		set not_support 1
+		exp_continue
+	}
+	-re
+"JobID\\|JobName\\|Partition\\|Account\\|AllocCPUS\\|State\\|ExitCode *" {
+		incr matches
+		exp_continue
+	}
+	-re "$job_id\\|" {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacct not responding\n"
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$not_support != 0} {
+	send_user "\nWARNING: can not test without accounting enabled\n"
+	exit 0
+}
+if {$matches != 2} {
+	send_user "\nFAILURE: sacct -$soption failed ($matches)\n"
+	set exit_code 1
+}
+	return $matches
+}
+
+if { $soption == "-noheader" || $soption == "n" } {
+
+spawn $sacct -$soption -j $job_id
+expect {
+	-re "SLURM accounting storage is disabled" {
+		set not_support 1
+		exp_continue
+	}
+	-re "AllocCPUS|Account|AssocID|AveCPU|AvePages|AveRSS|AveVSize|BlockID	\
+		|Cluster|CPUTime|CPUTimeRAW|Elapsed	\
+		|Eligible|End|ExitCode|GID	\
+		|Group|JobID|JobName|NodeList	\
+		|MaxPages|MaxPagesNode|MaxPagesTask|MaxRSS	|
+		|MaxRSSNode|MaxRSSTask|MaxVSize|MaxVSizeNode	|
+		|MaxVSizeTask|MinCPU|MinCPUNode|MinCPUTask	|
+		|NCPUS|NNodes|NTasks|Priority	|
+		|Partition|QOS|QOSRAW|ReqCPUS	|
+		|Reserved|ResvCPU|ResvCPURAW|Start	|
+		|State|Submit|Suspended|SystemCPU	|
+		|Timelimit|TotalCPU|UID|User	|
+		|UserCPU|WCKey|WCKeyID" {
+		incr matches
+		exp_continue
+	}
+	-re "$job_id" {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacct not responding\n"
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$not_support != 0} {
+	send_user "\nWARNING: can not test without accounting enabled\n"
+	exit 0
+}
+if {$matches != 1} {
+	send_user "\nFAILURE: sacct -$soption failed ($matches)\n"
+	set exit_code 1
+}
+	return $matches
+}
+
+if { $soption == "-verbose" || $soption == "v" } {
+
+spawn $sacct -$soption -j $job_id
+expect {
+	-re "SLURM accounting storage is disabled" {
+		set not_support 1
+		exp_continue
+	}
+	-re "sacct: Accounting storage SLURMDBD plugin loaded " {
+		incr matches
+		exp_continue
+	}
+	-re "JobID......JobName....Partition" {
+		incr matches
+		exp_continue
+	}
+	-re "Account....AllocCPUS..State......ExitCode" {
+		incr matches
+		exp_continue
+	}
+	-re "$job_id" {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacct not responding\n"
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$not_support != 0} {
+	send_user "\nWARNING: can not test without accounting enabled\n"
+	exit 0
+}
+if {$matches != 4} {
+	send_user "\nFAILURE: sacct -$soption failed ($matches)\n"
+	set exit_code 1
+}
+	return $matches
+}
+
+
+}
+
+################################################################
+#
+# Proc: sacct_vargs
+#
+# Purpose:  Pass sacct options with arguments and test
+#
+# Returns: Number of matches.
+#
+# Input: Switch options with argument
+#
+################################################################
+
+proc sacct_vargs { soption vargs job_id} {
+	global sacct
+set exit_code   0
+set matches     0
+set not_support 0
+	send_user "sacct -$soption $vargs -j $job_id\n"
+
+if { $soption == "g" || $soption == "-gid" || $soption == "-group" || $soption == "u" || $soption == "-uid" || $soption == "-user"} {
+
+spawn $sacct -$soption $vargs -j $job_id
+expect {
+	-re "SLURM accounting storage is disabled" {
+		set not_support 1
+		exp_continue
+	}
+	-re "JobID......JobName....Partition" {
+		incr matches
+		exp_continue
+	}
+	-re "Account....AllocCPUS..State......ExitCode" {
+		incr matches
+		exp_continue
+	}
+	-re "$job_id" {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacct not responding\n"
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$not_support != 0} {
+	send_user "\nWARNING: can not test without accounting enabled\n"
+	exit 0
+}
+if {$matches != 3} {
+	send_user "\nFAILURE: sacct -$soption failed ($matches)\n"
+	set exit_code 1
+}
+	return $matches
+}
+}
 ################################################################
-set matches [sacct_job -brief]
+
+set matches [sacct_job n $job_id]
+if {$matches != 1} {
+	send_user "\nFAILURE: sacct -n failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_job -noheader $job_id]
+if {$matches != 1} {
+	send_user "\nFAILURE: sacct -n failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_job l $job_id]
+if {$matches != 7} {
+	send_user "\nFAILURE: sacct --allusers failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_job -long $job_id]
+if {$matches != 7} {
+	send_user "\nFAILURE: sacct -l failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_job b $job_id]
+if {$matches != 2} {
+	send_user "\nFAILURE: sacct -b failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_job -brief $job_id]
 if {$matches != 2} {
 	send_user "\nFAILURE: sacct --brief failed ($matches)\n"
 	set exit_code 1
 }
 
-set matches [sacct_job b]
+set matches [sacct_job p $job_id]
 if {$matches != 2} {
-	send_user "\nFAILURE: sacct -b failed ($matches)\n"
+	send_user "\nFAILURE: sacct -p failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_job -parsable $job_id]
+if {$matches != 2} {
+	send_user "\nFAILURE: sacct --parsable failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_job P $job_id]
+if {$matches != 2} {
+	send_user "\nFAILURE: sacct -P failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_job -parsable2 $job_id]
+if {$matches != 2} {
+	send_user "\nFAILURE: sacct --parsable2 failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_job v $job_id]
+if {$matches != 4} {
+	send_user "\nFAILURE: sacct -v failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_job -verbose $job_id]
+if {$matches != 4} {
+	send_user "\nFAILURE: sacct --verbosee failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_vargs g $user_gid $job_id]
+if {$matches != 3} {
+	send_user "\nFAILURE: sacct -g failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_vargs -gid $user_gid $job_id]
+if {$matches != 3} {
+	send_user "\nFAILURE: sacct --gid failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_vargs -group $user_gid $job_id]
+if {$matches != 3} {
+	send_user "\nFAILURE: sacct --group failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_vargs u $user_name $job_id]
+if {$matches != 3} {
+	send_user "\nFAILURE: sacct -g failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_vargs -uid $user_name $job_id]
+if {$matches != 3} {
+	send_user "\nFAILURE: sacct --gid failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_vargs -user $user_name $job_id]
+if {$matches != 3} {
+	send_user "\nFAILURE: sacct --group failed ($matches)\n"
+	set exit_code 1
+}
+
+#
+# Use sacctmgr to delete the test account
+#
+set damatches 0
+set sadel_pid [spawn $sacctmgr -i delete account $test_acct]
+expect {
+	-re "Deleting account" {
+		incr damatches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr delete not responding\n"
+		slow_kill $sadel_pid
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+if {$damatches != 1} {
+	send_user "\nFAILURE: sacctmgr had a problem deleting account\n"
 	set exit_code 1
 }
 
 if {$exit_code == 0} {
+	exec $bin_rm -f $file_in
 	send_user "\nSUCCESS\n"
 }
 exit $exit_code