#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Testing of hidden partitions.
############################################################################
# Copyright (C) 2002 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 part_name $test_name

if {![is_super_user]} {
	skip "This test needs SlurmUser to create partitions"
}

proc cleanup {} {
	global scontrol part_name

	run_command -none "$scontrol delete PartitionName=$part_name"
}

#
# Create a new partition
#
set output [run_command_output -fail "$scontrol create PartitionName=$part_name Hidden=YES"]
subtest {![regexp "error" $output]} "Verify that hidden partition can be created"

#
# Confirm the partition now exists
#
set output [run_command_output -fail "$scontrol -a show part $part_name"]
subtest {![regexp "not found" $output]} "Verify that hidden partition is not 'not found'"
subtest {[regexp "PartitionName" $output]} "Verify that hidden partition is found"
subtest {[regexp "Hidden=YES" $output]} "Verify that hidden partition is really hidden"

#
# Now delete the partition
#
run_command_output -fail "$scontrol delete PartitionName=$part_name"
set output [run_command_output -xfail "$scontrol -a show part $part_name"]
subtest {[regexp "not found" $output]} "Verify 'not found' message is present"
subtest {![regexp "PartitionName" $output]} "Verify that hidden partition is NOT found"
