pkg-tests.sh 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. set -x
  4. if [ -z "${1:-}" ]; then
  5. echo "Usage $0 <PACKAGE_NAME> tgz|pkg"
  6. exit 1
  7. fi
  8. case "${2:-}" in
  9. tgz|pkg)
  10. true
  11. ;;
  12. *)
  13. echo "Usage $0 <PACKAGE_NAME> tgz|pkg"
  14. exit 1
  15. ;;
  16. esac
  17. PACKAGE_NAME="${1}"
  18. PACKAGE_TYPE="${2}"
  19. ARCH="${3}"
  20. # Needed by deploy/package/**/Makefile
  21. export ARCH
  22. export DEBUG=1
  23. export CODE_PATH=${CODE_PATH:-"/emqx"}
  24. export EMQX_NAME=${EMQX_NAME:-"emqx"}
  25. export PACKAGE_PATH="${CODE_PATH}/_packages/${EMQX_NAME}"
  26. export RELUP_PACKAGE_PATH="${CODE_PATH}/_upgrade_base"
  27. if [ "$PACKAGE_TYPE" = 'tgz' ]; then
  28. PKG_SUFFIX="tar.gz"
  29. else
  30. SYSTEM="$("$CODE_PATH"/scripts/get-distro.sh)"
  31. case "${SYSTEM:-}" in
  32. ubuntu*|debian*|raspbian*)
  33. PKG_SUFFIX='deb'
  34. ;;
  35. *)
  36. PKG_SUFFIX='rpm'
  37. ;;
  38. esac
  39. fi
  40. PACKAGE_FILE_NAME="${PACKAGE_NAME}.${PKG_SUFFIX}"
  41. PACKAGE_FILE="${PACKAGE_PATH}/${PACKAGE_FILE_NAME}"
  42. if ! [ -f "$PACKAGE_FILE" ]; then
  43. echo "$PACKAGE_FILE is not a file"
  44. exit 1
  45. fi
  46. emqx_prepare(){
  47. mkdir -p "${PACKAGE_PATH}"
  48. if [ ! -d "/paho-mqtt-testing" ]; then
  49. git clone -b develop-4.0 https://github.com/emqx/paho.mqtt.testing.git /paho-mqtt-testing
  50. fi
  51. pip3 install pytest
  52. }
  53. emqx_test(){
  54. cd "${PACKAGE_PATH}"
  55. local packagename="${PACKAGE_FILE_NAME}"
  56. case "$PKG_SUFFIX" in
  57. "tar.gz")
  58. tar -zxf "${PACKAGE_PATH}/${packagename}"
  59. export EMQX_ZONES__DEFAULT__MQTT__SERVER_KEEPALIVE=60
  60. export EMQX_MQTT__MAX_TOPIC_ALIAS=10
  61. export EMQX_LOG__CONSOLE_HANDLER__LEVEL=debug
  62. export EMQX_LOG__FILE_HANDLERS__DEFAULT__LEVEL=debug
  63. if [[ $(arch) == *arm* || $(arch) == aarch64 ]]; then
  64. export EMQX_LISTENERS__QUIC__DEFAULT__ENABLED=false
  65. fi
  66. # sed -i '/emqx_telemetry/d' "${PACKAGE_PATH}"/emqx/data/loaded_plugins
  67. echo "running ${packagename} start"
  68. if ! "${PACKAGE_PATH}"/emqx/bin/emqx start; then
  69. cat "${PACKAGE_PATH}"/emqx/log/erlang.log.1 || true
  70. cat "${PACKAGE_PATH}"/emqx/log/emqx.log.1 || true
  71. exit 1
  72. fi
  73. IDLE_TIME=0
  74. while ! curl http://127.0.0.1:18083/api/v5/status >/dev/null 2>&1; do
  75. if [ $IDLE_TIME -gt 10 ]
  76. then
  77. echo "emqx running error"
  78. exit 1
  79. fi
  80. sleep 10
  81. IDLE_TIME=$((IDLE_TIME+1))
  82. done
  83. pytest -v /paho-mqtt-testing/interoperability/test_client/V5/test_connect.py::test_basic
  84. if ! "${PACKAGE_PATH}"/emqx/bin/emqx stop; then
  85. cat "${PACKAGE_PATH}"/emqx/log/erlang.log.1 || true
  86. cat "${PACKAGE_PATH}"/emqx/log/emqx.log.1 || true
  87. exit 1
  88. fi
  89. echo "running ${packagename} stop"
  90. rm -rf "${PACKAGE_PATH}"/emqx
  91. ;;
  92. "deb")
  93. dpkg -i "${PACKAGE_PATH}/${packagename}"
  94. if [ "$(dpkg -l |grep emqx |awk '{print $1}')" != "ii" ]
  95. then
  96. echo "package install error"
  97. exit 1
  98. fi
  99. echo "running ${packagename} start"
  100. run_test
  101. echo "running ${packagename} stop"
  102. dpkg -r "${EMQX_NAME}"
  103. if [ "$(dpkg -l |grep emqx |awk '{print $1}')" != "rc" ]
  104. then
  105. echo "package remove error"
  106. exit 1
  107. fi
  108. dpkg -P "${EMQX_NAME}"
  109. if dpkg -l |grep -q emqx
  110. then
  111. echo "package uninstall error"
  112. exit 1
  113. fi
  114. ;;
  115. "rpm")
  116. yum install -y "${PACKAGE_PATH}/${packagename}"
  117. if ! rpm -q "${EMQX_NAME}" | grep -q "${EMQX_NAME}"; then
  118. echo "package install error"
  119. exit 1
  120. fi
  121. echo "running ${packagename} start"
  122. run_test
  123. echo "running ${packagename} stop"
  124. rpm -e "${EMQX_NAME}"
  125. if [ "$(rpm -q emqx)" != "package emqx is not installed" ];then
  126. echo "package uninstall error"
  127. exit 1
  128. fi
  129. ;;
  130. esac
  131. }
  132. run_test(){
  133. # sed -i '/emqx_telemetry/d' /var/lib/emqx/loaded_plugins
  134. emqx_env_vars=$(dirname "$(readlink "$(command -v emqx)")")/../releases/emqx_vars
  135. if [ -f "$emqx_env_vars" ];
  136. then
  137. tee -a "$emqx_env_vars" <<EOF
  138. export EMQX_ZONES__DEFAULT__MQTT__SERVER_KEEPALIVE=60
  139. export EMQX_MQTT__MAX_TOPIC_ALIAS=10
  140. export EMQX_LOG__CONSOLE_HANDLER__LEVEL=debug
  141. export EMQX_LOG__FILE_HANDLERS__DEFAULT__LEVEL=debug
  142. EOF
  143. ## for ARM, due to CI env issue, skip start of quic listener for the moment
  144. [[ $(arch) == *arm* || $(arch) == aarch64 ]] && tee -a "$emqx_env_vars" <<EOF
  145. export EMQX_LISTENERS__QUIC__DEFAULT__ENABLED=false
  146. EOF
  147. else
  148. echo "Error: cannot locate emqx_vars"
  149. exit 1
  150. fi
  151. if ! emqx 'start'; then
  152. cat /var/log/emqx/erlang.log.1 || true
  153. cat /var/log/emqx/emqx.log.1 || true
  154. exit 1
  155. fi
  156. IDLE_TIME=0
  157. while ! curl http://127.0.0.1:18083/api/v5/status >/dev/null 2>&1; do
  158. if [ $IDLE_TIME -gt 10 ]
  159. then
  160. echo "emqx running error"
  161. exit 1
  162. fi
  163. sleep 10
  164. IDLE_TIME=$((IDLE_TIME+1))
  165. done
  166. pytest -v /paho-mqtt-testing/interoperability/test_client/V5/test_connect.py::test_basic
  167. # shellcheck disable=SC2009 # pgrep does not support Extended Regular Expressions
  168. ps -ef | grep -E '\-progname\s.+emqx\s'
  169. if ! emqx 'stop'; then
  170. # shellcheck disable=SC2009 # pgrep does not support Extended Regular Expressions
  171. ps -ef | grep -E '\-progname\s.+emqx\s'
  172. echo "ERROR: failed_to_stop_emqx_with_the_stop_command"
  173. cat /var/log/emqx/erlang.log.1 || true
  174. cat /var/log/emqx/emqx.log.1 || true
  175. exit 1
  176. fi
  177. }
  178. relup_test(){
  179. TARGET_VERSION="$("$CODE_PATH"/pkg-vsn.sh "${EMQX_NAME}")"
  180. if [ -d "${RELUP_PACKAGE_PATH}" ];then
  181. cd "${RELUP_PACKAGE_PATH}"
  182. find . -maxdepth 1 -name "${EMQX_NAME}-*-${ARCH}.tar.gz" |
  183. while read -r pkg; do
  184. packagename=$(basename "${pkg}")
  185. tar -zxf "$packagename"
  186. if ! ./emqx/bin/emqx start; then
  187. cat emqx/log/erlang.log.1 || true
  188. cat emqx/log/emqx.log.1 || true
  189. exit 1
  190. fi
  191. ./emqx/bin/emqx_ctl status
  192. ./emqx/bin/emqx versions
  193. cp "${PACKAGE_PATH}/${EMQX_NAME}"-*-"${TARGET_VERSION}-${ARCH}".tar.gz ./emqx/releases
  194. ./emqx/bin/emqx install "${TARGET_VERSION}"
  195. [ "$(./emqx/bin/emqx versions |grep permanent | awk '{print $2}')" = "${TARGET_VERSION}" ] || exit 1
  196. ./emqx/bin/emqx_ctl status
  197. ./emqx/bin/emqx stop
  198. rm -rf emqx
  199. done
  200. fi
  201. }
  202. emqx_prepare
  203. emqx_test
  204. relup_test