tests_ts3server.sh 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. #!/bin/bash
  2. # TravisCI Tests
  3. # Server Management Script
  4. # Author: Daniel Gibbs
  5. # Website: http://gameservermanagers.com
  6. version="071115"
  7. #### Variables ####
  8. # Notification Email
  9. # (on|off)
  10. emailnotification="on"
  11. email="me@danielgibbs.co.uk"
  12. # Start Variables
  13. updateonstart="off"
  14. # Server Details
  15. gamename="Teamspeak 3"
  16. servername="Teamspeak 3 Server"
  17. servicename="ts3-server"
  18. # Directories
  19. rootdir="$(dirname $(readlink -f "${BASH_SOURCE[0]}"))"
  20. selfname=$(basename $(readlink -f "${BASH_SOURCE[0]}"))
  21. lockselfname=".${servicename}.lock"
  22. filesdir="${rootdir}/serverfiles"
  23. systemdir="${filesdir}"
  24. executabledir="${filesdir}"
  25. executable="./ts3server_startscript.sh"
  26. servercfg="${servicename}.ini"
  27. servercfgdir="${filesdir}"
  28. servercfgfullpath="${servercfgdir}/${servercfg}"
  29. backupdir="${rootdir}/backups"
  30. # Logging
  31. logdays="7"
  32. gamelogdir="${filesdir}/logs"
  33. scriptlogdir="${rootdir}/log/script"
  34. scriptlog="${scriptlogdir}/${servicename}-script.log"
  35. emaillog="${scriptlogdir}/${servicename}-email.log"
  36. scriptlogdate="${scriptlogdir}/${servicename}-script-$(date '+%d-%m-%Y-%H-%M-%S').log"
  37. ##### Script #####
  38. # Do not edit
  39. fn_runfunction(){
  40. # Functions are downloaded and run with this function
  41. if [ ! -f "${rootdir}/functions/${functionfile}" ]; then
  42. cd "${rootdir}"
  43. if [ ! -d "functions" ]; then
  44. mkdir functions
  45. fi
  46. cd functions
  47. echo -e " loading ${functionfile}...\c"
  48. wget -N /dev/null https://raw.githubusercontent.com/dgibbs64/linuxgsm/master/functions/${functionfile} 2>&1 | grep -F HTTP | cut -c45-
  49. chmod +x "${functionfile}"
  50. cd "${rootdir}"
  51. fi
  52. source "${rootdir}/functions/${functionfile}"
  53. }
  54. fn_functions(){
  55. # Functions are defined in fn_functions.
  56. functionfile="${FUNCNAME}"
  57. fn_runfunction
  58. }
  59. fn_functions
  60. fn_currentstatus_tmux(){
  61. pid=$(tmux list-sessions 2>&1 | awk '{print $1}' | grep -Ec "^${servicename}:")
  62. if [ "${pid}" != "0" ]; then
  63. currentstatus="ONLINE"
  64. else
  65. currentstatus="OFFLINE"
  66. fi
  67. }
  68. fn_currentstatus_ts3(){
  69. ts3status=$(${executable} status servercfgfullpathfile=${servercfgfullpath})
  70. if [ "${ts3status}" == "Server is running" ]; then
  71. currentstatus="ONLINE"
  72. else
  73. currentstatus="OFFLINE"
  74. fi
  75. }
  76. fn_setstatus(){
  77. fn_currentstatus_ts3
  78. echo""
  79. echo "Required status: ${requiredstatus}"
  80. counter=0
  81. echo "Current status: ${currentstatus}"
  82. while [ "${requiredstatus}" != "${currentstatus}" ]; do
  83. counter=$((counter+1))
  84. fn_currentstatus_ts3
  85. echo -ne "New status: ${currentstatus}\\r"
  86. if [ "${requiredstatus}" == "ONLINE" ]; then
  87. (fn_start)
  88. else
  89. (fn_stop)
  90. fi
  91. if [ "${counter}" -gt "5" ]; then
  92. currentstatus="FAIL"
  93. echo "Current status: ${currentstatus}"
  94. echo ""
  95. echo "Unable to start or stop server."
  96. exit 1
  97. fi
  98. done
  99. echo -ne "New status: ${currentstatus}\\r"
  100. echo -e "\n"
  101. echo "Test starting:"
  102. echo ""
  103. sleep 0.5
  104. }
  105. echo "================================="
  106. echo "TravisCI Tests"
  107. echo "Linux Game Server Manager"
  108. echo "by Daniel Gibbs"
  109. echo "http://gameservermanagers.com"
  110. echo "================================="
  111. echo ""
  112. sleep 1
  113. echo "================================="
  114. echo "Server Tests"
  115. echo "Using: ${gamename}"
  116. echo "================================="
  117. echo ""
  118. sleep 1
  119. echo "1.0 - start - no files"
  120. echo "================================="
  121. echo "Description:"
  122. echo "test script reaction to missing server files."
  123. echo ""
  124. (fn_start)
  125. echo ""
  126. echo "Test complete!"
  127. sleep 1
  128. echo ""
  129. echo "1.1 - getopt"
  130. echo "================================="
  131. echo "Description:"
  132. echo "displaying options messages."
  133. echo ""
  134. (fn_getopt)
  135. echo ""
  136. echo "Test complete!"
  137. sleep 1
  138. echo ""
  139. echo "2.0 - install"
  140. echo "================================="
  141. echo "Description:"
  142. echo "install ${gamename} server."
  143. fn_autoinstall
  144. echo ""
  145. echo "Test complete!"
  146. sleep 1
  147. echo ""
  148. echo "3.1 - start"
  149. echo "================================="
  150. echo "Description:"
  151. echo "start ${gamename} server."
  152. requiredstatus="OFFLINE"
  153. fn_setstatus
  154. fn_start
  155. echo ""
  156. echo "Test complete!"
  157. sleep 1
  158. echo ""
  159. echo "3.2 - start - online"
  160. echo "================================="
  161. echo "Description:"
  162. echo "start ${gamename} server while already running."
  163. requiredstatus="ONLINE"
  164. fn_setstatus
  165. (fn_start)
  166. echo ""
  167. echo "Test complete!"
  168. sleep 1
  169. echo ""
  170. echo "3.3 - start - updateonstart"
  171. echo "================================="
  172. echo "Description:"
  173. echo "will update server on start."
  174. requiredstatus="OFFLINE"
  175. fn_setstatus
  176. (
  177. updateonstart="on"
  178. fn_start
  179. )
  180. echo ""
  181. echo "Test complete!"
  182. sleep 1
  183. echo ""
  184. echo "3.4 - stop"
  185. echo "================================="
  186. echo "Description:"
  187. echo "stop ${gamename} server."
  188. requiredstatus="ONLINE"
  189. fn_setstatus
  190. fn_stop
  191. echo ""
  192. echo "Test complete!"
  193. sleep 1
  194. echo ""
  195. echo "3.5 - stop - offline"
  196. echo "================================="
  197. echo "Description:"
  198. echo "stop ${gamename} server while already stopped."
  199. requiredstatus="OFFLINE"
  200. fn_setstatus
  201. (fn_stop)
  202. echo ""
  203. echo "Test complete!"
  204. sleep 1
  205. echo ""
  206. echo "3.6 - restart"
  207. echo "================================="
  208. echo "Description:"
  209. echo "restart ${gamename}."
  210. requiredstatus="ONLINE"
  211. fn_setstatus
  212. fn_restart
  213. echo ""
  214. echo "Test complete!"
  215. sleep 1
  216. echo ""
  217. echo "3.7 - restart - offline"
  218. echo "================================="
  219. echo "Description:"
  220. echo "restart ${gamename} while already stopped."
  221. requiredstatus="OFFLINE"
  222. fn_setstatus
  223. fn_restart
  224. echo ""
  225. echo "Test complete!"
  226. sleep 1
  227. echo ""
  228. echo "4.1 - update"
  229. echo "================================="
  230. echo "Description:"
  231. echo "check for updates."
  232. requiredstatus="OFFLINE"
  233. fn_setstatus
  234. fn_update_check
  235. echo ""
  236. echo "Test complete!"
  237. sleep 1
  238. echo ""
  239. echo "4.1 - update - old version"
  240. echo "================================="
  241. echo "Description:"
  242. echo "change the version number tricking LGSM to update."
  243. requiredstatus="OFFLINE"
  244. sed -i 's/[0-9]\+/0/g' ${gamelogdir}/ts3server*_0.log
  245. fn_setstatus
  246. fn_update_check
  247. echo ""
  248. echo "Test complete!"
  249. sleep 1
  250. echo ""
  251. echo "5.1 - monitor - online"
  252. echo "================================="
  253. echo "Description:"
  254. echo "run monitor server while already running."
  255. requiredstatus="ONLINE"
  256. fn_setstatus
  257. (fn_monitor)
  258. echo ""
  259. echo "Test complete!"
  260. sleep 1
  261. echo ""
  262. echo "5.2 - monitor - offline - no lockfile"
  263. echo "================================="
  264. echo "Description:"
  265. echo "run monitor while server is offline with no lockfile."
  266. requiredstatus="OFFLINE"
  267. fn_setstatus
  268. (fn_monitor)
  269. echo ""
  270. echo "Test complete!"
  271. sleep 1
  272. echo ""
  273. echo "5.3 - monitor - offline - with lockfile"
  274. echo "================================="
  275. echo "Description:"
  276. echo "run monitor while server is offline with no lockfile."
  277. requiredstatus="OFFLINE"
  278. fn_setstatus
  279. fn_printinfonl "creating lockfile."
  280. date > "${rootdir}/${lockselfname}"
  281. (fn_monitor)
  282. echo ""
  283. echo "Test complete!"
  284. sleep 1
  285. echo ""
  286. echo "5.4 - monitor - gsquery.py failure"
  287. echo "================================="
  288. echo "Description:"
  289. echo "gsquery.py will fail to query port."
  290. requiredstatus="ONLINE"
  291. fn_setstatus
  292. sed -i 's/[0-9]\+/0/' "${servercfgfullpath}"
  293. (fn_monitor)
  294. echo ""
  295. fn_printinfonl "Reseting ${servercfg}."
  296. fn_install_config
  297. echo ""
  298. echo "Test complete!"
  299. sleep 1
  300. echo ""
  301. echo "6.0 - details"
  302. echo "================================="
  303. echo "Description:"
  304. echo "display details."
  305. requiredstatus="ONLINE"
  306. fn_setstatus
  307. fn_details
  308. echo ""
  309. echo "Test complete!"
  310. sleep 1
  311. echo ""
  312. echo "================================="
  313. echo "Server Tests - Complete!"
  314. echo "Using: ${gamename}"
  315. echo "================================="
  316. echo ""
  317. requiredstatus="OFFLINE"
  318. fn_setstatus
  319. sleep 1
  320. fn_printinfo "Tidying up directories."
  321. sleep 1
  322. rm -rfv ${serverfiles}
  323. echo "END"