|
|
@@ -0,0 +1,121 @@
|
|
|
+#!/bin/bash
|
|
|
+
|
|
|
+set -e
|
|
|
+
|
|
|
+EMQX_ENDPOINT="http://localhost:8081/api/v4/acl"
|
|
|
+EMQX2_ENDPOINT="http://localhost:8917/api/v4/acl"
|
|
|
+
|
|
|
+function run() {
|
|
|
+ emqx="$1"
|
|
|
+ shift
|
|
|
+
|
|
|
+ echo "[$emqx]" "$@"
|
|
|
+
|
|
|
+ pushd "$TEST_PATH/$emqx"
|
|
|
+ "$@"
|
|
|
+ popd
|
|
|
+}
|
|
|
+
|
|
|
+function post_rule() {
|
|
|
+ endpoint="$1"
|
|
|
+ rule="$2"
|
|
|
+ echo -n "->($endpoint) "
|
|
|
+ curl -s -u admin:public -X POST "$endpoint" -d "$rule"
|
|
|
+ echo
|
|
|
+}
|
|
|
+
|
|
|
+function verify_clientid_rule() {
|
|
|
+ endpoint="$1"
|
|
|
+ id="$2"
|
|
|
+ echo -n "<-($endpoint) "
|
|
|
+ curl -s -u admin:public "$endpoint/clientid/$id" | grep "$id" || (echo "verify rule for client $id failed" && return 1)
|
|
|
+}
|
|
|
+
|
|
|
+# Run nodes
|
|
|
+
|
|
|
+run emqx ./bin/emqx start
|
|
|
+run emqx2 ./bin/emqx start
|
|
|
+
|
|
|
+run emqx ./bin/emqx_ctl plugins load emqx_auth_mnesia
|
|
|
+run emqx2 ./bin/emqx_ctl plugins load emqx_auth_mnesia
|
|
|
+
|
|
|
+run emqx2 ./bin/emqx_ctl cluster join 'emqx@127.0.0.1'
|
|
|
+
|
|
|
+# Add ACL rule to unupgraded EMQX nodes
|
|
|
+
|
|
|
+post_rule "$EMQX_ENDPOINT" '{"clientid": "CLIENT1_A","topic": "t", "action": "pub", "access": "allow"}'
|
|
|
+post_rule "$EMQX2_ENDPOINT" '{"clientid": "CLIENT1_B","topic": "t", "action": "pub", "access": "allow"}'
|
|
|
+
|
|
|
+# Upgrade emqx2 node
|
|
|
+
|
|
|
+run emqx2 ./bin/emqx install "$VERSION"
|
|
|
+sleep 60
|
|
|
+
|
|
|
+# Verify upgrade blocked
|
|
|
+
|
|
|
+run emqx2 ./bin/emqx eval 'emqx_acl_mnesia_migrator:is_old_table_migrated().' | grep false || (echo "emqx2 shouldn't have migrated" && exit 1)
|
|
|
+
|
|
|
+# Verify old rules on both nodes
|
|
|
+
|
|
|
+verify_clientid_rule "$EMQX_ENDPOINT" 'CLIENT1_A'
|
|
|
+verify_clientid_rule "$EMQX2_ENDPOINT" 'CLIENT1_A'
|
|
|
+
|
|
|
+verify_clientid_rule "$EMQX_ENDPOINT" 'CLIENT1_B'
|
|
|
+verify_clientid_rule "$EMQX2_ENDPOINT" 'CLIENT1_B'
|
|
|
+
|
|
|
+# Add ACL on OLD and NEW node, verify on all nodes
|
|
|
+
|
|
|
+post_rule "$EMQX_ENDPOINT" '{"clientid": "CLIENT2_A","topic": "t", "action": "pub", "access": "allow"}'
|
|
|
+post_rule "$EMQX2_ENDPOINT" '{"clientid": "CLIENT2_B","topic": "t", "action": "pub", "access": "allow"}'
|
|
|
+
|
|
|
+verify_clientid_rule "$EMQX_ENDPOINT" 'CLIENT2_A'
|
|
|
+verify_clientid_rule "$EMQX2_ENDPOINT" 'CLIENT2_A'
|
|
|
+
|
|
|
+verify_clientid_rule "$EMQX_ENDPOINT" 'CLIENT2_B'
|
|
|
+verify_clientid_rule "$EMQX2_ENDPOINT" 'CLIENT2_B'
|
|
|
+
|
|
|
+# Upgrade emqx node
|
|
|
+
|
|
|
+run emqx ./bin/emqx install "$VERSION"
|
|
|
+
|
|
|
+# Wait for upgrade
|
|
|
+
|
|
|
+sleep 60
|
|
|
+
|
|
|
+# Verify if upgrade occured
|
|
|
+
|
|
|
+run emqx ./bin/emqx eval 'emqx_acl_mnesia_migrator:is_old_table_migrated().' | grep true || (echo "emqx should have migrated" && exit 1)
|
|
|
+run emqx2 ./bin/emqx eval 'emqx_acl_mnesia_migrator:is_old_table_migrated().' | grep true || (echo "emqx2 should have migrated" && exit 1)
|
|
|
+
|
|
|
+# Verify rules are kept
|
|
|
+
|
|
|
+verify_clientid_rule "$EMQX_ENDPOINT" 'CLIENT1_A'
|
|
|
+verify_clientid_rule "$EMQX2_ENDPOINT" 'CLIENT1_A'
|
|
|
+
|
|
|
+verify_clientid_rule "$EMQX_ENDPOINT" 'CLIENT1_B'
|
|
|
+verify_clientid_rule "$EMQX2_ENDPOINT" 'CLIENT1_B'
|
|
|
+
|
|
|
+verify_clientid_rule "$EMQX_ENDPOINT" 'CLIENT2_A'
|
|
|
+verify_clientid_rule "$EMQX2_ENDPOINT" 'CLIENT2_A'
|
|
|
+
|
|
|
+verify_clientid_rule "$EMQX_ENDPOINT" 'CLIENT2_B'
|
|
|
+verify_clientid_rule "$EMQX2_ENDPOINT" 'CLIENT2_B'
|
|
|
+
|
|
|
+# Add ACL on OLD and NEW node, verify on all nodes
|
|
|
+
|
|
|
+post_rule "$EMQX_ENDPOINT" '{"clientid": "CLIENT3_A","topic": "t", "action": "pub", "access": "allow"}'
|
|
|
+post_rule "$EMQX2_ENDPOINT" '{"clientid": "CLIENT3_B","topic": "t", "action": "pub", "access": "allow"}'
|
|
|
+
|
|
|
+verify_clientid_rule "$EMQX_ENDPOINT" 'CLIENT3_A'
|
|
|
+verify_clientid_rule "$EMQX2_ENDPOINT" 'CLIENT3_A'
|
|
|
+
|
|
|
+verify_clientid_rule "$EMQX_ENDPOINT" 'CLIENT3_B'
|
|
|
+verify_clientid_rule "$EMQX2_ENDPOINT" 'CLIENT3_B'
|
|
|
+
|
|
|
+# Stop nodes
|
|
|
+
|
|
|
+run emqx ./bin/emqx stop
|
|
|
+run emqx2 ./bin/emqx stop
|
|
|
+
|
|
|
+echo "Success!"
|
|
|
+
|