From 5f93640077ad1ffcf8c334b9e0f97a91883fbaf2 Mon Sep 17 00:00:00 2001 From: James Allen Date: Thu, 4 May 2017 11:14:17 +0100 Subject: [PATCH] Add scripts for testing cluster failover scenarios --- .../coffee/test_blpop_failover.coffee | 41 +++++++++++++++++++ .../coffee/test_pubsub_failover.coffee | 33 +++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 services/document-updater/test/cluster_failover/coffee/test_blpop_failover.coffee create mode 100644 services/document-updater/test/cluster_failover/coffee/test_pubsub_failover.coffee diff --git a/services/document-updater/test/cluster_failover/coffee/test_blpop_failover.coffee b/services/document-updater/test/cluster_failover/coffee/test_blpop_failover.coffee new file mode 100644 index 0000000000..72a11164a4 --- /dev/null +++ b/services/document-updater/test/cluster_failover/coffee/test_blpop_failover.coffee @@ -0,0 +1,41 @@ +redis = require "redis-sharelatex" +rclient1 = redis.createClient(cluster: [{ + port: "7000" + host: "localhost" +}]) + +rclient2 = redis.createClient(cluster: [{ + port: "7000" + host: "localhost" +}]) + +counter = 0 +sendPing = (cb = () ->) -> + rclient1.rpush "test-blpop", counter, (error) -> + console.error "[SENDING ERROR]", error.message if error? + if !error? + counter += 1 + cb() + +previous = null +listenForPing = (cb) -> + rclient2.blpop "test-blpop", 200, (error, result) -> + return cb(error) if error? + [key, value] = result + value = parseInt(value, 10) + if value % 10 == 0 + console.log "." + if previous? and value != previous + 1 + error = new Error("Counter not in order. Got #{value}, expected #{previous + 1}") + previous = value + return cb(error, value) + +PING_DELAY = 100 +do sendPings = () -> + sendPing () -> + setTimeout sendPings, PING_DELAY + +do listenInBackground = (cb = () ->) -> + listenForPing (error, value) -> + console.error "[RECEIVING ERROR]", error.message if error + setTimeout listenInBackground \ No newline at end of file diff --git a/services/document-updater/test/cluster_failover/coffee/test_pubsub_failover.coffee b/services/document-updater/test/cluster_failover/coffee/test_pubsub_failover.coffee new file mode 100644 index 0000000000..31bddb5bca --- /dev/null +++ b/services/document-updater/test/cluster_failover/coffee/test_pubsub_failover.coffee @@ -0,0 +1,33 @@ +redis = require "redis-sharelatex" +rclient1 = redis.createClient(cluster: [{ + port: "7000" + host: "localhost" +}]) + +rclient2 = redis.createClient(cluster: [{ + port: "7000" + host: "localhost" +}]) + +counter = 0 +sendPing = (cb = () ->) -> + rclient1.publish "test-pubsub", counter, (error) -> + console.error "[SENDING ERROR]", error.message if error? + if !error? + counter += 1 + cb() + +previous = null +rclient2.subscribe "test-pubsub" +rclient2.on "message", (channel, value) -> + value = parseInt(value, 10) + if value % 10 == 0 + console.log "." + if previous? and value != previous + 1 + console.error "[RECEIVING ERROR]", "Counter not in order. Got #{value}, expected #{previous + 1}" + previous = value + +PING_DELAY = 100 +do sendPings = () -> + sendPing () -> + setTimeout sendPings, PING_DELAY