monitor_query_port_hint.sh 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #!/bin/bash
  2. set -euo pipefail
  3. cd "$(dirname "$0")/../.."
  4. # The monitor runs when sourced, so load only the helper under test.
  5. # shellcheck source=/dev/null
  6. source <(sed -n '/^fn_monitor_query_port_hint() {/,/^}/p' lgsm/modules/command_monitor.sh)
  7. tmp="$(mktemp -d)"
  8. trap 'rm -rf "$tmp"' EXIT
  9. fn_print_warn() { printf '%s\n' "$*" >> "$tmp/screen"; }
  10. fn_print_warn_eol_nl() { :; }
  11. fn_script_log_warn() { printf '%s\n' "$*" >> "$tmp/log"; }
  12. queryport=27016
  13. socket_state=absent
  14. ss() {
  15. case "$socket_state" in
  16. absent) printf '%s\n' 'udp UNCONN 0 0 0.0.0.0:270160 0.0.0.0:*' ;;
  17. used) printf '%s\n' 'tcp LISTEN 0 128 0.0.0.0:27016 0.0.0.0:* users:(("srcds",pid=123,fd=5))' ;;
  18. no_process) printf '%s\n' 'udp UNCONN 0 0 0.0.0.0:27016 0.0.0.0:*' ;;
  19. unavailable) return 1 ;;
  20. esac
  21. }
  22. check_output() {
  23. grep -Fq "$1" "$tmp/log"
  24. grep -Fq "$1" "$tmp/screen"
  25. [ "$(wc -l < "$tmp/log")" -eq 1 ]
  26. [ "$(wc -l < "$tmp/screen")" -eq 1 ]
  27. }
  28. : > "$tmp/log"
  29. : > "$tmp/screen"
  30. fn_monitor_query_port_hint
  31. check_output 'No local TCP/UDP listener on port 27016'
  32. : > "$tmp/log"
  33. : > "$tmp/screen"
  34. socket_state=used
  35. fn_monitor_query_port_hint
  36. check_output 'Local TCP/UDP port 27016 is in use by srcds'
  37. : > "$tmp/log"
  38. : > "$tmp/screen"
  39. socket_state=no_process
  40. fn_monitor_query_port_hint
  41. check_output 'Local TCP/UDP port 27016 is in use; check the query port and protocol'
  42. : > "$tmp/log"
  43. : > "$tmp/screen"
  44. socket_state=unavailable
  45. fn_monitor_query_port_hint
  46. [ ! -s "$tmp/log" ]
  47. [ ! -s "$tmp/screen" ]
  48. printf '%s\n' 'monitor query port hints: 4 checks passed'