Skip to content

Commit

Permalink
t: add tests for project validation/annotation
Browse files Browse the repository at this point in the history
Problem: There are no tests for project validation and annotation in the
priority plugin.

Add some tests.
  • Loading branch information
cmoussa1 committed Jun 12, 2024
1 parent f324882 commit 5e79541
Show file tree
Hide file tree
Showing 2 changed files with 172 additions and 0 deletions.
1 change: 1 addition & 0 deletions t/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ TESTSCRIPTS = \
t1032-mf-priority-update-bank.t \
t1033-mf-priority-update-job.t \
t1034-mf-priority-config.t \
t1035-mf-priority-projects.t \
t5000-valgrind.t \
python/t1000-example.py

Expand Down
171 changes: 171 additions & 0 deletions t/t1035-mf-priority-projects.t
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
#!/bin/bash

test_description='test validating and setting project names in priority plugin'

. `dirname $0`/sharness.sh
MULTI_FACTOR_PRIORITY=${FLUX_BUILD_DIR}/src/plugins/.libs/mf_priority.so
SUBMIT_AS=${SHARNESS_TEST_SRCDIR}/scripts/submit_as.py
DB_PATH=$(pwd)/FluxAccountingTest.db

export TEST_UNDER_FLUX_NO_JOB_EXEC=y
export TEST_UNDER_FLUX_SCHED_SIMPLE_MODE="limited=1"
test_under_flux 1 job

flux setattr log-stderr-level 1

test_expect_success 'load multi-factor priority plugin' '
flux jobtap load -r .priority-default ${MULTI_FACTOR_PRIORITY}
'

test_expect_success 'check that mf_priority plugin is loaded' '
flux jobtap list | grep mf_priority
'

test_expect_success 'create flux-accounting DB' '
flux account -p $(pwd)/FluxAccountingTest.db create-db
'

test_expect_success 'start flux-accounting service' '
flux account-service -p ${DB_PATH} -t
'

test_expect_success 'add banks to the DB' '
flux account -p ${DB_PATH} add-bank root 1 &&
flux account -p ${DB_PATH} add-bank --parent-bank=root account1 1
'

test_expect_success 'add projects to the DB' '
flux account -p ${DB_PATH} add-project projectA &&
flux account -p ${DB_PATH} add-project projectB &&
flux account -p ${DB_PATH} add-project projectC
'

test_expect_success 'submit jobs under two different users before plugin gets updated' '
job_project_star=$(flux python ${SUBMIT_AS} 5001 hostname) &&
job_project_A=$(flux python ${SUBMIT_AS} 5002 hostname) &&
flux job wait-event -vt 60 $job_project_star depend &&
flux job wait-event -vt 60 $job_project_A depend
'

# If a user is added to the DB without specifying any projects, a default
# project "*" is added for the user automatically, and jobs submitted without
# specifying a project will fall under "*" - this is the case for the first
# added user; every user who is added to the DB belongs to the "*" project,
# but will only run jobs under "*" if they do not already have another default
# project.
#
# If a user is added to the DB with a specified project name, any job submitted
# without specifying a project name will fall under that project name - this is
# the case for the second user.
test_expect_success 'add those users to flux-accounting DB and to plugin; jobs transition to RUN' '
flux account -p ${DB_PATH} add-user \
--username=user1 \
--userid=5001 \
--bank=account1 &&
flux account -p ${DB_PATH} add-user \
--username=user2 \
--userid=5002 \
--bank=account1 \
--projects=projectA &&
flux account-priority-update -p ${DB_PATH} &&
flux job wait-event -vt 60 $job_project_star alloc &&
flux job wait-event -vt 60 $job_project_A alloc
'

test_expect_success 'check that first submitted job has project "*" listed in eventlog' '
flux job info $job_project_star eventlog > eventlog.out &&
grep "\"attributes.system.project\":\"\*\"" eventlog.out &&
flux cancel $job_project_star
'

test_expect_success 'check that second submitted job has project "projectA" listed in eventlog' '
flux job info $job_project_A eventlog > eventlog.out &&
grep "\"attributes.system.project\":\"projectA\"" eventlog.out &&
flux cancel $job_project_A
'

test_expect_success 'add a user with a list of projects to the DB' '
flux account -p ${DB_PATH} add-user \
--username=user3 \
--userid=5003 \
--bank=account1 \
--projects="projectA,projectB"
'

test_expect_success 'send flux-accounting DB information to the plugin' '
flux account-priority-update -p $(pwd)/FluxAccountingTest.db
'

test_expect_success 'successfully submit a job under a valid project' '
jobid=$(flux python ${SUBMIT_AS} 5003 --setattr=system.project=projectA hostname) &&
flux job wait-event -f json $jobid priority &&
flux job info $jobid jobspec > jobspec.out &&
grep "projectA" jobspec.out &&
flux cancel $jobid
'

test_expect_success 'submit a job under a project that does not exist' '
test_must_fail flux python ${SUBMIT_AS} 5003 --setattr=system.project=projectFOO \
hostname > project_dne.out 2>&1 &&
test_debug "cat project_dne.out" &&
grep "project not valid for user: projectFOO" project_dne.out
'

test_expect_success 'submit a job under a project that user does not belong to' '
test_must_fail flux python ${SUBMIT_AS} 5003 --setattr=system.project=projectC \
hostname > project_invalid.out 2>&1 &&
test_debug "cat project_invalid.out" &&
grep "project not valid for user: projectC" project_invalid.out
'

test_expect_success 'successfully submit a job under a default project' '
jobid=$(flux python ${SUBMIT_AS} 5003 hostname) &&
flux job wait-event -f json $jobid priority &&
flux job info $jobid eventlog > eventlog.out &&
grep "\"attributes.system.project\":\"projectA\"" eventlog.out &&
flux cancel $jobid
'

test_expect_success 'successfully submit a job under a secondary project' '
jobid=$(flux python ${SUBMIT_AS} 5003 --setattr=system.project=projectB hostname) &&
flux job wait-event -f json $jobid priority &&
flux job info $jobid jobspec > jobspec.out &&
grep "projectB" jobspec.out &&
flux cancel $jobid
'

test_expect_success 'update the default project for user and submit job under new default' '
flux account -p ${DB_PATH} edit-user user3 --default-project=projectB &&
flux account-priority-update -p ${DB_PATH} &&
jobid=$(flux python ${SUBMIT_AS} 5003 hostname) &&
flux job wait-event -f json $jobid priority &&
flux job info $jobid eventlog > eventlog.out &&
grep "\"attributes.system.project\":\"projectB\"" eventlog.out &&
flux cancel $jobid
'

test_expect_success 'add a user without specifying any projects (will add a default project of "*")' '
flux account -p ${DB_PATH} add-user --username=user4 --userid=5004 --bank=account1 &&
flux account-priority-update -p ${DB_PATH} &&
jobid=$(flux python ${SUBMIT_AS} 5004 hostname) &&
flux job wait-event -f json $jobid priority &&
flux job info $jobid eventlog > eventlog.out &&
grep "\"attributes.system.project\":\"\*\"" eventlog.out &&
flux cancel $jobid
'

test_expect_success 'add a new default project to the new user and update the plugin' '
flux account -p ${DB_PATH} edit-user user4 --projects=projectA --default-project=projectA &&
flux account-priority-update -p ${DB_PATH} &&
jobid=$(flux python ${SUBMIT_AS} 5004 hostname) &&
flux job wait-event -f json $jobid priority &&
flux job info $jobid eventlog > eventlog.out &&
grep "\"attributes.system.project\":\"projectA\"" eventlog.out &&
flux cancel $jobid
'

test_expect_success 'shut down flux-accounting service' '
flux python -c "import flux; flux.Flux().rpc(\"accounting.shutdown_service\").get()"
'

test_done

0 comments on commit 5e79541

Please sign in to comment.