/
SplitBrainFiveNodesResolutionSpec.scala
85 lines (69 loc) · 2.52 KB
/
SplitBrainFiveNodesResolutionSpec.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package io.radicalbit.nsdb.split_brain
import akka.cluster.Cluster
import io.radicalbit.nsdb.split_brain.configs.SplitBrainFiveNodesResolutionSpecConfig
import scala.concurrent.duration._
class SplitBrainFiveNodesResolutionSpecMultiJvmNode1 extends SplitBrainFiveNodesResolutionSpec
class SplitBrainFiveNodesResolutionSpecMultiJvmNode2 extends SplitBrainFiveNodesResolutionSpec
class SplitBrainFiveNodesResolutionSpecMultiJvmNode3 extends SplitBrainFiveNodesResolutionSpec
class SplitBrainFiveNodesResolutionSpecMultiJvmNode4 extends SplitBrainFiveNodesResolutionSpec
class SplitBrainFiveNodesResolutionSpecMultiJvmNode5 extends SplitBrainFiveNodesResolutionSpec
/**
* Test Class in which split brain is reproduced and solved with a cluster of five nodes
*/
class SplitBrainFiveNodesResolutionSpec extends MultiNodeBaseSpec(SplitBrainFiveNodesResolutionSpecConfig) {
import SplitBrainFiveNodesResolutionSpecConfig._
val side1 = Vector(node1, node2)
val side2 = Vector(node3, node4, node5)
"SplitBrainFiveNodesResolutionSpec" must {
"start node-1" in within(30 seconds) {
runOn(node1) {
Cluster(system).join(addressOf(node1))
awaitClusterNodesForUp(node1)
}
enterBarrier("node-1-up")
}
"start node-2" in within(30 seconds) {
runOn(node2) {
Cluster(system).join(addressOf(node1))
awaitClusterNodesForUp(node1, node2)
}
enterBarrier("node-2-up")
}
"start node-3" in within(30 seconds) {
runOn(node3) {
Cluster(system).join(addressOf(node1))
awaitClusterNodesForUp(node1, node2, node3)
}
enterBarrier("node-3-up")
}
"start node-4" in within(30 seconds) {
runOn(node4) {
Cluster(system).join(addressOf(node1))
awaitClusterNodesForUp(node1, node2, node3, node4)
}
enterBarrier("node-4-up")
}
"start node-5" in within(30 seconds) {
runOn(node5) {
Cluster(system).join(addressOf(node1))
awaitClusterNodesForUp(node1, node2, node3, node4, node5)
}
enterBarrier("node-5-up")
}
"solve split brain scenario" in within(90 seconds) {
runOn(node1) {
for (role1 <- side1; role2 <- side2) switchOffConnection(role1, role2)
}
enterBarrier("links-failed")
runOn(side2: _*) {
awaitSurvivorsNodes(side2: _*)
awaitAllLeavingNodes(side1: _*)
awaitClusterLeader(side2: _*)
}
runOn(side1: _*) {
awaitSelfDowningNode()
}
enterBarrier("5 nodes split-brain solved")
}
}
}