@@ -280,5 +280,128 @@ else
280280 echo
281281fi
282282
283+ # Test 12: Verify global= option in plugstack.conf is propagated correctly
284+ echo " Test 12: Verifying global= option configuration..."
285+
286+ if [ ! -f " $PLUGSTACK_CONF " ]; then
287+ echo " ✗ ERROR: Plugin config not found at $PLUGSTACK_CONF "
288+ exit 1
289+ fi
290+
291+ # Check if global= parameter exists in the config
292+ if ! grep -q " global=" " $PLUGSTACK_CONF " ; then
293+ echo " ⚠ Warning: global= parameter not found in $PLUGSTACK_CONF "
294+ echo " This may indicate the plugin was built without PLUGIN_GLOBAL_ARG configured"
295+ echo
296+ echo " === All tests passed! ==="
297+ exit 0
298+ fi
299+
300+ echo " ✓ Found global= parameter in $PLUGSTACK_CONF "
301+
302+ # Extract the global= value from config
303+ GLOBAL_VALUE=$( grep " global=" " $PLUGSTACK_CONF " | sed -n ' s/.*global=\([^ ]*\).*/\1/p' )
304+ echo " Configuration value: global=${GLOBAL_VALUE} "
305+
306+ # If container tests are not available, skip runtime verification
307+ if [ " $SKIP_CONTAINER_TEST " = " true" ]; then
308+ echo " Skipping runtime verification (no container available)"
309+ echo
310+ echo " === All tests passed! ==="
311+ exit 0
312+ fi
313+
314+ # Verify the value is used in a containerized job
315+ echo " Testing global option propagation with containerized job..."
316+
317+ # Create a test job script that checks if SLURM_SINGULARITY_GLOBAL is set and prints its value
318+ TEST_GLOBAL_SCRIPT=$( mktemp /tmp/test_global.XXXXXX.sh)
319+ cat > " $TEST_GLOBAL_SCRIPT " << 'GLOBALEOF '
320+ #!/bin/bash
321+ # Check if SLURM_SINGULARITY_GLOBAL is set and print its value
322+ if [ -n "${SLURM_SINGULARITY_GLOBAL+x}" ]; then
323+ echo "SLURM_SINGULARITY_GLOBAL is set to: '${SLURM_SINGULARITY_GLOBAL}'"
324+ else
325+ echo "SLURM_SINGULARITY_GLOBAL is NOT set"
326+ fi
327+ hostname
328+ GLOBALEOF
329+ chmod +x " $TEST_GLOBAL_SCRIPT "
330+
331+ # Submit job with container
332+ GLOBAL_JOB_ID=$( sbatch --singularity-container=" $TEST_CONTAINER " \
333+ --output=" ${SLURM_JOB_SPOOL} /test_global_%j.out" \
334+ --error=" ${SLURM_JOB_SPOOL} /test_global_%j.err" \
335+ " $TEST_GLOBAL_SCRIPT " 2>&1 | awk ' {print $NF}' )
336+
337+ if [ -z " $GLOBAL_JOB_ID " ]; then
338+ echo " ⚠ Warning: Failed to submit global option test job"
339+ rm -f " $TEST_GLOBAL_SCRIPT "
340+ echo
341+ echo " === All tests passed! ==="
342+ exit 0
343+ fi
344+
345+ echo " Job submitted: $GLOBAL_JOB_ID "
346+
347+ # Wait for job to complete
348+ retry --times=" $RETRY_TIMES " --delay=" $JOB_RETRY_DELAY " -- \
349+ bash -c " scontrol show job $GLOBAL_JOB_ID 2>/dev/null | grep -qE 'JobState=(COMPLETED|FAILED|CANCELLED)'" > /dev/null 2>&1
350+
351+ JOB_STATE=$( scontrol show job " $GLOBAL_JOB_ID " 2> /dev/null | grep " JobState" | awk ' {print $1}' | cut -d= -f2)
352+
353+ if [ " $JOB_STATE " != " COMPLETED" ] && [ " $JOB_STATE " != " COMPLETING" ]; then
354+ echo " ⚠ Warning: Global option test job did not complete successfully (State: $JOB_STATE )"
355+ rm -f " $TEST_GLOBAL_SCRIPT "
356+ echo
357+ echo " === All tests passed! ==="
358+ exit 0
359+ fi
360+
361+ # Check stdout for the SLURM_SINGULARITY_GLOBAL environment variable check
362+ GLOBAL_OUT_FILE=" ${SLURM_JOB_SPOOL} /test_global_${GLOBAL_JOB_ID} .out"
363+
364+ if [ ! -f " $GLOBAL_OUT_FILE " ]; then
365+ echo " ⚠ Warning: Job output file not found, cannot verify global option propagation"
366+ rm -f " $TEST_GLOBAL_SCRIPT "
367+ echo
368+ echo " === All tests passed! ==="
369+ exit 0
370+ fi
371+
372+ # Check if the variable is set
373+ if grep -q " SLURM_SINGULARITY_GLOBAL is NOT set" " $GLOBAL_OUT_FILE " ; then
374+ echo " ✗ ERROR: SLURM_SINGULARITY_GLOBAL was not set by plugin"
375+ cat " $GLOBAL_OUT_FILE "
376+ rm -f " $TEST_GLOBAL_SCRIPT " " ${SLURM_JOB_SPOOL} /test_global_${GLOBAL_JOB_ID} ." *
377+ exit 1
378+ fi
379+
380+ if ! grep -q " SLURM_SINGULARITY_GLOBAL is set to:" " $GLOBAL_OUT_FILE " ; then
381+ echo " ⚠ Warning: Could not verify SLURM_SINGULARITY_GLOBAL in job output"
382+ rm -f " $TEST_GLOBAL_SCRIPT " " ${SLURM_JOB_SPOOL} /test_global_${GLOBAL_JOB_ID} ." *
383+ echo
384+ echo " === All tests passed! ==="
385+ exit 0
386+ fi
387+
388+ echo " ✓ SLURM_SINGULARITY_GLOBAL environment variable was set by plugin"
389+
390+ # Show the actual value that was set
391+ ACTUAL_GLOBAL=$( grep " SLURM_SINGULARITY_GLOBAL is set to:" " $GLOBAL_OUT_FILE " | head -1)
392+ echo " ${ACTUAL_GLOBAL} "
393+
394+ # Extract just the value for comparison (between quotes)
395+ ACTUAL_VALUE=$( echo " $ACTUAL_GLOBAL " | sed -n " s/.*SLURM_SINGULARITY_GLOBAL is set to: '\(.*\)'/\1/p" )
396+ if [ " $ACTUAL_VALUE " = " $GLOBAL_VALUE " ]; then
397+ echo " ✓ Value matches configuration: '${GLOBAL_VALUE} '"
398+ else
399+ echo " ⚠ Warning: Value mismatch (config: '${GLOBAL_VALUE} ', actual: '${ACTUAL_VALUE} ')"
400+ fi
401+
402+ # Cleanup test files
403+ rm -f " $TEST_GLOBAL_SCRIPT " " ${SLURM_JOB_SPOOL} /test_global_${GLOBAL_JOB_ID} ." *
404+ echo
405+
283406echo " === All tests passed! ==="
284407exit 0
0 commit comments