Chromium Code Reviews| Index: extensions/browser/api/cast_channel/keep_alive_delegate_unittest.cc |
| diff --git a/extensions/browser/api/cast_channel/keep_alive_delegate_unittest.cc b/extensions/browser/api/cast_channel/keep_alive_delegate_unittest.cc |
| index f6f0b43da3bd729efcdc2b372f27eabdc4af2781..5b0cd63d87085a8ad6fe9b48b3788f483ac03333 100644 |
| --- a/extensions/browser/api/cast_channel/keep_alive_delegate_unittest.cc |
| +++ b/extensions/browser/api/cast_channel/keep_alive_delegate_unittest.cc |
| @@ -164,6 +164,46 @@ TEST_F(KeepAliveDelegateTest, TestResetTimersAndPassthroughAllOtherTraffic) { |
| RunPendingTasks(); |
| } |
| +TEST_F(KeepAliveDelegateTest, TestPassthroughMessagesAfterError) { |
| + CastMessage message = |
| + KeepAliveDelegate::CreateKeepAliveMessage("NEITHER_PING_NOR_PONG"); |
| + CastMessage message_after_error = |
| + KeepAliveDelegate::CreateKeepAliveMessage("ANOTHER_NOT_PING_NOR_PONG"); |
| + CastMessage late_ping_message = KeepAliveDelegate::CreateKeepAliveMessage( |
| + KeepAliveDelegate::kHeartbeatPingType); |
| + |
| + // Start, process one message, then error-out. KeepAliveDelegate will |
| + // automatically stop itself. |
| + EXPECT_CALL(*inner_delegate_, Start()).Times(1); |
| + EXPECT_CALL(*inner_delegate_, OnMessage(EqualsProto(message))) |
| + .Times(1) |
| + .RetiresOnSaturation(); |
| + EXPECT_CALL(*inner_delegate_, OnError(CHANNEL_ERROR_INVALID_MESSAGE)); |
| + EXPECT_CALL(*ping_timer_, ResetTriggered()).Times(2); |
| + EXPECT_CALL(*liveness_timer_, ResetTriggered()).Times(2); |
| + EXPECT_CALL(*liveness_timer_, Stop()).Times(1); |
| + EXPECT_CALL(*ping_timer_, Stop()).Times(1); |
|
Wez
2017/01/04 00:10:17
Strictly speaking, GMock has undefined behaviour i
miu
2017/01/12 22:31:27
My understanding is it always works so long as the
Wez
2017/01/13 22:37:11
I believe you're right, but strictly it is undefin
|
| + keep_alive_->Start(); |
| + keep_alive_->OnMessage(message); |
| + RunPendingTasks(); |
| + keep_alive_->OnError(CHANNEL_ERROR_INVALID_MESSAGE); |
| + RunPendingTasks(); |
| + |
| + // Process a non-PING/PONG message and expect it to pass through. |
| + EXPECT_CALL(*inner_delegate_, OnMessage(EqualsProto(message_after_error))) |
| + .Times(1) |
| + .RetiresOnSaturation(); |
| + keep_alive_->OnMessage(message_after_error); |
| + RunPendingTasks(); |
| + |
| + // Process a late-arriving PING/PONG message, which should have no effect.. |
| + EXPECT_CALL(*inner_delegate_, OnMessage(EqualsProto(late_ping_message))) |
| + .Times(0) |
| + .RetiresOnSaturation(); |
| + keep_alive_->OnMessage(late_ping_message); |
| + RunPendingTasks(); |
| +} |
| + |
| } // namespace |
| } // namespace cast_channel |
| } // namespace api |