/*****************************************************************************\
* test7.18.prog.c Report failures in slurm_hostlist_find().
* See bugs 5711 and 5746.
*****************************************************************************
* Copyright (C) 2018 SchedMD LLC
* Written by Marshall Garey
*
* This file is part of Slurm, a resource management program.
* For details, see .
* 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.
\*****************************************************************************/
#include
#include
#include "slurm/slurm.h"
#include "slurm/slurm_errno.h"
hostlist_t hl = NULL;
int testid = 0;
static void _find_host(const char *hostname)
{
printf("Find %s...%s\n", hostname,
slurm_hostlist_find(hl, hostname) >= 0 ? "found" : "FAILURE");
}
static void _create_hostlist(const char *hostnames)
{
printf("\nTest %d: hostlist: %s\n", testid, hostnames);
hl = slurm_hostlist_create(hostnames);
testid++;
}
int main(int argc, char **argv)
{
/* First, some basic tests. */
_create_hostlist("node");
_find_host("node");
slurm_hostlist_destroy(hl);
_create_hostlist("n1");
_find_host("n1");
slurm_hostlist_destroy(hl);
_create_hostlist("node,node2");
_find_host("node");
_find_host("node2");
slurm_hostlist_destroy(hl);
_create_hostlist("n1-2,n1-3");
_find_host("n1-2");
_find_host("n1-3");
slurm_hostlist_destroy(hl);
_create_hostlist("n1.2,n1.3");
_find_host("n1.2");
_find_host("n1.3");
slurm_hostlist_destroy(hl);
/* Ranges */
_create_hostlist("n[1-3]");
_find_host("n1");
_find_host("n2");
_find_host("n3");
slurm_hostlist_destroy(hl);
_create_hostlist("snowflake[1-10]");
_find_host("snowflake1");
_find_host("snowflake2");
_find_host("snowflake3");
_find_host("snowflake4");
_find_host("snowflake5");
_find_host("snowflake6");
_find_host("snowflake7");
_find_host("snowflake8");
_find_host("snowflake9");
_find_host("snowflake10");
slurm_hostlist_destroy(hl);
/* Make sure leading zeros are properly handled. */
_create_hostlist("n0000[1-3]");
_find_host("n00001");
_find_host("n00002");
_find_host("n00003");
slurm_hostlist_destroy(hl);
_create_hostlist("n0000[11-15]");
_find_host("n000011");
_find_host("n000012");
_find_host("n000013");
_find_host("n000014");
_find_host("n000015");
slurm_hostlist_destroy(hl);
_create_hostlist("nid00[446-447],nid00392");
_find_host("nid00392");
_find_host("nid00446");
_find_host("nid00447");
slurm_hostlist_destroy(hl);
/* Other leading numbers that are partially but not completely zero. */
_create_hostlist("nid10[446-447],nid10392");
_find_host("nid10392");
_find_host("nid10446");
_find_host("nid10447");
slurm_hostlist_destroy(hl);
/* (Same hosts as the previous test, but different order.) */
_create_hostlist("nid10392,nid10[446-447]");
_find_host("nid10392");
_find_host("nid10446");
_find_host("nid10447");
slurm_hostlist_destroy(hl);
_create_hostlist("nid010[446-447],nid010392");
_find_host("nid010392");
_find_host("nid010446");
_find_host("nid010447");
slurm_hostlist_destroy(hl);
_create_hostlist("nid00[446-447],nid00392,nid10[446-447],nid10392,snowflake[1-10]");
_find_host("nid00392");
_find_host("nid00446");
_find_host("nid00447");
_find_host("nid10392");
_find_host("nid10446");
_find_host("nid10447");
_find_host("snowflake1");
_find_host("snowflake2");
_find_host("snowflake3");
_find_host("snowflake4");
_find_host("snowflake5");
_find_host("snowflake6");
_find_host("snowflake7");
_find_host("snowflake8");
_find_host("snowflake9");
_find_host("snowflake10");
slurm_hostlist_destroy(hl);
_create_hostlist("nid0000[1-9],nid00[100-900],nid000[10-90],nid0[1000-9000],nid[1000-9000]");
_find_host("nid00001");
_find_host("nid00005");
_find_host("nid00115");
_find_host("nid00105");
_find_host("nid01105");
_find_host("nid00100");
_find_host("nid00010");
_find_host("nid00001");
slurm_hostlist_destroy(hl);
/* Multi-dimensional hosts. */
_create_hostlist("ab[1-3]cd[6-7]");
_find_host("ab1cd6");
_find_host("ab1cd7");
_find_host("ab2cd6");
_find_host("ab2cd7");
_find_host("ab3cd6");
_find_host("ab3cd7");
slurm_hostlist_destroy(hl);
_create_hostlist("ab[1-2][1-3]");
_find_host("ab11");
_find_host("ab12");
_find_host("ab13");
_find_host("ab21");
_find_host("ab22");
_find_host("ab23");
slurm_hostlist_destroy(hl);
_create_hostlist("ab[1-2][1-3],n[2-4],c[10-11][333-334]");
_find_host("ab11");
_find_host("ab12");
_find_host("ab13");
_find_host("ab21");
_find_host("ab22");
_find_host("ab23");
_find_host("n2");
_find_host("n3");
_find_host("n4");
_find_host("c10333");
_find_host("c10334");
_find_host("c11333");
_find_host("c11334");
slurm_hostlist_destroy(hl);
_create_hostlist("node1,node[2-4],node[5-6][7-8]");
_find_host("node1");
_find_host("node2");
_find_host("node3");
_find_host("node4");
_find_host("node57");
_find_host("node58");
_find_host("node67");
_find_host("node68");
slurm_hostlist_destroy(hl);
/* Combine multiple dimensions and zero padding */
_create_hostlist("node000[1-2][02-03],node000[333]");
_find_host("node000102");
_find_host("node000103");
_find_host("node000202");
_find_host("node000203");
_find_host("node000333");
slurm_hostlist_destroy(hl);
/* With hyphens, ranges, and multi-dimension ranges. */
_create_hostlist("sgisummit-rcf-111-[1-15],sgiuv20-rcf-111-32,dper730xd-srcf-d16-[1-20],sgisummit-rcf-011-[1-15],dper730xd-srcf-016-[1-20],dper930-srcf-d15-05,dper7425-srcf-d15-[1-12],a-b-1-c2-[1-2][3-4]");
_find_host("sgisummit-rcf-111-1");
_find_host("sgiuv20-rcf-111-32");
_find_host("dper730xd-srcf-d16-2");
_find_host("sgisummit-rcf-011-5");
_find_host("dper730xd-srcf-016-2");
_find_host("dper930-srcf-d15-05");
_find_host("dper7425-srcf-d15-1");
_find_host("dper7425-srcf-d15-12");
_find_host("a-b-1-c2-13");
_find_host("a-b-1-c2-14");
_find_host("a-b-1-c2-23");
_find_host("a-b-1-c2-24");
slurm_hostlist_destroy(hl);
return 0;
}