diff --git a/testsuite/slurm_unit/slurmctld/Makefile.am b/testsuite/slurm_unit/slurmctld/Makefile.am index 7e85469445c0a14d482bb131002784dd664d88a4..f8f2bd843d24d121a8559570151aa09c82af5069 100644 --- a/testsuite/slurm_unit/slurmctld/Makefile.am +++ b/testsuite/slurm_unit/slurmctld/Makefile.am @@ -1,9 +1,21 @@ AUTOMAKE_OPTIONS = foreign -noinst_PROGRAMS = job_mgr-test job_step-test +noinst_PROGRAMS = job_mgr-test job_step-test job_add job_cancel step_create INCLUDES = -I$(top_srcdir)/src/common -job_step_test_LDADD = $(top_srcdir)/src/common/libcommon.la + +job_step_test_LDADD = $(top_srcdir)/src/common/libcommon.la \ + $(top_srcdir)/src/api/libslurm.la + +step_create_LDADD = $(top_srcdir)/src/common/libcommon.la \ + $(top_srcdir)/src/api/libslurm.la + +job_add_LDADD = $(top_srcdir)/src/common/libcommon.la \ + $(top_srcdir)/src/api/libslurm.la + +job_cancel_LDADD = $(top_srcdir)/src/common/libcommon.la \ + $(top_srcdir)/src/api/libslurm.la + LDADD = $(top_srcdir)/src/common/libcommon.la \ $(top_srcdir)/src/slurmctld/job_scheduler.o \ $(top_srcdir)/src/slurmctld/node_scheduler.o \ diff --git a/testsuite/slurm_unit/slurmctld/get_resp.h b/testsuite/slurm_unit/slurmctld/get_resp.h new file mode 100644 index 0000000000000000000000000000000000000000..811d91e136b7afe1c0c73acadf6bf4232fc433fd --- /dev/null +++ b/testsuite/slurm_unit/slurmctld/get_resp.h @@ -0,0 +1,62 @@ +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <syslog.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <unistd.h> + +#define TBUF_SIZE 2048 +char tbuf[TBUF_SIZE]; + +char* get_string_resp( char* message, char* current ) +{ + tbuf[0] = '\0'; + printf("%s (%s) = ", message, current ); + fgets( tbuf, TBUF_SIZE, stdin ); + if ( tbuf[0] != '\n' ) + { + printf( "%s\n", tbuf); + return strdup( tbuf ); + } + printf( "%s\n", current); + return current; +} + +int get_int_resp( char* message, int current ) +{ + int ret_val = 0; + tbuf[0] = '\0'; + printf("%s (%d) = ", message, current ); + fgets( tbuf, TBUF_SIZE, stdin ); + ret_val = atoi( tbuf ); + if ( ret_val ) + { + printf( "%d\n", ret_val ); + return ret_val; + } + printf( "%d\n", current ); + return current; +} + +uint8_t get_tf_resp( char* message, uint8_t current ) +{ + tbuf[0] = '\0'; + printf("%s (%c) = ", message, current ? 't': 'f' ); + fgets( tbuf, TBUF_SIZE, stdin ); + if ( tbuf[0] == 'f' || tbuf[0] == 'F' ) + { + printf("false\n" ); + return 0; + } + if ( tbuf[0] == 't' || tbuf[0] == 'T' ) + { + printf("true\n" ); + return 1; + } + printf("%s\n", current ?"true" :"false" ); + return current; +} + + diff --git a/testsuite/slurm_unit/slurmctld/job_add.c b/testsuite/slurm_unit/slurmctld/job_add.c new file mode 100644 index 0000000000000000000000000000000000000000..2b6b2c48e68c54b1ebae2fd4e850d506ccc436fa --- /dev/null +++ b/testsuite/slurm_unit/slurmctld/job_add.c @@ -0,0 +1,77 @@ + + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <syslog.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <unistd.h> + +#include <src/api/slurm.h> +#include <src/common/slurm_protocol_api.h> + +#include "get_resp.h" +#define DEBUG_MODULE +/* report results of successful job allocation */ +void report_results(resource_allocation_response_msg_t* resp_msg); +int +main( int argc, char* argv[]) +{ + int error_code; + job_desc_msg_t job_mesg; + resource_allocation_response_msg_t* resp_msg ; + + /* Create a job/resource allocation */ + slurm_init_job_desc_msg( &job_mesg ); + printf("Creating Job Message\n"); + + job_mesg. contiguous = get_tf_resp( "contiguous", 0 ); + job_mesg. groups = get_string_resp( "groups", "students,employee\0"); + job_mesg. name = get_string_resp( "job_name", "job01\0"); + job_mesg. partition_key = get_string_resp( "partition_key", "1234" ); + job_mesg. min_procs = get_int_resp( "min_procs", 4 ); + job_mesg. min_memory = get_int_resp( "min_memory", 1024); + job_mesg. min_tmp_disk = get_int_resp( "min_tmp_disk", 2034 ); + job_mesg. partition = get_string_resp("string_resp", "batch\0" ); + job_mesg. priority = get_int_resp( "priority", 100 ); + job_mesg. req_nodes = get_string_resp( "req_nodes", "lx[3000-3003]\0" ); + job_mesg. job_script = get_string_resp( "job_script", "/bin/hostname\0"); + job_mesg. shared = get_int_resp( "shared", 0 ); + job_mesg. time_limit = get_int_resp( "time_limit", 200 ); + job_mesg. num_procs = get_int_resp( "num_procs", 1000) ; + job_mesg. num_nodes = get_int_resp( "num_nodes", 400); + job_mesg. user_id = get_int_resp( "user_id", 1500 ); + + + error_code = slurm_allocate_resources ( &job_mesg , &resp_msg , false ); + if (error_code) + printf ("allocate error %s\n", slurm_strerror( error_code )); + else + report_results(resp_msg); + + return SLURM_SUCCESS ; +} + + +void +report_results(resource_allocation_response_msg_t* resp_msg) +{ + int i; + + printf ("NODES ALLOCATED\n\t JOB_ID = %u\n\tnodes = %s\n", resp_msg->job_id, resp_msg->node_list); + if (resp_msg->num_cpu_groups > 0) { + printf ("\tprocessor counts: "); + for (i=0; i<resp_msg->num_cpu_groups; i++) { + if (i > 0) + printf(", "); + printf ("%u(x%u)", resp_msg->cpus_per_node[i], resp_msg->cpu_count_reps[i]); + } + printf ("\n"); + } +} diff --git a/testsuite/slurm_unit/slurmctld/job_cancel.c b/testsuite/slurm_unit/slurmctld/job_cancel.c new file mode 100644 index 0000000000000000000000000000000000000000..e6d1c7de8987478200699c851325c371f89293df --- /dev/null +++ b/testsuite/slurm_unit/slurmctld/job_cancel.c @@ -0,0 +1,40 @@ + + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <syslog.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <unistd.h> + +#include <src/api/slurm.h> +#include <src/common/slurm_protocol_api.h> + +#include "get_resp.h" + +#define DEBUG_MODULE +/* report results of successful job allocation */ +void report_results(resource_allocation_response_msg_t* resp_msg); + +int +main( int argc, char* argv[]) +{ + int error_code; + int job_id = atoi( argv[1] ); + error_code = slurm_cancel_job ( job_id ); + + if (error_code) + slurm_perror( "slurm_cancel_job faile: "); + else + printf("Job %d canceled\n", job_id ); + + return SLURM_SUCCESS ; +} + + diff --git a/testsuite/slurm_unit/slurmctld/job_mgr-test.c b/testsuite/slurm_unit/slurmctld/job_mgr-test.c index 61470b09b911b8fb487dbe05d2a7ed080cdb2181..46dd1e97188ae7dbe5deaae3bb7c34a7de937437 100644 --- a/testsuite/slurm_unit/slurmctld/job_mgr-test.c +++ b/testsuite/slurm_unit/slurmctld/job_mgr-test.c @@ -16,8 +16,6 @@ main (int argc, char *argv[]) uint16_t tmp_id; //char update_spec[] = "TimeLimit=1234 Priority=123"; - note("This is BullShit"); - log_init(argv[0], opts, SYSLOG_FACILITY_DAEMON, NULL); error_code = init_job_conf (); if (error_code) diff --git a/testsuite/slurm_unit/slurmctld/job_step-test.c b/testsuite/slurm_unit/slurmctld/job_step-test.c index 8aa8ab81ec29270bd8e0f6fd18e67ce6249b232f..fae00bc58058cd22f64e26e2218addd7d657d2f2 100644 --- a/testsuite/slurm_unit/slurmctld/job_step-test.c +++ b/testsuite/slurm_unit/slurmctld/job_step-test.c @@ -13,20 +13,57 @@ #include <netinet/in.h> #include <unistd.h> +#include <src/api/slurm.h> #include <src/common/slurm_protocol_api.h> #define DEBUG_MODULE +/* report results of successful job allocation */ +void report_results(resource_allocation_response_msg_t* resp_msg); + int main( int argc, char* argv[]) { + int error_code; + job_step_create_request_msg_t request = { 5, 5, 4,4 , 0, "" }; + job_desc_msg_t job_mesg; + resource_allocation_response_msg_t* resp_msg ; - job_step_create_request_msg_t request = { 5, 5, 1, "lx[1-10]" }; slurm_msg_t request_msg ; slurm_msg_t response_msg; request_msg.msg_type = REQUEST_JOB_STEP_CREATE; request_msg.data = &request; + /* Create a job/resource allocation */ + slurm_init_job_desc_msg( &job_mesg ); + job_mesg. contiguous = 1; + job_mesg. groups = ("students,employee\0"); + job_mesg. name = ("job01\0"); + job_mesg. partition_key = "1234"; + job_mesg. min_procs = 4; + job_mesg. min_memory = 1024; + job_mesg. min_tmp_disk = 2034; + job_mesg. partition = "batch\0"; + job_mesg. priority = 100; + job_mesg. req_nodes = "lx[3000-3003]\0"; + job_mesg. job_script = "/bin/hostname\0"; + job_mesg. shared = 0; + job_mesg. time_limit = 200; + job_mesg. num_procs = 1000; + job_mesg. num_nodes = 400; + job_mesg. user_id = 1500; + + + error_code = slurm_allocate_resources ( &job_mesg , &resp_msg , false ); + if (error_code) + printf ("allocate error %d\n", errno); + else + report_results(resp_msg); + + request. job_id = resp_msg->job_id; + request. user_id = 1500; + + /*create job step */ slurm_send_recv_controller_msg ( &request_msg , &response_msg); @@ -51,5 +88,25 @@ main( int argc, char* argv[]) } + + slurm_free_resource_allocation_response_msg ( resp_msg ); return SLURM_SUCCESS ; } + + +void +report_results(resource_allocation_response_msg_t* resp_msg) +{ + int i; + + printf ("allocate nodes %s to job %u\n", resp_msg->node_list, resp_msg->job_id); + if (resp_msg->num_cpu_groups > 0) { + printf ("processor counts: "); + for (i=0; i<resp_msg->num_cpu_groups; i++) { + if (i > 0) + printf(", "); + printf ("%u(x%u)", resp_msg->cpus_per_node[i], resp_msg->cpu_count_reps[i]); + } + printf ("\n"); + } +} diff --git a/testsuite/slurm_unit/slurmctld/step_create.c b/testsuite/slurm_unit/slurmctld/step_create.c new file mode 100644 index 0000000000000000000000000000000000000000..cfd9e8476f0852c44d0655df301ed18a99af594f --- /dev/null +++ b/testsuite/slurm_unit/slurmctld/step_create.c @@ -0,0 +1,92 @@ + + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <syslog.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <unistd.h> + +#include <src/api/slurm.h> +#include <src/common/slurm_protocol_api.h> + +#include "get_resp.h" +#define DEBUG_MODULE +/* report results of successful job allocation */ +void report_results(resource_allocation_response_msg_t* resp_msg); + +int +main( int argc, char* argv[]) +{ + job_desc_msg_t job_mesg; + + job_step_create_request_msg_t request = { 5, 5, 4,4 , 0, "" }; + resource_allocation_response_msg_t* resp_msg ; + + slurm_msg_t request_msg ; + slurm_msg_t response_msg; + + request_msg.msg_type = REQUEST_JOB_STEP_CREATE; + request_msg.data = &request; + + request.job_id = get_int_resp( "job_id", 1 ); + request.user_id = get_int_resp( "user_id", 1500 ); + request.node_count = get_int_resp( "node_count", 10 ); + request.cpu_count = get_int_resp( "cpu_count", 10 ); + request.relative = get_int_resp( "relative", 0 ); + request.node_list = get_string_resp( "node_list", NULL ); + + + /*create job step */ + slurm_send_recv_controller_msg ( &request_msg , &response_msg); + + + if ( response_msg.msg_type != RESPONSE_JOB_STEP_CREATE ) + { + printf("job_step_create failed\n"); + } + else + { + job_step_create_response_msg_t* msg = (job_step_create_response_msg_t *) response_msg.data ; + printf("job_step_id = %u\n ", msg-> job_step_id ); + printf("node_list = %s\n", msg->node_list ); + printf("credentials:\n\tjob_id = %u\n\tuser_id = %u\n\tnode_list = %s\n\texperation_time = %lu\n\tsignature = %u\n\n", + msg->credentials->job_id, + msg->credentials->user_id, + msg->credentials->node_list, + msg->credentials->experation_time, + msg->credentials->signature); +#ifdef HAVE_LIBELAN3 + /* print the elan stuff */ +#endif + + + } + + slurm_free_resource_allocation_response_msg ( resp_msg ); + return SLURM_SUCCESS ; +} + + +void +report_results(resource_allocation_response_msg_t* resp_msg) +{ + int i; + + printf ("allocate nodes %s to job %u\n", resp_msg->node_list, resp_msg->job_id); + if (resp_msg->num_cpu_groups > 0) { + printf ("processor counts: "); + for (i=0; i<resp_msg->num_cpu_groups; i++) { + if (i > 0) + printf(", "); + printf ("%u(x%u)", resp_msg->cpus_per_node[i], resp_msg->cpu_count_reps[i]); + } + printf ("\n"); + } +}