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

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

Issue 2609503002: Fix cast_channel::KeepAliveDelegate DCHECK failure. (Closed)
Patch Set: Tweaks, per wez's last round of comments. +REBASE Created 3 years, 11 months 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
« no previous file with comments | « extensions/browser/api/cast_channel/keep_alive_delegate.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..061ba4dcf247a335b50868f109f3da32ba9df123 100644
--- a/extensions/browser/api/cast_channel/keep_alive_delegate_unittest.cc
+++ b/extensions/browser/api/cast_channel/keep_alive_delegate_unittest.cc
@@ -18,6 +18,7 @@
#include "testing/gtest/include/gtest/gtest.h"
using testing::_;
+using testing::Sequence;
namespace extensions {
namespace api {
@@ -164,6 +165,54 @@ 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);
+
+ EXPECT_CALL(*inner_delegate_, Start()).Times(1);
+ 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);
+
+ Sequence message_and_error_sequence;
+ EXPECT_CALL(*inner_delegate_, OnMessage(EqualsProto(message)))
+ .Times(1)
+ .InSequence(message_and_error_sequence)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*inner_delegate_, OnError(CHANNEL_ERROR_INVALID_MESSAGE))
+ .Times(1)
+ .InSequence(message_and_error_sequence);
+ EXPECT_CALL(*inner_delegate_, OnMessage(EqualsProto(message_after_error)))
+ .Times(1)
+ .InSequence(message_and_error_sequence)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*inner_delegate_, OnMessage(EqualsProto(late_ping_message)))
+ .Times(0)
+ .InSequence(message_and_error_sequence)
+ .RetiresOnSaturation();
+
+ // Start, process one message, then error-out. KeepAliveDelegate will
+ // automatically stop itself.
+ 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.
+ keep_alive_->OnMessage(message_after_error);
+ RunPendingTasks();
+
+ // Process a late-arriving PING/PONG message, which should have no effect.
+ keep_alive_->OnMessage(late_ping_message);
+ RunPendingTasks();
+}
+
} // namespace
} // namespace cast_channel
} // namespace api
« no previous file with comments | « extensions/browser/api/cast_channel/keep_alive_delegate.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698