Преглед изворни кода

Add scripts for testing cluster failover scenarios

James Allen пре 9 година
родитељ
комит
5f93640077

+ 41 - 0
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

+ 33 - 0
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