122 lines
3.3 KiB
Bash
Executable File
122 lines
3.3 KiB
Bash
Executable File
#!/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!"
|
|
|