harden BasicClusterManualSpec, #24293 (#24318)

* The probe was remote
* Default timeouts too tight for membership changes
This commit is contained in:
Patrik Nordwall 2018-01-16 10:51:59 +01:00 committed by Johan Andrén
parent 6cb326e171
commit e6b2d0d689

View file

@ -149,27 +149,31 @@ class BasicClusterManualSpec extends WordSpec with ScalaFutures with Eventually
val cluster3 = Cluster(system3) val cluster3 = Cluster(system3)
//#cluster-subscribe //#cluster-subscribe
val testProbe = TestProbe[MemberEvent]() val probe1 = TestProbe[MemberEvent]()(system1)
cluster1.subscriptions ! Subscribe(testProbe.ref, classOf[MemberEvent]) cluster1.subscriptions ! Subscribe(probe1.ref, classOf[MemberEvent])
//#cluster-subscribe //#cluster-subscribe
cluster1.manager ! Join(cluster1.selfMember.address) cluster1.manager ! Join(cluster1.selfMember.address)
eventually { eventually {
cluster1.state.members.toList.map(_.status) shouldEqual List(MemberStatus.up) cluster1.state.members.toList.map(_.status) shouldEqual List(MemberStatus.up)
} }
testProbe.expectMsg(MemberUp(cluster1.selfMember)) probe1.expectMsg(MemberUp(cluster1.selfMember))
cluster2.manager ! Join(cluster1.selfMember.address) cluster2.manager ! Join(cluster1.selfMember.address)
testProbe.expectMsgType[MemberJoined].member.address shouldEqual cluster2.selfMember.address probe1.within(10.seconds) {
testProbe.expectMsgType[MemberUp].member.address shouldEqual cluster2.selfMember.address probe1.expectMsgType[MemberJoined].member.address shouldEqual cluster2.selfMember.address
probe1.expectMsgType[MemberUp].member.address shouldEqual cluster2.selfMember.address
}
eventually { eventually {
cluster1.state.members.toList.map(_.status) shouldEqual List(MemberStatus.up, MemberStatus.up) cluster1.state.members.toList.map(_.status) shouldEqual List(MemberStatus.up, MemberStatus.up)
cluster2.state.members.toList.map(_.status) shouldEqual List(MemberStatus.up, MemberStatus.up) cluster2.state.members.toList.map(_.status) shouldEqual List(MemberStatus.up, MemberStatus.up)
} }
cluster3.manager ! Join(cluster1.selfMember.address) cluster3.manager ! Join(cluster1.selfMember.address)
testProbe.expectMsgType[MemberJoined].member.address shouldEqual cluster3.selfMember.address probe1.within(10.seconds) {
testProbe.expectMsgType[MemberUp].member.address shouldEqual cluster3.selfMember.address probe1.expectMsgType[MemberJoined].member.address shouldEqual cluster3.selfMember.address
probe1.expectMsgType[MemberUp].member.address shouldEqual cluster3.selfMember.address
}
eventually { eventually {
cluster1.state.members.toList.map(_.status) shouldEqual List(MemberStatus.up, MemberStatus.up, MemberStatus.up) cluster1.state.members.toList.map(_.status) shouldEqual List(MemberStatus.up, MemberStatus.up, MemberStatus.up)
cluster2.state.members.toList.map(_.status) shouldEqual List(MemberStatus.up, MemberStatus.up, MemberStatus.up) cluster2.state.members.toList.map(_.status) shouldEqual List(MemberStatus.up, MemberStatus.up, MemberStatus.up)
@ -178,9 +182,11 @@ class BasicClusterManualSpec extends WordSpec with ScalaFutures with Eventually
//#cluster-leave-example //#cluster-leave-example
cluster1.manager ! Leave(cluster2.selfMember.address) cluster1.manager ! Leave(cluster2.selfMember.address)
testProbe.expectMsgType[MemberLeft].member.address shouldEqual cluster2.selfMember.address probe1.within(10.seconds) {
testProbe.expectMsgType[MemberExited].member.address shouldEqual cluster2.selfMember.address probe1.expectMsgType[MemberLeft].member.address shouldEqual cluster2.selfMember.address
testProbe.expectMsgType[MemberRemoved].member.address shouldEqual cluster2.selfMember.address probe1.expectMsgType[MemberExited].member.address shouldEqual cluster2.selfMember.address
probe1.expectMsgType[MemberRemoved].member.address shouldEqual cluster2.selfMember.address
}
//#cluster-leave-example //#cluster-leave-example
eventually { eventually {
@ -188,11 +194,21 @@ class BasicClusterManualSpec extends WordSpec with ScalaFutures with Eventually
cluster3.state.members.toList.map(_.status) shouldEqual List(MemberStatus.up, MemberStatus.up) cluster3.state.members.toList.map(_.status) shouldEqual List(MemberStatus.up, MemberStatus.up)
} }
eventually {
cluster2.isTerminated should ===(true)
}
// via coordinated shutdown
system2.whenTerminated.futureValue
system1.log.info("Downing node 3") system1.log.info("Downing node 3")
cluster1.manager ! Down(cluster3.selfMember.address) cluster1.manager ! Down(cluster3.selfMember.address)
testProbe.expectMsgType[MemberRemoved](10.seconds).member.address shouldEqual cluster3.selfMember.address probe1.expectMsgType[MemberRemoved](10.seconds).member.address shouldEqual cluster3.selfMember.address
probe1.expectNoMessage()
// via coordinated shutdown
system3.whenTerminated.futureValue
testProbe.expectNoMessage()
} finally { } finally {
system1.terminate().futureValue system1.terminate().futureValue
system2.terminate().futureValue system2.terminate().futureValue