run_fvt_tests.yaml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. name: Run fvt tests
  2. on:
  3. push:
  4. pull_request:
  5. release:
  6. types:
  7. - published
  8. jobs:
  9. fvt_tests_with_edgex:
  10. runs-on: ubuntu-latest
  11. steps:
  12. - uses: actions/setup-go@v1
  13. with:
  14. go-version: '1.14'
  15. - uses: actions/setup-java@v1
  16. with:
  17. java-version: '8' # The JDK version to make available on the path.
  18. java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
  19. architecture: x64 # (x64 or x86) - defaults to x64
  20. - name: install jmeter
  21. timeout-minutes: 10
  22. env:
  23. JMETER_VERSION: 5.2.1
  24. run: |
  25. wget -O /tmp/apache-jmeter.tgz http://us.mirrors.quenda.co/apache//jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz
  26. cd /tmp && tar -xvf apache-jmeter.tgz
  27. echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  28. echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  29. wget -O /tmp/apache-jmeter-$JMETER_VERSION/lib/ext/mqtt-xmeter-1.13-jar-with-dependencies.jar https://github.com/emqx/mqtt-jmeter/raw/master/Download/v1.13.0/mqtt-xmeter-1.13-jar-with-dependencies.jar
  30. ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
  31. - name: install emqx
  32. env:
  33. EMQX_VERSION: v4.0.2
  34. run: |
  35. wget -O emqx.deb https://www.emqx.io/downloads/broker/v4.0.2/emqx-ubuntu18.04-${EMQX_VERSION}_amd64.deb
  36. sudo dpkg -i emqx.deb
  37. - uses: actions/checkout@v2
  38. - name: build kuiper
  39. run: |
  40. sudo apt update && sudo apt install pkg-config libczmq-dev -y
  41. make build_with_edgex
  42. go build --buildmode=plugin -o plugins/sources/Zmq.so plugins/sources/zmq.go
  43. - name: run edgex && emqx && kuiper
  44. run: |
  45. sudo ./fvt_scripts/setup_env.sh
  46. ln -s _build/kuiper-$(git describe --tags --always)-$(uname -s | tr "[A-Z]" "[a-z]")-x86_64/log kuiper_logs
  47. - name: run fvt tests
  48. timeout-minutes: 5
  49. run: ./fvt_scripts/run_jmeter.sh with_edgex=true
  50. - uses: actions/upload-artifact@v1
  51. if: always()
  52. with:
  53. name: kuiper_logs_with_edgex
  54. path: ./kuiper_logs
  55. - uses: actions/upload-artifact@v1
  56. if: always()
  57. with:
  58. name: jmeter_logs_with_edgex
  59. path: ./jmeter_logs
  60. - name: check logs
  61. run: |
  62. sudo apt update && sudo apt install -y libxml2-utils
  63. cd jmeter_logs
  64. if [ ! -z "$(cat *.jtl| grep '<failure>' | awk -F '>' '{print $2}' | awk -F '<' '{print $1}' | grep true)" ] ||
  65. [ "$(xmllint --format --xpath '/testResults/sample/@rc' $(ls *.jtl) | sed -r 's/ /\n/g;' | sort -u | grep -E 'rc=\"[45][0-9][0-9]\"|rc=\"\"')" != "" ]; then
  66. echo -e "---------------------------------------------\n"
  67. echo "FVT tests error"
  68. exit 1
  69. fi
  70. fvt_tests_without_edgex:
  71. runs-on: ubuntu-latest
  72. steps:
  73. - uses: actions/setup-go@v1
  74. with:
  75. go-version: '1.14'
  76. - uses: actions/setup-java@v1
  77. with:
  78. java-version: '8' # The JDK version to make available on the path.
  79. java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
  80. architecture: x64 # (x64 or x86) - defaults to x64
  81. - name: install jmeter
  82. timeout-minutes: 10
  83. env:
  84. JMETER_VERSION: 5.2.1
  85. run: |
  86. wget -O /tmp/apache-jmeter.tgz http://us.mirrors.quenda.co/apache//jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz
  87. cd /tmp && tar -xvf apache-jmeter.tgz
  88. echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  89. echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  90. wget -O /tmp/apache-jmeter-$JMETER_VERSION/lib/ext/mqtt-xmeter-1.13-jar-with-dependencies.jar https://github.com/emqx/mqtt-jmeter/raw/master/Download/v1.13.0/mqtt-xmeter-1.13-jar-with-dependencies.jar
  91. ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
  92. - name: install emqx
  93. env:
  94. EMQX_VERSION: v4.0.2
  95. run: |
  96. wget -O emqx.deb https://www.emqx.io/downloads/broker/v4.0.2/emqx-ubuntu18.04-${EMQX_VERSION}_amd64.deb
  97. sudo dpkg -i emqx.deb
  98. - uses: actions/checkout@v2
  99. - name: build kuiper
  100. run: |
  101. sudo apt update && sudo apt install pkg-config libczmq-dev -y
  102. make
  103. go build --buildmode=plugin -o plugins/sources/Zmq.so plugins/sources/zmq.go
  104. - name: run edgex && emqx && kuiper
  105. run: |
  106. sudo ./fvt_scripts/setup_env.sh
  107. ln -s _build/kuiper-$(git describe --tags --always)-$(uname -s | tr "[A-Z]" "[a-z]")-x86_64/log kuiper_logs
  108. - name: run fvt tests
  109. timeout-minutes: 5
  110. run: ./fvt_scripts/run_jmeter.sh with_edgex=false
  111. - uses: actions/upload-artifact@v1
  112. if: always()
  113. with:
  114. name: kuiper_logs_without_edgex
  115. path: ./kuiper_logs
  116. - uses: actions/upload-artifact@v1
  117. if: always()
  118. with:
  119. name: jmeter_logs_without_edgex
  120. path: ./jmeter_logs
  121. - name: check logs
  122. run: |
  123. sudo apt update && sudo apt install -y libxml2-utils
  124. cd jmeter_logs
  125. if [ ! -z "$(cat *.jtl| grep '<failure>' | awk -F '>' '{print $2}' | awk -F '<' '{print $1}' | grep true)" ] ||
  126. [ "$(xmllint --format --xpath '/testResults/sample/@rc' $(ls *.jtl) | sed -r 's/ /\n/g;' | sort -u | grep -E 'rc=\"[45][0-9][0-9]\"|rc=\"\"')" != "" ]; then
  127. echo -e "---------------------------------------------\n"
  128. echo "FVT tests error"
  129. exit 1
  130. fi
  131. fvt_tests_for_container_in_helm:
  132. runs-on: ubuntu-latest
  133. steps:
  134. - uses: actions/checkout@v2
  135. - uses: actions/setup-java@v1
  136. with:
  137. java-version: '8' # The JDK version to make available on the path.
  138. java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
  139. architecture: x64 # (x64 or x86) - defaults to x64
  140. - name: install jmeter
  141. timeout-minutes: 10
  142. env:
  143. JMETER_VERSION: 5.2.1
  144. run: |
  145. wget -O /tmp/apache-jmeter.tgz http://us.mirrors.quenda.co/apache//jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz
  146. cd /tmp && tar -xvf apache-jmeter.tgz
  147. echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  148. echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  149. wget -O /tmp/apache-jmeter-$JMETER_VERSION/lib/ext/mqtt-xmeter-1.13-jar-with-dependencies.jar https://github.com/emqx/mqtt-jmeter/raw/master/Download/v1.13.0/mqtt-xmeter-1.13-jar-with-dependencies.jar
  150. ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
  151. - name: setup jmeter
  152. timeout-minutes: 10
  153. run: |
  154. wget -O "/opt/jmeter/lib/json-lib-2.4-jdk15.jar" https://repo1.maven.org/maven2/net/sf/json-lib/json-lib/2.4/json-lib-2.4-jdk15.jar
  155. wget -O "/opt/jmeter/lib/commons-beanutils-1.8.0.jar" https://repo1.maven.org/maven2/commons-beanutils/commons-beanutils/1.8.0/commons-beanutils-1.8.0.jar
  156. wget -O "/opt/jmeter/lib/commons-collections-3.2.1.jar" https://repo1.maven.org/maven2/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar
  157. wget -O "/opt/jmeter/lib/commons-lang-2.5.jar" https://repo1.maven.org/maven2/commons-lang/commons-lang/2.5/commons-lang-2.5.jar
  158. wget -O "/opt/jmeter/lib/commons-logging-1.1.1.jar" https://repo1.maven.org/maven2/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar
  159. wget -O "/opt/jmeter/lib/ezmorph-1.0.6.jar" https://repo1.maven.org/maven2/net/sf/ezmorph/ezmorph/1.0.6/ezmorph-1.0.6.jar
  160. - name: install docker
  161. run: |
  162. sudo apt-get remove docker docker-engine docker.io containerd runc
  163. sudo apt-get update
  164. sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  165. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  166. sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  167. sudo apt-get update
  168. sudo apt-get install docker-ce docker-ce-cli containerd.io
  169. - name: install k3s
  170. env:
  171. KUBECONFIG: "/etc/rancher/k3s/k3s.yaml"
  172. run: |
  173. sudo sh -c "echo \"127.0.0.1 $(hostname)\" >> /etc/hosts"
  174. curl -sfL https://get.k3s.io | sh -
  175. sudo chmod 644 /etc/rancher/k3s/k3s.yaml
  176. kubectl cluster-info
  177. - name: install helm
  178. run: |
  179. curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
  180. sudo chmod 700 get_helm.sh
  181. sudo ./get_helm.sh
  182. helm version
  183. - name: build kuiper for docker
  184. run: sudo docker build --no-cache -t emqx/kuiper:$(git describe --tags --alway)-alpine -f deploy/docker/Dockerfile-alpine .
  185. - name: run emqx on chart
  186. env:
  187. KUBECONFIG: "/etc/rancher/k3s/k3s.yaml"
  188. timeout-minutes: 5
  189. run: |
  190. helm repo add emqx https://repos.emqx.io/charts
  191. helm repo update
  192. helm install emqx --set replicaCount=1 emqx/emqx
  193. while [ "$(kubectl get StatefulSet -l app.kubernetes.io/name=emqx -o jsonpath='{.items[0].status.replicas}')" \
  194. != "$(kubectl get StatefulSet -l app.kubernetes.io/name=emqx -o jsonpath='{.items[0].status.readyReplicas}')" ]; do
  195. echo "waiting emqx started"
  196. sleep 10
  197. done
  198. - name: run kuiper for chart
  199. env:
  200. KUBECONFIG: "/etc/rancher/k3s/k3s.yaml"
  201. timeout-minutes: 5
  202. run: |
  203. version=$(git describe --tags --always)
  204. emqx_address=$(kubectl get svc --namespace default emqx -o jsonpath="{.spec.clusterIP}")
  205. sudo docker save emqx/kuiper:$version-alpine -o kuier.tar.gz
  206. sudo k3s ctr image import kuier.tar.gz
  207. sed -i -r "s/^appVersion: .*$/appVersion: ${version}/g" deploy/chart/kuiper/Chart.yaml
  208. sed -i -r 's/ pullPolicy: .*$/ pullPolicy: Never/g' deploy/chart/kuiper/values.yaml
  209. sed -i -r "s/ servers: \[.*\]$/ servers: \[tcp:\/\/${emqx_address}:1883\]/g" deploy/chart/kuiper/values.yaml
  210. helm install kuiper deploy/chart/kuiper --debug --dry-run
  211. helm install kuiper deploy/chart/kuiper
  212. while [ "$(kubectl get StatefulSet -l app.kubernetes.io/name=kuiper -o jsonpath='{.items[0].status.replicas}')" \
  213. != "$(kubectl get StatefulSet -l app.kubernetes.io/name=kuiper -o jsonpath='{.items[0].status.readyReplicas}')" ]; do
  214. echo "=============================="
  215. kubectl describe pods kuiper-0
  216. echo "=============================="
  217. kubectl get pods
  218. echo "=============================="
  219. echo "waiting kuiper started"
  220. sleep 10
  221. done
  222. kuiper_address=$(kubectl get svc --namespace default kuiper -o jsonpath="{.spec.clusterIP}")
  223. if [ $(curl -w %{http_code} -fsSL -o /dev/null $kuiper_address:9081) != 200 ];then
  224. kubectl logs kuiper-0
  225. exit 1;
  226. fi
  227. - name: check kuiper
  228. env:
  229. KUBECONFIG: "/etc/rancher/k3s/k3s.yaml"
  230. timeout-minutes: 5
  231. run: |
  232. emqx_address=$(kubectl get svc --namespace default emqx -o jsonpath="{.spec.clusterIP}")
  233. kuiper_address=$(kubectl get svc --namespace default kuiper -o jsonpath="{.spec.clusterIP}")
  234. /opt/jmeter/bin/jmeter.sh -Jjmeter.save.saveservice.output_format=xml -n -t fvt_scripts/select_aggr_rule.jmx -Dsrv=${kuiper_address} -Dmqtt_srv=${emqx_address} -l jmeter_logs/select_aggr_rule.jtl -j jmeter_logs/select_aggr_rule.log
  235. mkdir -p kuiper_logs
  236. kubectl exec kuiper-0 -- cat /kuiper/log/stream.log > kuiper_logs/stream.log
  237. - uses: actions/upload-artifact@v1
  238. if: always()
  239. with:
  240. name: kuiper_logs_with_helm
  241. path: ./kuiper_logs
  242. - uses: actions/upload-artifact@v1
  243. if: always()
  244. with:
  245. name: jmeter_logs_with_helm
  246. path: ./jmeter_logs
  247. - name: check logs
  248. run: |
  249. sudo apt update && sudo apt install -y libxml2-utils
  250. cd jmeter_logs
  251. if [ ! -z "$(cat *.jtl| grep '<failure>' | awk -F '>' '{print $2}' | awk -F '<' '{print $1}' | grep true)" ] ||
  252. [ "$(xmllint --format --xpath '/testResults/sample/@rc' $(ls *.jtl) | sed -r 's/ /\n/g;' | sort -u | grep -E 'rc=\"[45][0-9][0-9]\"|rc=\"\"')" != "" ]; then
  253. echo -e "---------------------------------------------\n"
  254. echo "FVT tests error"
  255. exit 1
  256. fi