blob: 48dd4ae14686af549a950bd2aea59613e283317b [file] [log] [blame] [edit]
#!/usr/bin/perl -T
use Test::More tests => 17;
use Slurm qw(:constant);
use POSIX qw(:signal_h);
use Devel::Peek;
my ($resp, $job_desc, $jobid, $hostlist, $callbacks, $thr, $port, $file, $params, $rc, $data);
# 1
my $slurm = Slurm::new();
ok(defined $slurm, "create slurm object with default configuration");
$job_desc = {
min_nodes => 1,
user_id => $>,
num_tasks => 1,
name => "perlapi_test"
};
$callbacks = {
ping => sub { print STDERR "ping from slurmctld, $_->{job_id}.$_->{step_id}\n"; },
job_complete => sub { print STDERR "job complete, $_->{job_id}.$_->{step_id}\n"; },
timeout => sub { print STDERR "srun timeout, $_->{job_id}.$_->{step_id}, $_->{timeout}\n"; },
user_msg => sub { print STDERR "user msg, $_->{job_id}, $_->{msg}\n";},
node_fail => sub { print STDERR "node fail, $_->{job_id}.$_->{step_id}, $_->{nodelist}\n";},
};
# 2
$thr = $slurm->allocation_msg_thr_create($port, $callbacks);
ok(ref($thr) eq "Slurm::allocation_msg_thread_t" && defined $port, "allocation msg thr create")
or diag("allocation_msg_thr_create: " . $slurm->strerror());
# 3
$resp = $slurm->allocate_resources_blocking($job_desc, 10, sub {$jobid = shift;});
$jobid = $resp->{job_id} if $resp;
ok($jobid, "allocate resources blocking") or diag("allocate_resources_blocking: " . $slurm->strerror());
$params = {
job_id => $jobid,
name => "perlapi_test",
min_nodes => 1,
task_count => 1,
};
# 4
my $ctx = $slurm->step_ctx_create($params);
ok(defined $ctx, "step ctx create") or diag("step_ctx_create: " . $slurm->strerror());
$params->{node_list} = $resp->{node_list};
# 5
my $ctx2 = $slurm->step_ctx_create_no_alloc($params, 3);
ok(defined $ctx2, "step ctx create no alloc") or diag("step_ctx_create_no_alloc: " . $slurm->strerror());
# 6 - 8
SKIP: {
skip "no step ctx", 3 unless $ctx;
foreach my $key (SLURM_STEP_CTX_JOBID, SLURM_STEP_CTX_STEPID, SLURM_STEP_CTX_NUM_HOSTS) {
undef($data);
$rc = $ctx->get($key, $data);
ok($rc == SLURM_SUCCESS && defined $data, "step ctx get $key")
or diag("step_ctx_get: $key, $rc, $data, " . $slurm->strerror());
}
}
# 9
SKIP: {
skip "no step ctx", 1 unless $ctx;
foreach my $key (SLURM_STEP_CTX_TASKS) {
undef $data;
$rc = $ctx->get($key, $data);
ok($rc == SLURM_SUCCESS && ref($data) eq "ARRAY", "step ctx get TASKS")
or diag("step_ctx_get: TASKS, $rc, $data, " . $slurm->strerror());
}
}
# 10
SKIP: {
skip "no step ctx", 1 unless $ctx;
foreach my $key (SLURM_STEP_CTX_TID) {
undef $data;
$rc = $ctx->get($key, 0, $data);
ok($rc == SLURM_SUCCESS && ref($data) eq "ARRAY", "step ctx get TID")
or diag("step_ctx_get: TID, $rc, $data, " . $slurm->strerror());
}
}
# 11
SKIP: {
skip "no step ctx", 1 unless $ctx;
foreach my $key (SLURM_STEP_CTX_CRED) {
undef $data;
$rc = $ctx->get($key, $data);
ok($rc == SLURM_SUCCESS && ref($data) eq "Slurm::slurm_cred_t", "step ctx get CRED")
or diag("step_ctx_get: CRED, $rc, $data, " . $slurm->strerror());
}
}
# 12
SKIP: {
skip "no step ctx", 1 unless $ctx;
foreach my $key (SLURM_STEP_CTX_SWITCH_JOB) {
undef $data;
$rc = $ctx->get($key, $data);
ok($rc == SLURM_SUCCESS && (!defined($data) || ref($data) eq "Slurm::switch_jobinfo_t"), "step ctx get SWITCH_JOB")
or diag("step_ctx_get: SWITCH_JOB, $rc, $data, " . $slurm->strerror());
}
}
# 13
SKIP: {
skip "no step ctx", 1 unless $ctx;
foreach my $key (SLURM_STEP_CTX_HOST) {
undef $data;
$rc = $ctx->get($key, 0, $data);
ok($rc == SLURM_SUCCESS && defined $data, "step ctx get HOST")
or diag("step_ctx_get: HOST, $rc, $data, " . $slurm->strerror());
}
}
# 14
SKIP: {
skip "no step ctx", 1 unless $ctx;
foreach my $key (SLURM_STEP_CTX_USER_MANAGED_SOCKETS) {
my ($data1, $data2);
$rc = $ctx->get($key, $data1, $data2);
ok(($rc == SLURM_SUCCESS && defined $data1 && ref($data2) eq "ARRAY")
|| ($rc == SLURM_ERROR && $data1 == 0 && !defined($data2)), "step ctx get UMS")
or diag("step_ctx_get: UMS, $rc, $data1, $data2" . $slurm->strerror());
}
}
# 15
SKIP: {
skip "no step ctx", 1 unless $ctx2;
$rc = $ctx2->daemon_per_node_hack();
ok($rc == SLURM_SUCCESS, "daemon per node hack")
or diag("step ctx daemon per node hack" . $slurm->strerror());
}
# 16
$params = {
argv => ["/bin/hostname"],
};
$callbacks = {
task_start => sub { my $msg = shift; print STDERR "\ntask_start: $msg->{node_name}, $msg->{count_of_pids}\n";},
task_finish => sub { my $msg = shift; print STDERR "\ntask_finish: " . join(", ", @{$msg->{task_id_list}}) . "\n";},
};
SKIP: {
skip "no step ctx", 1 unless $ctx;
$rc = $ctx->launch( $params, $callbacks);
ok($rc == SLURM_SUCCESS, "step ctx launch")
or diag("step_ctx_launch" . $slurm->strerror());
}
# 17
SKIP: {
skip "no step ctx", 1 unless $ctx;
$rc = $ctx->launch_wait_start();
ok($rc == SLURM_SUCCESS, "step ctx wait start")
or diag("step_ctx_wait_start: $rc, " . $slurm->strerror());
}
if ($ctx) {
$ctx->launch_fwd_signal(SIGINT);
$ctx->launch_wait_finish();
$ctx->launch_abort();
}
$slurm->allocation_msg_thr_destroy($thr) if $thr;
$slurm->kill_job($jobid, SIGKILL) if $jobid;