Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Unified Diff: extensions/browser/api/cast_channel/keep_alive_delegate_unittest.cc

Issue 2609503002: Fix cast_channel::KeepAliveDelegate DCHECK failure. (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698