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

Unified Diff: google_apis/gcm/engine/connection_factory_impl_unittest.cc

Issue 336473003: [GCM] Suppress connection attempts when there is no valid connection. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Self review Created 6 years, 6 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
Index: google_apis/gcm/engine/connection_factory_impl_unittest.cc
diff --git a/google_apis/gcm/engine/connection_factory_impl_unittest.cc b/google_apis/gcm/engine/connection_factory_impl_unittest.cc
index ef1618329882ac570fae39f9c112f609eccbc9a0..6b2fde2edff0fbb167d84db8c158907b87b4eeca 100644
--- a/google_apis/gcm/engine/connection_factory_impl_unittest.cc
+++ b/google_apis/gcm/engine/connection_factory_impl_unittest.cc
@@ -387,8 +387,8 @@ TEST_F(ConnectionFactoryImplTest, MultipleFailuresThenSucceed) {
EXPECT_TRUE(connected_server().is_valid());
}
-// IP events should trigger canary connections.
-TEST_F(ConnectionFactoryImplTest, FailThenIPEvent) {
+// Network change events should trigger canary connections.
+TEST_F(ConnectionFactoryImplTest, FailThenNetworkChangeEvent) {
factory()->SetConnectResult(net::ERR_CONNECTION_FAILED);
factory()->Connect();
WaitForConnections();
@@ -396,26 +396,7 @@ TEST_F(ConnectionFactoryImplTest, FailThenIPEvent) {
EXPECT_FALSE(initial_backoff.is_null());
factory()->SetConnectResult(net::ERR_FAILED);
- factory()->OnIPAddressChanged();
- WaitForConnections();
-
- // Backoff should increase.
- base::TimeTicks next_backoff = factory()->NextRetryAttempt();
- EXPECT_GT(next_backoff, initial_backoff);
- EXPECT_FALSE(factory()->IsEndpointReachable());
-}
-
-// Connection type events should trigger canary connections.
-TEST_F(ConnectionFactoryImplTest, FailThenConnectionTypeEvent) {
- factory()->SetConnectResult(net::ERR_CONNECTION_FAILED);
- factory()->Connect();
- WaitForConnections();
- base::TimeTicks initial_backoff = factory()->NextRetryAttempt();
- EXPECT_FALSE(initial_backoff.is_null());
-
- factory()->SetConnectResult(net::ERR_FAILED);
- factory()->OnConnectionTypeChanged(
- net::NetworkChangeNotifier::CONNECTION_WIFI);
+ factory()->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_WIFI);
WaitForConnections();
// Backoff should increase.
@@ -434,8 +415,7 @@ TEST_F(ConnectionFactoryImplTest, CanarySucceedsThenDisconnects) {
EXPECT_FALSE(initial_backoff.is_null());
factory()->SetConnectResult(net::OK);
- factory()->OnConnectionTypeChanged(
- net::NetworkChangeNotifier::CONNECTION_WIFI);
+ factory()->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_WIFI);
fgorski 2014/06/19 20:01:49 nit: can we try other stuff than wifi here? CONNEC
Nicolas Zea 2014/06/19 21:50:04 Well, the code doesn't care what type of connectio
WaitForConnections();
EXPECT_TRUE(factory()->IsEndpointReachable());
EXPECT_TRUE(connected_server().is_valid());
@@ -460,8 +440,7 @@ TEST_F(ConnectionFactoryImplTest, CanarySucceedsRetryDuringLogin) {
factory()->SetDelayLogin(true);
factory()->SetConnectResult(net::OK);
- factory()->OnConnectionTypeChanged(
- net::NetworkChangeNotifier::CONNECTION_WIFI);
+ factory()->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_WIFI);
WaitForConnections();
EXPECT_FALSE(factory()->IsEndpointReachable());
@@ -545,4 +524,29 @@ TEST_F(ConnectionFactoryImplTest, SignalResetRestoresBackoff) {
EXPECT_FALSE(connected_server().is_valid());
}
+// When the network is disconnected, close the socket and suppress further
+// connection attempts until the network returns.
+TEST_F(ConnectionFactoryImplTest, SuppressConnectWhenNoNetwork) {
+ factory()->SetConnectResult(net::OK);
+ factory()->Connect();
+ EXPECT_TRUE(factory()->NextRetryAttempt().is_null());
+ EXPECT_TRUE(factory()->IsEndpointReachable());
+
+ // Advance clock so the login window reset isn't encountered.
+ factory()->tick_clock()->Advance(base::TimeDelta::FromSeconds(11));
+
+ // Will trigger reset, but will not attempt a new connection.
+ factory()->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_NONE);
+ EXPECT_FALSE(factory()->IsEndpointReachable());
+ EXPECT_TRUE(factory()->NextRetryAttempt().is_null());
+
+ // When the network returns, attempt to connect.
+ factory()->SetConnectResult(net::OK);
+ factory()->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_WIFI);
+ WaitForConnections();
+
+ EXPECT_TRUE(factory()->IsEndpointReachable());
+ EXPECT_TRUE(factory()->NextRetryAttempt().is_null());
+}
+
} // namespace gcm

Powered by Google App Engine
This is Rietveld 408576698