pkg-tests.sh 7.3 KB

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