ReliableProxy not so reliable
Can't we rename the test "IronicReliableProxy"?
[info] * akka.contrib.pattern.ReliableProxy
[JVM-Node2] Run starting. Expected test count is: 4
[JVM-Node1] Run starting. Expected test count is: 4
[JVM-Node1] ReliableProxyMultiJvmNode1:
[JVM-Node2] ReliableProxyMultiJvmNode2:
[JVM-Node1] A ReliableProxy
[JVM-Node2] A ReliableProxy
[JVM-Node1] - must forward messages in sequence
[JVM-Node2] - must forward messages in sequence
[JVM-Node1] - must retry when sending fails
[JVM-Node2] - must retry when sending fails
[JVM-Node1] - retry when receiving fails *** FAILED ***
[JVM-Node1] java.lang.AssertionError: assertion failed: timeout (3 seconds) during expectMsg while waiting for Transition(Actor[akka://ReliableProxySpec/user/proxy],Active,Idle)
[JVM-Node1] at scala.Predef$.assert(Predef.scala:179)
[JVM-Node1] at akka.testkit.TestKitBase$class.expectMsg_internal(TestKit.scala:294)
[JVM-Node1] at akka.testkit.TestKitBase$class.expectMsg(TestKit.scala:281)
[JVM-Node1] at akka.testkit.TestKit.expectMsg(TestKit.scala:641)
[JVM-Node1] at akka.contrib.pattern.ReliableProxySpec.expectTransition(ReliableProxySpec.scala:56)
[JVM-Node1] at akka.contrib.pattern.ReliableProxySpec$$anonfun$4$$anonfun$apply$mcV$sp$21$$anonfun$apply$mcV$sp$28.apply$mcV$sp(ReliableProxySpec.scala:156)
[JVM-Node1] at akka.remote.testkit.MultiNodeSpec.runOn(MultiNodeSpec.scala:322)
[JVM-Node1] at akka.contrib.pattern.ReliableProxySpec$$anonfun$4$$anonfun$apply$mcV$sp$21.apply$mcV$sp(ReliableProxySpec.scala:154)
[JVM-Node1] at akka.contrib.pattern.ReliableProxySpec$$anonfun$4$$anonfun$apply$mcV$sp$21.apply(ReliableProxySpec.scala:137)
[JVM-Node1] at akka.contrib.pattern.ReliableProxySpec$$anonfun$4$$anonfun$apply$mcV$sp$21.apply(ReliableProxySpec.scala:137)
[JVM-Node1] ...
[JVM-Node1] - resend across a slow link *** FAILED ***
[JVM-Node1] java.lang.AssertionError: assertion failed: timeout (4999845730 nanoseconds) during expectMsg while waiting for Transition(Actor[akka://ReliableProxySpec/user/proxy],Idle,Active)
[JVM-Node1] at scala.Predef$.assert(Predef.scala:179)
[JVM-Node1] at akka.testkit.TestKitBase$class.expectMsg_internal(TestKit.scala:294)
[JVM-Node1] at akka.testkit.TestKitBase$class.expectMsg(TestKit.scala:281)
[JVM-Node1] at akka.testkit.TestKit.expectMsg(TestKit.scala:641)
[JVM-Node1] at akka.contrib.pattern.ReliableProxySpec.expectTransition(ReliableProxySpec.scala:56)
[JVM-Node1] at akka.contrib.pattern.ReliableProxySpec$$anonfun$4$$anonfun$apply$mcV$sp$29$$anonfun$apply$mcV$sp$30$$anonfun$apply$mcV$sp$42.apply(ReliableProxySpec.scala:167)
[JVM-Node1] at akka.contrib.pattern.ReliableProxySpec$$anonfun$4$$anonfun$apply$mcV$sp$29$$anonfun$apply$mcV$sp$30$$anonfun$apply$mcV$sp$42.apply(ReliableProxySpec.scala:166)
[JVM-Node1] at akka.testkit.TestKitBase$class.within(TestKit.scala:262)
[JVM-Node1] at akka.testkit.TestKit.within(TestKit.scala:641)
[JVM-Node1] at akka.testkit.TestKitBase$class.within(TestKit.scala:276)
[JVM-Node1] ...
[JVM-Node2] - must retry when receiving fails
[JVM-Node2] - resend across a slow link *** FAILED ***
[JVM-Node2] java.lang.AssertionError: assertion failed: timeout (999572492 nanoseconds) during expectMsg while waiting for 1
[JVM-Node2] at scala.Predef$.assert(Predef.scala:179)
[JVM-Node2] at akka.testkit.TestKitBase$class.expectMsg_internal(TestKit.scala:294)
[JVM-Node2] at akka.testkit.TestKitBase$class.expectMsg(TestKit.scala:281)
[JVM-Node2] at akka.testkit.TestKit.expectMsg(TestKit.scala:641)
[JVM-Node2] at akka.contrib.pattern.ReliableProxySpec$$anonfun$4$$anonfun$apply$mcV$sp$29$$anonfun$apply$mcV$sp$37$$anonfun$apply$mcV$sp$38$$anonfun$apply$mcV$sp$39.apply$mcVI$sp(ReliableProxySpec.scala:190)
[JVM-Node2] at scala.collection.immutable.Range.foreach$mVc$sp(Range.scala:142)
[JVM-Node2] at akka.contrib.pattern.ReliableProxySpec$$anonfun$4$$anonfun$apply$mcV$sp$29$$anonfun$apply$mcV$sp$37$$anonfun$apply$mcV$sp$38.apply$mcV$sp(ReliableProxySpec.scala:190)
[JVM-Node2] at akka.contrib.pattern.ReliableProxySpec$$anonfun$4$$anonfun$apply$mcV$sp$29$$anonfun$apply$mcV$sp$37$$anonfun$apply$mcV$sp$38.apply(ReliableProxySpec.scala:190)
[JVM-Node2] at akka.contrib.pattern.ReliableProxySpec$$anonfun$4$$anonfun$apply$mcV$sp$29$$anonfun$apply$mcV$sp$37$$anonfun$apply$mcV$sp$38.apply(ReliableProxySpec.scala:190)
[JVM-Node2] at akka.testkit.TestKitBase$class.within(TestKit.scala:262)
[JVM-Node2] ...
[JVM-Node2] [WARN] [10/18/2012 16:45:33.443] [ReliableProxySpec-akka.actor.default-dispatcher-5] [akka://ReliableProxySpec/remote/ReliableProxySpec@scalable2-01:38120/user/proxy/tunnel] received dead letter from Actor[akka://ReliableProxySpec@scalable2-01:38120/user/proxy]: Message(25,Actor[akka://ReliableProxySpec@scalable2-01:38120/system/testActor1],326)
[JVM-Node2] [WARN] [10/18/2012 16:45:33.444] [ReliableProxySpec-akka.actor.default-dispatcher-5] [akka://ReliableProxySpec/user/TestConductorClient] received dead letter from Actor[akka://ReliableProxySpec/deadLetters]: PoisonPill
[JVM-Node2] [WARN] [10/18/2012 16:45:33.444] [ReliableProxySpec-akka.actor.default-dispatcher-5] [akka://ReliableProxySpec/remote/ReliableProxySpec@scalable2-01:38120/user/proxy/tunnel] received dead letter from Actor[akka://ReliableProxySpec@scalable2-01:38120/user/proxy]: Message(26,Actor[akka://ReliableProxySpec@scalable2-01:38120/system/testActor1],327)
[JVM-Node2] Run completed in 12 seconds, 911 milliseconds.
[JVM-Node2] Total number of tests run: 4
[JVM-Node2] Suites: completed 1, aborted 0
[JVM-Node2] Tests: succeeded 3, failed 1, ignored 0, pending 0
[JVM-Node2] *** 1 TEST FAILED ***
[info] * akka.contrib.pattern.ReliableProxy
[JVM-Node2] Run starting. Expected test count is: 4
[JVM-Node1] Run starting. Expected test count is: 4
[JVM-Node1] ReliableProxyMultiJvmNode1:
[JVM-Node2] ReliableProxyMultiJvmNode2:
[JVM-Node1] A ReliableProxy
[JVM-Node2] A ReliableProxy
[JVM-Node1] - must forward messages in sequence
[JVM-Node2] - must forward messages in sequence
[JVM-Node1] - must retry when sending fails
[JVM-Node2] - must retry when sending fails
[JVM-Node1] - retry when receiving fails *** FAILED ***
[JVM-Node1] java.lang.AssertionError: assertion failed: timeout (3 seconds) during expectMsg while waiting for Transition(Actor[akka://ReliableProxySpec/user/proxy],Active,Idle)
[JVM-Node1] at scala.Predef$.assert(Predef.scala:179)
[JVM-Node1] at akka.testkit.TestKitBase$class.expectMsg_internal(TestKit.scala:294)
[JVM-Node1] at akka.testkit.TestKitBase$class.expectMsg(TestKit.scala:281)
[JVM-Node1] at akka.testkit.TestKit.expectMsg(TestKit.scala:641)
[JVM-Node1] at akka.contrib.pattern.ReliableProxySpec.expectTransition(ReliableProxySpec.scala:56)
[JVM-Node1] at akka.contrib.pattern.ReliableProxySpec$$anonfun$4$$anonfun$apply$mcV$sp$21$$anonfun$apply$mcV$sp$28.apply$mcV$sp(ReliableProxySpec.scala:156)
[JVM-Node1] at akka.remote.testkit.MultiNodeSpec.runOn(MultiNodeSpec.scala:322)
[JVM-Node1] at akka.contrib.pattern.ReliableProxySpec$$anonfun$4$$anonfun$apply$mcV$sp$21.apply$mcV$sp(ReliableProxySpec.scala:154)
[JVM-Node1] at akka.contrib.pattern.ReliableProxySpec$$anonfun$4$$anonfun$apply$mcV$sp$21.apply(ReliableProxySpec.scala:137)
[JVM-Node1] at akka.contrib.pattern.ReliableProxySpec$$anonfun$4$$anonfun$apply$mcV$sp$21.apply(ReliableProxySpec.scala:137)
[JVM-Node1] ...
[JVM-Node1] - resend across a slow link *** FAILED ***
[JVM-Node1] java.lang.AssertionError: assertion failed: timeout (4999845730 nanoseconds) during expectMsg while waiting for Transition(Actor[akka://ReliableProxySpec/user/proxy],Idle,Active)
[JVM-Node1] at scala.Predef$.assert(Predef.scala:179)
[JVM-Node1] at akka.testkit.TestKitBase$class.expectMsg_internal(TestKit.scala:294)
[JVM-Node1] at akka.testkit.TestKitBase$class.expectMsg(TestKit.scala:281)
[JVM-Node1] at akka.testkit.TestKit.expectMsg(TestKit.scala:641)
[JVM-Node1] at akka.contrib.pattern.ReliableProxySpec.expectTransition(ReliableProxySpec.scala:56)
[JVM-Node1] at akka.contrib.pattern.ReliableProxySpec$$anonfun$4$$anonfun$apply$mcV$sp$29$$anonfun$apply$mcV$sp$30$$anonfun$apply$mcV$sp$42.apply(ReliableProxySpec.scala:167)
[JVM-Node1] at akka.contrib.pattern.ReliableProxySpec$$anonfun$4$$anonfun$apply$mcV$sp$29$$anonfun$apply$mcV$sp$30$$anonfun$apply$mcV$sp$42.apply(ReliableProxySpec.scala:166)
[JVM-Node1] at akka.testkit.TestKitBase$class.within(TestKit.scala:262)
[JVM-Node1] at akka.testkit.TestKit.within(TestKit.scala:641)
[JVM-Node1] at akka.testkit.TestKitBase$class.within(TestKit.scala:276)
[JVM-Node1] ...
[JVM-Node2] - must retry when receiving fails
[JVM-Node2] - resend across a slow link *** FAILED ***
[JVM-Node2] java.lang.AssertionError: assertion failed: timeout (999572492 nanoseconds) during expectMsg while waiting for 1
[JVM-Node2] at scala.Predef$.assert(Predef.scala:179)
[JVM-Node2] at akka.testkit.TestKitBase$class.expectMsg_internal(TestKit.scala:294)
[JVM-Node2] at akka.testkit.TestKitBase$class.expectMsg(TestKit.scala:281)
[JVM-Node2] at akka.testkit.TestKit.expectMsg(TestKit.scala:641)
[JVM-Node2] at akka.contrib.pattern.ReliableProxySpec$$anonfun$4$$anonfun$apply$mcV$sp$29$$anonfun$apply$mcV$sp$37$$anonfun$apply$mcV$sp$38$$anonfun$apply$mcV$sp$39.apply$mcVI$sp(ReliableProxySpec.scala:190)
[JVM-Node2] at scala.collection.immutable.Range.foreach$mVc$sp(Range.scala:142)
[JVM-Node2] at akka.contrib.pattern.ReliableProxySpec$$anonfun$4$$anonfun$apply$mcV$sp$29$$anonfun$apply$mcV$sp$37$$anonfun$apply$mcV$sp$38.apply$mcV$sp(ReliableProxySpec.scala:190)
[JVM-Node2] at akka.contrib.pattern.ReliableProxySpec$$anonfun$4$$anonfun$apply$mcV$sp$29$$anonfun$apply$mcV$sp$37$$anonfun$apply$mcV$sp$38.apply(ReliableProxySpec.scala:190)
[JVM-Node2] at akka.contrib.pattern.ReliableProxySpec$$anonfun$4$$anonfun$apply$mcV$sp$29$$anonfun$apply$mcV$sp$37$$anonfun$apply$mcV$sp$38.apply(ReliableProxySpec.scala:190)
[JVM-Node2] at akka.testkit.TestKitBase$class.within(TestKit.scala:262)
[JVM-Node2] ...
[JVM-Node2] [WARN] [10/18/2012 16:45:33.443] [ReliableProxySpec-akka.actor.default-dispatcher-5] [akka://ReliableProxySpec/remote/ReliableProxySpec@scalable2-01:38120/user/proxy/tunnel] received dead letter from Actor[akka://ReliableProxySpec@scalable2-01:38120/user/proxy]: Message(25,Actor[akka://ReliableProxySpec@scalable2-01:38120/system/testActor1],326)
[JVM-Node2] [WARN] [10/18/2012 16:45:33.444] [ReliableProxySpec-akka.actor.default-dispatcher-5] [akka://ReliableProxySpec/user/TestConductorClient] received dead letter from Actor[akka://ReliableProxySpec/deadLetters]: PoisonPill
[JVM-Node2] [WARN] [10/18/2012 16:45:33.444] [ReliableProxySpec-akka.actor.default-dispatcher-5] [akka://ReliableProxySpec/remote/ReliableProxySpec@scalable2-01:38120/user/proxy/tunnel] received dead letter from Actor[akka://ReliableProxySpec@scalable2-01:38120/user/proxy]: Message(26,Actor[akka://ReliableProxySpec@scalable2-01:38120/system/testActor1],327)
[JVM-Node2] Run completed in 12 seconds, 911 milliseconds.
[JVM-Node2] Total number of tests run: 4
[JVM-Node2] Suites: completed 1, aborted 0
[JVM-Node2] Tests: succeeded 3, failed 1, ignored 0, pending 0
[JVM-Node2] *** 1 TEST FAILED ***
Leave a comment
I came to the conclusion that the failure mode was entirely compatible with the test just taking a bit longer than the allotted three seconds (for the failing expectMsg), so
see https://github.com/akka/akka/pull/843
- start the expectMsg only when it can possibly be fulfilled (i.e. add the .await for the unthrottling)
- prolong to 5 seconds undilated
see https://github.com/akka/akka/pull/843
Updating tickets (#939, #940, #1941, #2081, #2126, #2213, #2214, #2215, #2219, #2222, #2223, #2239, #2240, #2249, #2250, #2252, #2253, #2254, #2256, #2259, #2263, #2264, #2265, #2267, #2270, #2271, #2275, #2277, #2286, #2287, #2289, #2290, #2303, #2304, #2308, #2310, #2311, #2317, #2323, #2331, #2374, #2392, #2394, #2405, #2408, #2423, #2424, #2425, #2440, #2444, #2445, #2449, #2453, #2456, #2459, #2461, #2473, #2477, #2485, #2491, #2495, #2498, #2501, #2505, #2515, #2517, #2523, #2534, #2541, #2544, #2545, #2549, #2582, #2583, #2588, #2589, #2598, #2599, #2618, #2623, #2626, #2627, #2630, #2631, #2633, #2634, #2635, #2637, #2638, #2642, #2643, #2646, #2647, #2648, #2649, #2650, #2653, #2655, #2657, #2658)