install-config-test.sh 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #!/bin/bash
  2. # Regression checks for default config source directories; no game downloads.
  3. set -e
  4. rootdir="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
  5. module="${rootdir}/lgsm/modules/install_config.sh"
  6. testdir="$(mktemp -d)"
  7. trap 'rm -rf "${testdir}"' EXIT
  8. # Load only the helpers, without running the game-specific install dispatch.
  9. for helper in fn_check_cfgdir fn_default_config_local fn_default_config_remote fn_set_config_vars; do
  10. # shellcheck disable=SC1090
  11. source <(sed -n "/^${helper}() {/,/^}/p" "${module}")
  12. done
  13. fn_messages_separator() { :; }
  14. fn_sleep_time() { :; }
  15. fn_sleep_time_1() { :; }
  16. fn_script_log_info() { :; }
  17. fn_script_log_pass() { :; }
  18. fn_script_log_fail() { :; }
  19. fn_print_ok_eol() { :; }
  20. fn_print_ok_eol_nl() { :; }
  21. fn_print_fail_eol() { :; }
  22. fn_print_fail_eol_nl() { :; }
  23. fn_print_skip_eol_nl() { :; }
  24. fn_fetch_file() {
  25. mkdir -p "${5}"
  26. printf '%s\n' "template ${6}" > "${5}/${6}"
  27. }
  28. assert_content() {
  29. if [ "$(cat "${1}")" != "${2}" ]; then
  30. echo "FAIL: unexpected contents in ${1}" >&2
  31. exit 1
  32. fi
  33. }
  34. servercfgdir="${testdir}/active configs"
  35. servercfgdirdefault="${testdir}/bundled templates"
  36. servercfgdefault="server.cfg"
  37. servercfgfullpath="${servercfgdir}/nested/instance.cfg"
  38. mkdir -p "${servercfgdirdefault}"
  39. printf '%s\n' template > "${servercfgdirdefault}/${servercfgdefault}"
  40. fn_default_config_local > /dev/null
  41. assert_content "${servercfgfullpath}" template
  42. printf '%s\n' customised > "${servercfgfullpath}"
  43. fn_default_config_local > /dev/null
  44. assert_content "${servercfgfullpath}" customised
  45. unset servercfgdirdefault
  46. printf '%s\n' legacy > "${servercfgdir}/${servercfgdefault}"
  47. servercfgfullpath="${servercfgdir}/legacy.cfg"
  48. fn_default_config_local > /dev/null
  49. assert_content "${servercfgfullpath}" legacy
  50. servercfgdirdefault=""
  51. servercfgfullpath="${servercfgdir}/empty.cfg"
  52. fn_default_config_local > /dev/null
  53. assert_content "${servercfgfullpath}" legacy
  54. # Preserve relative subdirectories in template filenames (e.g. pc2).
  55. servercfgdefault="config_sample/server.cfg"
  56. mkdir -p "${servercfgdir}/config_sample"
  57. printf '%s\n' nested > "${servercfgdir}/${servercfgdefault}"
  58. servercfgfullpath="${servercfgdir}/sample.cfg"
  59. fn_default_config_local > /dev/null
  60. assert_content "${servercfgfullpath}" nested
  61. servercfgdefault="missing.cfg"
  62. servercfgfullpath="${servercfgdir}/missing-instance.cfg"
  63. set +e
  64. fn_default_config_local > /dev/null 2>&1
  65. set -e
  66. [ "${exitcode}" -ne 0 ]
  67. [ ! -e "${servercfgfullpath}" ]
  68. lgsmdir="${testdir}/lgsm"
  69. shortname="arma3"
  70. servercfgdir="${testdir}/remote configs"
  71. servercfgdirdefault="${testdir}/download cache"
  72. servercfgdefault="server.cfg"
  73. servercfgfullpath="${servercfgdir}/instance.cfg"
  74. networkcfgdefault="network.cfg"
  75. networkcfgfullpath="${servercfgdir}/instance-network.cfg"
  76. array_configs=(server.cfg network.cfg extra.cfg)
  77. fn_default_config_remote > /dev/null
  78. assert_content "${servercfgfullpath}" 'template server.cfg'
  79. assert_content "${networkcfgfullpath}" 'template network.cfg'
  80. assert_content "${servercfgdir}/extra.cfg" 'template extra.cfg'
  81. assert_content "${servercfgdirdefault}/server.cfg" 'template server.cfg'
  82. printf '%s\n' customised > "${servercfgfullpath}"
  83. fn_default_config_remote > /dev/null
  84. assert_content "${servercfgfullpath}" customised
  85. # Template lookup must honour the same custom cache during substitutions.
  86. config="server.cfg"
  87. printf '%s\n' 'SERVERNAME="SERVERNAME"' > "${servercfgdirdefault}/${config}"
  88. cp "${servercfgdirdefault}/${config}" "${servercfgfullpath}"
  89. fn_set_config_vars > /dev/null
  90. assert_content "${servercfgfullpath}" 'SERVERNAME="LinuxGSM"'
  91. shortname="dst"
  92. clustercfgdefault="cluster.ini"
  93. clustercfgfullpath="${testdir}/cluster/instance.ini"
  94. mkdir -p "$(dirname "${clustercfgfullpath}")"
  95. array_configs=(cluster.ini)
  96. fn_default_config_remote > /dev/null
  97. assert_content "${clustercfgfullpath}" 'template cluster.ini'
  98. shortname="test"
  99. array_configs=(server.cfg)
  100. unset servercfgdirdefault
  101. servercfgfullpath="${servercfgdir}/remote-legacy.cfg"
  102. fn_default_config_remote > /dev/null
  103. assert_content "${servercfgfullpath}" 'template server.cfg'
  104. assert_content "${lgsmdir}/config-default/config-game/server.cfg" 'template server.cfg'
  105. servercfgdirdefault=""
  106. servercfgfullpath="${servercfgdir}/remote-empty.cfg"
  107. fn_default_config_remote > /dev/null
  108. assert_content "${servercfgfullpath}" 'template server.cfg'
  109. echo 'PASS: local and remote config source directories, fallbacks, substitutions, and existing configs'