shell dot on steroids https://pagure.io/shellfu

subtest.sh 2.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #!/bin/bash
  2. #shellcheck disable=SC1090
  3. . "$TF_DIR/include/common.sh"
  4. tf_enum_subtests() {
  5. #
  6. # Stub: enumerate subtests
  7. #
  8. tf_warn "implement tf_enum_subtests()!"
  9. return "$TF_ES_ERROR"
  10. }
  11. tf_do_subtest() {
  12. #
  13. # Stub: perform test named $1
  14. #
  15. tf_warn "implement tf_do_subtest()!"
  16. return "$TF_ES_ERROR"
  17. }
  18. _tf_do_subtest() {
  19. #
  20. # Run single subtest inc. setup/cleanup if present
  21. #
  22. local subtname="$1" # this subtest name
  23. local ses=0 # subtest exit status
  24. local setup=true # setup command
  25. local cleanup=true # cleanup command
  26. if test -f TF_SETUP;
  27. then
  28. setup=". TF_SETUP"
  29. bash -n TF_SETUP || {
  30. tf_warn "synax errors in TF_SETUP, skipping"
  31. return "$TF_ES_ERROR"
  32. }
  33. fi
  34. if test -f TF_CLEANUP;
  35. then
  36. setup=". TF_CLEANUP"
  37. bash -n TF_CLEANUP || {
  38. tf_warn "synax errors in TF_CLEANUP, skipping"
  39. return "$TF_ES_ERROR"
  40. }
  41. fi
  42. if $setup;
  43. then
  44. tf_do_subtest "$subtname"; ses=$?
  45. else
  46. tf_warn "setup phase failed, skipping: $subtname"
  47. ses=$TF_ES_ERROR
  48. fi
  49. if ! $cleanup;
  50. then
  51. tf_warn "cleanup phase failed: $subtname"
  52. ses=$TF_ES_PANIC
  53. fi
  54. return "$ses"
  55. }
  56. tf_do_subtests() {
  57. #
  58. # Run all subtests and return highest status
  59. #
  60. local es=0 # final exit status ("worst" of subtests)
  61. local subtname="" # one subtest name
  62. local tes="" # one subtest exit status
  63. local enumd=TF_ENUMERATED_SUBTESTS
  64. local fltrd=TF_FILTERED_SUBTESTS
  65. tf_enum_subtests >$enumd || { tf_warn "error enumerating subtests"; return "$TF_ES_BAILOUT"; }
  66. test -s $enumd || { tf_warn "no subtests enumerated"; return "$TF_ES_BAILOUT"; }
  67. grep -e "$TF_FILTER_SUBTEST" $enumd > $fltrd
  68. test -s $fltrd || tf_debug "TF_FILTER_SUBTEST ate everything: $TF_FILTER_SUBTEST"
  69. for subtname in $(<$fltrd);
  70. do
  71. tf_think "::: $TF_TEST::$subtname"
  72. TF_SUBTEST=$subtname _tf_do_subtest "$subtname";
  73. tes=$?
  74. test $tes -gt $es && es=$tes
  75. test $tes -gt "$TF_ES_OK" && tf_warn "!!! $TF_TEST::$subtname ($tes)"
  76. test $tes -gt "$TF_ES_BAILOUT" && break
  77. done
  78. return $es
  79. }