浏览代码

chore: supprot DNS discovery test for 4.x

Zaiming (Stone) Shi 3 年之前
父节点
当前提交
d49675cde5
共有 1 个文件被更改,包括 57 次插入5 次删除
  1. 57 5
      scripts/test-node-discovery-dns.sh

+ 57 - 5
scripts/test-node-discovery-dns.sh

@@ -1,12 +1,18 @@
 #!/usr/bin/env bash
 #!/usr/bin/env bash
 
 
-## Test two nodes-cluster discover each other using DNS A records lookup result.
+## Test two-nodes cluster discover each other using DNS A records lookup result.
 
 
 set -euo pipefail
 set -euo pipefail
 
 
 cd -P -- "$(dirname -- "$0")/.."
 cd -P -- "$(dirname -- "$0")/.."
 
 
-IMAGE="${1}"
+IMAGE="${1:-}"
+
+if [ -z "$IMAGE" ]; then
+    echo "Usage: $0 <EMQX_IMAGE_TAG>"
+    echo "e.g. $0 docker.io/emqx/emqx:5.0.8"
+    exit 1
+fi
 
 
 NET='test_node_discovery_dns'
 NET='test_node_discovery_dns'
 NODE1='emqx1'
 NODE1='emqx1'
@@ -56,7 +62,9 @@ docker run -d -t --name dnsmasq \
     --cap-add=NET_ADMIN \
     --cap-add=NET_ADMIN \
     storytel/dnsmasq dnsmasq --no-daemon --log-queries
     storytel/dnsmasq dnsmasq --no-daemon --log-queries
 
 
-start_emqx() {
+# Node names (the part before '@') should be all the same in the cluster
+# e.g. emqx@${IP}
+start_emqx_v5() {
     NAME="$1"
     NAME="$1"
     IP="$2"
     IP="$2"
     DASHBOARD_PORT="$3"
     DASHBOARD_PORT="$3"
@@ -66,6 +74,7 @@ start_emqx() {
         --ip "$IP" \
         --ip "$IP" \
         --dns "$IP0" \
         --dns "$IP0" \
         -p "$DASHBOARD_PORT:18083" \
         -p "$DASHBOARD_PORT:18083" \
+        -e EMQX_NODE_NAME="emqx@${IP}" \
         -e EMQX_LOG__CONSOLE_HANDLER__LEVEL=debug \
         -e EMQX_LOG__CONSOLE_HANDLER__LEVEL=debug \
         -e EMQX_NODE_COOKIE="$COOKIE" \
         -e EMQX_NODE_COOKIE="$COOKIE" \
         -e EMQX_cluster__discovery_strategy='dns' \
         -e EMQX_cluster__discovery_strategy='dns' \
@@ -74,5 +83,48 @@ start_emqx() {
         "$IMAGE"
         "$IMAGE"
 }
 }
 
 
-start_emqx "$NODE1" "$IP1" 18083
-start_emqx "$NODE2" "$IP2" 18084
+## EMQX v4 has different configuration schema:
+# EMQX_NODE_NAME="emqx@${IP}":
+#   This is necessary because 4.x docker entrypoint
+#   by default uses docker container ID as node name
+#   (the part before @ of e.g. emqx@172.18.0.101)
+# EMQX_cluster__dns__app
+#   This must be the same as node name in 4.x
+# EMQX_cluster__discovery
+#   This in 5.0 is EMQX_cluster__discovery_strategy
+# EMQX_cluster__dns__name
+#   The DNS domain to lookup for peer nodes
+# EMQX_cluster__dns__record_type
+#   The DNS record type. (only 'a' type is tested)
+start_emqx_v4() {
+    NAME="$1"
+    IP="$2"
+    APP_NAME="emqx"
+    DASHBOARD_PORT="$3"
+    docker run -d -t \
+        --name "$NAME" \
+        --net "$NET" \
+        --ip "$IP" \
+        --dns "$IP0" \
+        -p "$DASHBOARD_PORT:18083" \
+        -e EMQX_NODE_NAME="${APP_NAME}@${IP}" \
+        -e EMQX_LOG__LEVEL=debug \
+        -e EMQX_NODE_COOKIE="$COOKIE" \
+        -e EMQX_cluster__discovery='dns' \
+        -e EMQX_cluster__dns__name="$DOMAIN" \
+        -e EMQX_cluster__dns__app="${APP_NAME}" \
+        -e EMQX_cluster__dns__record_type="a" \
+        "$IMAGE"
+}
+
+case "${IMAGE}" in
+    *emqx:4.*|*emqx-ee:4.*)
+        start_emqx_v4 "$NODE1" "$IP1" 18083
+        start_emqx_v4 "$NODE2" "$IP2" 18084
+        ;;
+    *)
+        start_emqx_v5 "$NODE1" "$IP1" 18083
+        start_emqx_v5 "$NODE2" "$IP2" 18084
+        ;;
+
+esac