diff --git a/tests/registration/00-simple.t b/tests/registration/00-simple.t index 6d93245226e..a8be523e6f3 100755 --- a/tests/registration/00-simple.t +++ b/tests/registration/00-simple.t @@ -14,6 +14,7 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see . + #------------------------------------------------------------------------------ # Test suite registration @@ -23,33 +24,22 @@ export RND_SUITE_RUNDIR export CYLC_RUN_DIR="$(cylc get-global-config --print-run-dir)" function make_rnd_suite() { - RND_SUITE_NAME=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c6) - RND_SUITE_SOURCE="$TEST_DIR/${RND_SUITE_NAME}" + RND_SUITE_NAME=x$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c6) + RND_SUITE_SOURCE="$PWD/${RND_SUITE_NAME}" mkdir -p "${RND_SUITE_SOURCE}" touch "${RND_SUITE_SOURCE}/suite.rc" RND_SUITE_RUNDIR="${CYLC_RUN_DIR}/${RND_SUITE_NAME}" } function purge_rnd_suite() { - RND_SUITE_SOURCE=${1:-RND_SUITE_SOURCE} - RND_SUITE_SOURCE=${2:-RND_SUITE_RUNDIR} + RND_SUITE_SOURCE=${1:-$RND_SUITE_SOURCE} + RND_SUITE_RUNDIR=${2:-$RND_SUITE_RUNDIR} rm -rf "${RND_SUITE_SOURCE}" rm -rf "${RND_SUITE_RUNDIR}" } . "$(dirname "$0")/test_header" -set_test_number 36 - -init_suite "${TEST_NAME_BASE}" <<'__SUITE_RC__' -[meta] - title = the quick brown fox -[scheduling] - [[graph]] - R1 = a => b => c -[runtime] - [[a,b,c]] - script = true -__SUITE_RC__ +set_test_number 37 # Use $SUITE_NAME and $SUITE_RUN_DIR defined by test_header @@ -164,6 +154,66 @@ contains_ok "${TEST_NAME}.stdout" <<__ERR__ ${RND_SUITE_SOURCE} __ERR__ +purge_rnd_suite +purge_rnd_suite "${RND_SUITE_SOURCE1}" "${RND_SUITE_RUNDIR1}" + +#----------------------- +# Test alternate run dir +# 1. Normal case. +TEST_NAME="${TEST_NAME_BASE}-alt-run-dir" +make_rnd_suite +ALT_RUN_DIR="${PWD}/alt" +run_ok "${TEST_NAME}" \ + cylc register --run-dir="${ALT_RUN_DIR}" "${RND_SUITE_NAME}" "${RND_SUITE_SOURCE}" +contains_ok "${TEST_NAME}.stdout" <<__OUT__ +REGISTERED ${RND_SUITE_NAME} -> ${RND_SUITE_SOURCE} +__OUT__ +run_ok "${TEST_NAME}-check-link" test -L "${RND_SUITE_RUNDIR}" +run_ok "${TEST_NAME}-rm-link" rm "${RND_SUITE_RUNDIR}" +run_ok "${TEST_NAME}-rm-alt-run-dir" rm -r "${ALT_RUN_DIR}" +purge_rnd_suite + +# 2. If reg already exists (as a directory). +TEST_NAME="${TEST_NAME_BASE}-alt-exists1" +make_rnd_suite +ALT_RUN_DIR="${PWD}/alt" +mkdir -p "${RND_SUITE_RUNDIR}" +run_fail "${TEST_NAME}" \ + cylc register --run-dir="${ALT_RUN_DIR}" "${RND_SUITE_NAME}" "${RND_SUITE_SOURCE}" +contains_ok "${TEST_NAME}.stderr" <<__OUT__ +SuiteServiceFileError: Run directory '${RND_SUITE_RUNDIR}' already exists. +__OUT__ +purge_rnd_suite + +# 3. If reg already exists (as a valid symlink). +TEST_NAME="${TEST_NAME_BASE}-alt-exists2" +make_rnd_suite +ALT_RUN_DIR="${PWD}/alt" +TDIR=$(mktemp -d) +mkdir -p $(dirname "${RND_SUITE_RUNDIR}") +ln -s "${TDIR}" "${RND_SUITE_RUNDIR}" +run_fail "${TEST_NAME}" \ + cylc register --run-dir="${ALT_RUN_DIR}" "${RND_SUITE_NAME}" "${RND_SUITE_SOURCE}" +contains_ok "${TEST_NAME}.stderr" <<__OUT__ +SuiteServiceFileError: Symlink '${RND_SUITE_RUNDIR}' already points to ${TDIR}. +__OUT__ +purge_rnd_suite +rm -rf "${TDIR}" + +#----------------------------------------------------------------------------- +# Now use a real suite + +init_suite "${TEST_NAME_BASE}" <<'__SUITE_RC__' +[meta] + title = the quick brown fox +[scheduling] + [[graph]] + R1 = a => b => c +[runtime] + [[a,b,c]] + script = true +__SUITE_RC__ + run_ok "${TEST_NAME_BASE}-val" cylc validate "${SUITE_NAME}" run_ok "${TEST_NAME_BASE}-print" cylc print @@ -182,45 +232,5 @@ else fail "${TEST_NAME_BASE}-print.stderr" fi -# Test alternate run dir. -# 1. Normal case. -TEST_NAME="${TEST_NAME_BASE}-alt-run-dir" -SRC_DIR="${PWD}/foo" -REG="${SUITE_NAME}-foo" -RUN_DIR="${CYLC_RUN_DIR}/${REG}" -ALT_RUN_DIR="${PWD}/alt" -mkdir "${SRC_DIR}"; touch "${SRC_DIR}/suite.rc" -run_ok "${TEST_NAME}" cylc register --run-dir="${ALT_RUN_DIR}" "${REG}" "${SRC_DIR}" -contains_ok "${TEST_NAME}.stdout" <<__OUT__ -REGISTERED ${REG} -> ${SRC_DIR} -__OUT__ -run_ok "${TEST_NAME}-check-link" test -L "${RUN_DIR}" -run_ok "${TEST_NAME}-rm-link" echo foo ## rm "${RUN_DIR}" -run_ok "${TEST_NAME}-rm-alt-run-dir" echo foo ## rm -r "${ALT_RUN_DIR}" -## rm -r "${SRC_DIR}" - -# Test alternate run dir. -# 2. If reg already exists (as a directory). -TEST_NAME="${TEST_NAME_BASE}-alt-exists1" -mkdir "${RUN_DIR}" -mkdir "${SRC_DIR}"; touch "${SRC_DIR}/suite.rc" -run_fail "${TEST_NAME}" cylc register --run-dir="${ALT_RUN_DIR}" "${REG}" "${SRC_DIR}" -contains_ok "${TEST_NAME}.stderr" <<__OUT__ -SuiteServiceFileError: Run directory '${RUN_DIR}' already exists. -__OUT__ -## rm -r "${SRC_DIR}" "${RUN_DIR}" - -# Test alternate run dir. -# 3. If reg already exists (as a valid symlink). -TEST_NAME="${TEST_NAME_BASE}-alt-exists2" -mkdir "${SRC_DIR}"; touch "${SRC_DIR}/suite.rc" -mkdir "${PWD}/target" -ln -s "${PWD}/target" "${RUN_DIR}" -run_fail "${TEST_NAME}" cylc register --run-dir="${ALT_RUN_DIR}" "${REG}" "${SRC_DIR}" -contains_ok "${TEST_NAME}.stderr" <<__OUT__ -SuiteServiceFileError: Symlink '${RUN_DIR}' already points to ${PWD}/target. -__OUT__ -## rm -r "${SRC_DIR}" "${PWD}/target" - purge_suite "${SUITE_NAME}" exit