tests_jc2server.sh 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. #!/bin/bash
  2. # TravisCI Tests
  3. # Server Management Script
  4. # Author: Daniel Gibbs
  5. # Website: https://gameservermanagers.com
  6. version="101716"
  7. #### Advanced Variables ####
  8. # Github Branch Select
  9. # Allows for the use of different function files
  10. # from a different repo and/or branch.
  11. githubuser="dgibbs64"
  12. githubrepo="linuxgsm"
  13. githubbranch="$TRAVIS_BRANCH"
  14. ##### Script #####
  15. # Directories
  16. rootdir="$(dirname $(readlink -f "${BASH_SOURCE[0]}"))"
  17. selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))"
  18. lockselfname=".${servicename}.lock"
  19. lgsmdir="${rootdir}/lgsm"
  20. functionsdir="${lgsmdir}/functions"
  21. libdir="${lgsmdir}/lib"
  22. filesdir="${rootdir}/serverfiles"
  23. systemdir="${filesdir}"
  24. executabledir="${filesdir}"
  25. executable="./Jcmp-Server"
  26. servercfg="config.lua"
  27. servercfgdir="${filesdir}"
  28. servercfgfullpath="${servercfgdir}/${servercfg}"
  29. servercfgdefault="${servercfgdir}/default_config.lua"
  30. backupdir="${rootdir}/backups"
  31. # Server Details
  32. servicename="jc2-server"
  33. gamename="Just Cause 2"
  34. engine="avalanche"
  35. # Fetches core_dl for file downloads
  36. fn_fetch_core_dl(){
  37. github_file_url_dir="lgsm/functions"
  38. github_file_url_name="${functionfile}"
  39. filedir="${functionsdir}"
  40. filename="${github_file_url_name}"
  41. githuburl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${github_file_url_name}"
  42. # If the file is missing, then download
  43. if [ ! -f "${filedir}/${filename}" ]; then
  44. if [ ! -d "${filedir}" ]; then
  45. mkdir -p "${filedir}"
  46. fi
  47. echo -e " fetching ${filename}...\c"
  48. # Check curl exists and use available path
  49. curlpaths="$(command -v curl 2>/dev/null) $(which curl >/dev/null 2>&1) /usr/bin/curl /bin/curl /usr/sbin/curl /sbin/curl)"
  50. for curlcmd in ${curlpaths}
  51. do
  52. if [ -x "${curlcmd}" ]; then
  53. break
  54. fi
  55. done
  56. # If curl exists download file
  57. if [ "$(basename ${curlcmd})" == "curl" ]; then
  58. curlfetch=$(${curlcmd} -s --fail -o "${filedir}/${filename}" "${githuburl}" 2>&1)
  59. if [ $? -ne 0 ]; then
  60. echo -e "\e[0;31mFAIL\e[0m\n"
  61. echo "${curlfetch}"
  62. echo -e "${githuburl}\n"
  63. exit 1
  64. else
  65. echo -e "\e[0;32mOK\e[0m"
  66. fi
  67. else
  68. echo -e "\e[0;31mFAIL\e[0m\n"
  69. echo "Curl is not installed!"
  70. echo -e ""
  71. exit 1
  72. fi
  73. chmod +x "${filedir}/${filename}"
  74. fi
  75. source "${filedir}/${filename}"
  76. }
  77. core_dl.sh(){
  78. # Functions are defined in core_functions.sh.
  79. functionfile="${FUNCNAME}"
  80. fn_fetch_core_dl
  81. }
  82. core_functions.sh(){
  83. # Functions are defined in core_functions.sh.
  84. functionfile="${FUNCNAME}"
  85. fn_fetch_core_dl
  86. }
  87. core_dl.sh
  88. core_functions.sh
  89. fn_currentstatus_tmux(){
  90. pid=$(tmux list-sessions 2>&1 | awk '{print $1}' | grep -Ec "^${servicename}:")
  91. if [ "${pid}" != "0" ]; then
  92. currentstatus="ONLINE"
  93. else
  94. currentstatus="OFFLINE"
  95. fi
  96. }
  97. fn_currentstatus_ts3(){
  98. ts3status=$(${executable} status servercfgfullpathfile=${servercfgfullpath})
  99. if [ "${ts3status}" == "Server is running" ]; then
  100. currentstatus="ONLINE"
  101. else
  102. currentstatus="OFFLINE"
  103. fi
  104. }
  105. fn_setstatus(){
  106. fn_currentstatus_tmux
  107. echo""
  108. echo "Required status: ${requiredstatus}"
  109. counter=0
  110. echo "Current status: ${currentstatus}"
  111. while [ "${requiredstatus}" != "${currentstatus}" ]; do
  112. counter=$((counter+1))
  113. fn_currentstatus_tmux
  114. echo -ne "New status: ${currentstatus}\\r"
  115. if [ "${requiredstatus}" == "ONLINE" ]; then
  116. ./jc2server start > /dev/null 2>&1
  117. else
  118. ./jc2server start > /dev/null 2>&1
  119. fi
  120. if [ "${counter}" -gt "5" ]; then
  121. currentstatus="FAIL"
  122. echo "Current status: ${currentstatus}"
  123. echo ""
  124. echo "Unable to start or stop server."
  125. exit 1
  126. fi
  127. done
  128. echo -ne "New status: ${currentstatus}\\r"
  129. echo -e "\n"
  130. echo "Test starting:"
  131. echo ""
  132. sleep 0.5
  133. }
  134. # End of every test will expect the result to either pass or fail
  135. # If the script does not do as intended the whole test will fail
  136. # if excpecting a pass
  137. fn_test_result_pass(){
  138. if [ $? != 0 ]; then
  139. fn_print_fail_nl "Test Failed"
  140. exitcode=1
  141. core_exit.sh
  142. else
  143. fn_print_ok_nl "Test Passed"
  144. fi
  145. }
  146. # if excpecting a fail
  147. fn_test_result_fail(){
  148. if [ $? == 0 ]; then
  149. fn_print_fail_nl "Test Failed"
  150. exitcode=1
  151. core_exit.sh
  152. else
  153. fn_print_ok_nl "Test Passed"
  154. echo ""
  155. fi
  156. }
  157. echo "================================="
  158. echo "TravisCI Tests"
  159. echo "Linux Game Server Manager"
  160. echo "by Daniel Gibbs"
  161. echo "https://gameservermanagers.com"
  162. echo "================================="
  163. echo ""
  164. echo "================================="
  165. echo "Server Tests"
  166. echo "Using: ${gamename}"
  167. echo "Testing Branch: $TRAVIS_BRANCH"
  168. echo "================================="
  169. echo ""
  170. echo "0.0 - Preparing Enviroment"
  171. echo "================================="
  172. echo "Description:"
  173. echo "Preparing Enviroment to run tests"
  174. echo "Downloading jc2server"
  175. wget https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/JustCause2/jc2server
  176. chmod +x jc2server
  177. echo "Create log dir"
  178. mkdir -pv log/script/
  179. echo "Make functions executable"
  180. chmod +x lgsm/functions/*
  181. echo "Enable dev-debug"
  182. ./jc2server dev-debug
  183. echo "1.0 - start - no files"
  184. echo "================================="
  185. echo "Description:"
  186. echo "test script reaction to missing server files."
  187. echo ""
  188. echo "Command: ./jc2server start"
  189. ./jc2server start
  190. fn_test_result_fail
  191. echo ""
  192. echo "1.1 - getopt"
  193. echo "================================="
  194. echo "Description:"
  195. echo "displaying options messages."
  196. echo ""
  197. echo "Command: ./jc2server"
  198. ./jc2server
  199. fn_test_result_pass
  200. echo ""
  201. echo "1.2 - getopt with incorrect args"
  202. echo "================================="
  203. echo "Description:"
  204. echo "displaying options messages."
  205. echo ""
  206. echo "Command: ./jc2server abc123"
  207. ./jc2server abc123
  208. fn_test_result_fail
  209. echo "2.0 - install"
  210. echo "================================="
  211. echo "Description:"
  212. echo "install Just Cause 2 server."
  213. echo "Command: ./jc2server abc123"
  214. ./jc2server auto-install
  215. fn_test_result_pass
  216. echo "3.1 - start"
  217. echo "================================="
  218. echo "Description:"
  219. echo "start ${gamename} server."
  220. echo "Command: ./jc2server start"
  221. requiredstatus="OFFLINE"
  222. ./jc2server start