Index: chromeos/components/tether/tether_connector_unittest.cc |
diff --git a/chromeos/components/tether/tether_connector_unittest.cc b/chromeos/components/tether/tether_connector_unittest.cc |
index 3187ddbcdc5204d9ee8d1d0529ca8a48c10710d1..82d776bc2f9f072548b5d9b465c88efd2768edce 100644 |
--- a/chromeos/components/tether/tether_connector_unittest.cc |
+++ b/chromeos/components/tether/tether_connector_unittest.cc |
@@ -48,42 +48,6 @@ std::string CreateWifiConfigurationJsonString() { |
return ss.str(); |
} |
-class TestNetworkConnectionHandler : public NetworkConnectionHandler { |
- public: |
- TestNetworkConnectionHandler() : NetworkConnectionHandler() {} |
- ~TestNetworkConnectionHandler() override {} |
- |
- void CallTetherDelegate( |
- const std::string& tether_network_guid, |
- const base::Closure& success_callback, |
- const network_handler::ErrorCallback& error_callback) { |
- InitiateTetherNetworkConnection(tether_network_guid, success_callback, |
- error_callback); |
- } |
- |
- // NetworkConnectionHandler: |
- void ConnectToNetwork(const std::string& service_path, |
- const base::Closure& success_callback, |
- const network_handler::ErrorCallback& error_callback, |
- bool check_error_state) override {} |
- |
- void DisconnectNetwork( |
- const std::string& service_path, |
- const base::Closure& success_callback, |
- const network_handler::ErrorCallback& error_callback) override {} |
- |
- bool HasConnectingNetwork(const std::string& service_path) override { |
- return false; |
- } |
- |
- bool HasPendingConnectRequest() override { return false; } |
- |
- void Init(NetworkStateHandler* network_state_handler, |
- NetworkConfigurationHandler* network_configuration_handler, |
- ManagedNetworkConfigurationHandler* |
- managed_network_configuration_handler) override {} |
-}; |
- |
class FakeConnectTetheringOperation : public ConnectTetheringOperation { |
public: |
FakeConnectTetheringOperation( |
@@ -157,8 +121,6 @@ class TetherConnectorTest : public NetworkStateTest { |
ConnectTetheringOperation::Factory::SetInstanceForTesting( |
fake_operation_factory_.get()); |
- test_network_connection_handler_ = |
- base::WrapUnique(new TestNetworkConnectionHandler()); |
fake_wifi_hotspot_connector_ = |
base::MakeUnique<FakeWifiHotspotConnector>(network_state_handler()); |
fake_active_host_ = base::MakeUnique<FakeActiveHost>(); |
@@ -173,9 +135,9 @@ class TetherConnectorTest : public NetworkStateTest { |
result_.clear(); |
tether_connector_ = base::WrapUnique(new TetherConnector( |
- test_network_connection_handler_.get(), network_state_handler(), |
- fake_wifi_hotspot_connector_.get(), fake_active_host_.get(), |
- fake_tether_host_fetcher_.get(), fake_ble_connection_manager_.get(), |
+ network_state_handler(), fake_wifi_hotspot_connector_.get(), |
+ fake_active_host_.get(), fake_tether_host_fetcher_.get(), |
+ fake_ble_connection_manager_.get(), |
mock_tether_host_response_recorder_.get(), |
device_id_tether_network_guid_map_.get())); |
@@ -200,8 +162,8 @@ class TetherConnectorTest : public NetworkStateTest { |
void SetUpTetherNetworks() { |
// Add a tether network corresponding to both of the test devices. These |
- // networks are expected to be added already before TetherConnector receives |
- // its ConnectToNetwork() callback. |
+ // networks are expected to be added already before |
+ // TetherConnector::ConnectToNetwork is called. |
network_state_handler()->AddTetherNetworkState( |
GetTetherNetworkGuid(test_devices_[0].GetDeviceId()), |
"TetherNetworkName1", "TetherNetworkCarrier1", |
@@ -234,13 +196,10 @@ class TetherConnectorTest : public NetworkStateTest { |
void SuccessCallback() { result_ = kSuccessResult; } |
- void ErrorCallback(const std::string& error_name, |
- std::unique_ptr<base::DictionaryValue> error_data) { |
- result_ = error_name; |
- } |
+ void ErrorCallback(const std::string& error_name) { result_ = error_name; } |
- void CallTetherDelegate(const std::string& tether_network_guid) { |
- test_network_connection_handler_->CallTetherDelegate( |
+ void CallConnect(const std::string& tether_network_guid) { |
+ tether_connector_->ConnectToNetwork( |
tether_network_guid, |
base::Bind(&TetherConnectorTest::SuccessCallback, |
base::Unretained(this)), |
@@ -258,8 +217,6 @@ class TetherConnectorTest : public NetworkStateTest { |
const base::MessageLoop message_loop_; |
std::unique_ptr<FakeConnectTetheringOperationFactory> fake_operation_factory_; |
- std::unique_ptr<TestNetworkConnectionHandler> |
- test_network_connection_handler_; |
std::unique_ptr<FakeWifiHotspotConnector> fake_wifi_hotspot_connector_; |
std::unique_ptr<FakeActiveHost> fake_active_host_; |
std::unique_ptr<FakeTetherHostFetcher> fake_tether_host_fetcher_; |
@@ -282,7 +239,7 @@ TEST_F(TetherConnectorTest, TestCannotFetchDevice) { |
// Base64-encoded version of "nonexistentDeviceId". |
const char kNonexistentDeviceId[] = "bm9uZXhpc3RlbnREZXZpY2VJZA=="; |
- CallTetherDelegate(GetTetherNetworkGuid(kNonexistentDeviceId)); |
+ CallConnect(GetTetherNetworkGuid(kNonexistentDeviceId)); |
EXPECT_EQ(ActiveHost::ActiveHostStatus::CONNECTING, |
fake_active_host_->GetActiveHostStatus()); |
EXPECT_EQ(kNonexistentDeviceId, fake_active_host_->GetActiveHostDeviceId()); |
@@ -299,8 +256,32 @@ TEST_F(TetherConnectorTest, TestCannotFetchDevice) { |
EXPECT_EQ(NetworkConnectionHandler::kErrorConnectFailed, GetResultAndReset()); |
} |
+TEST_F(TetherConnectorTest, TestCancelWhileOperationActive) { |
+ CallConnect(GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); |
+ EXPECT_EQ(ActiveHost::ActiveHostStatus::CONNECTING, |
+ fake_active_host_->GetActiveHostStatus()); |
+ EXPECT_EQ(test_devices_[0].GetDeviceId(), |
+ fake_active_host_->GetActiveHostDeviceId()); |
+ EXPECT_EQ(GetTetherNetworkGuid(test_devices_[0].GetDeviceId()), |
+ fake_active_host_->GetTetherNetworkGuid()); |
+ EXPECT_TRUE(fake_active_host_->GetWifiNetworkGuid().empty()); |
+ |
+ fake_tether_host_fetcher_->InvokePendingCallbacks(); |
+ |
+ // Simulate a failed connection attempt (either the host cannot provide |
+ // tethering at this time or a timeout occurs). |
+ EXPECT_EQ(1u, fake_operation_factory_->created_operations().size()); |
+ tether_connector_->CancelConnectionAttempt( |
+ GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); |
+ |
+ EXPECT_EQ(ActiveHost::ActiveHostStatus::DISCONNECTED, |
+ fake_active_host_->GetActiveHostStatus()); |
+ EXPECT_EQ(NetworkConnectionHandler::kErrorConnectCanceled, |
+ GetResultAndReset()); |
+} |
+ |
TEST_F(TetherConnectorTest, TestConnectTetheringOperationFails) { |
- CallTetherDelegate(GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); |
+ CallConnect(GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); |
EXPECT_EQ(ActiveHost::ActiveHostStatus::CONNECTING, |
fake_active_host_->GetActiveHostStatus()); |
EXPECT_EQ(test_devices_[0].GetDeviceId(), |
@@ -325,7 +306,7 @@ TEST_F(TetherConnectorTest, TestConnectTetheringOperationFails) { |
} |
TEST_F(TetherConnectorTest, TestConnectingToWifiFails) { |
- CallTetherDelegate(GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); |
+ CallConnect(GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); |
EXPECT_EQ(ActiveHost::ActiveHostStatus::CONNECTING, |
fake_active_host_->GetActiveHostStatus()); |
EXPECT_EQ(test_devices_[0].GetDeviceId(), |
@@ -356,8 +337,36 @@ TEST_F(TetherConnectorTest, TestConnectingToWifiFails) { |
EXPECT_EQ(NetworkConnectionHandler::kErrorConnectFailed, GetResultAndReset()); |
} |
+TEST_F(TetherConnectorTest, TestCancelWhileConnectingToWifi) { |
+ CallConnect(GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); |
+ EXPECT_EQ(ActiveHost::ActiveHostStatus::CONNECTING, |
+ fake_active_host_->GetActiveHostStatus()); |
+ EXPECT_EQ(test_devices_[0].GetDeviceId(), |
+ fake_active_host_->GetActiveHostDeviceId()); |
+ EXPECT_EQ(GetTetherNetworkGuid(test_devices_[0].GetDeviceId()), |
+ fake_active_host_->GetTetherNetworkGuid()); |
+ EXPECT_TRUE(fake_active_host_->GetWifiNetworkGuid().empty()); |
+ |
+ fake_tether_host_fetcher_->InvokePendingCallbacks(); |
+ |
+ // Receive a successful response. We should still be connecting. |
+ EXPECT_EQ(1u, fake_operation_factory_->created_operations().size()); |
+ fake_operation_factory_->created_operations()[0]->SendSuccessfulResponse( |
+ kSsid, kPassword); |
+ EXPECT_EQ(ActiveHost::ActiveHostStatus::CONNECTING, |
+ fake_active_host_->GetActiveHostStatus()); |
+ |
+ tether_connector_->CancelConnectionAttempt( |
+ GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); |
+ |
+ EXPECT_EQ(ActiveHost::ActiveHostStatus::DISCONNECTED, |
+ fake_active_host_->GetActiveHostStatus()); |
+ EXPECT_EQ(NetworkConnectionHandler::kErrorConnectCanceled, |
+ GetResultAndReset()); |
+} |
+ |
TEST_F(TetherConnectorTest, TestSuccessfulConnection) { |
- CallTetherDelegate(GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); |
+ CallConnect(GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); |
EXPECT_EQ(ActiveHost::ActiveHostStatus::CONNECTING, |
fake_active_host_->GetActiveHostStatus()); |
EXPECT_EQ(test_devices_[0].GetDeviceId(), |
@@ -398,11 +407,11 @@ TEST_F(TetherConnectorTest, TestSuccessfulConnection) { |
TEST_F(TetherConnectorTest, |
TestNewConnectionAttemptDuringFetch_DifferentDevice) { |
- CallTetherDelegate(GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); |
+ CallConnect(GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); |
// Instead of invoking the pending callbacks on |fake_tether_host_fetcher_|, |
// attempt another connection attempt, this time to another device. |
- CallTetherDelegate(GetTetherNetworkGuid(test_devices_[1].GetDeviceId())); |
+ CallConnect(GetTetherNetworkGuid(test_devices_[1].GetDeviceId())); |
// The first connection attempt should have resulted in a connect canceled |
// error. |
EXPECT_EQ(NetworkConnectionHandler::kErrorConnectCanceled, |
@@ -419,7 +428,7 @@ TEST_F(TetherConnectorTest, |
TEST_F(TetherConnectorTest, |
TestNewConnectionAttemptDuringOperation_DifferentDevice) { |
- CallTetherDelegate(GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); |
+ CallConnect(GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); |
EXPECT_EQ(ActiveHost::ActiveHostStatus::CONNECTING, |
fake_active_host_->GetActiveHostStatus()); |
EXPECT_EQ(test_devices_[0].GetDeviceId(), |
@@ -434,7 +443,7 @@ TEST_F(TetherConnectorTest, |
EXPECT_EQ(1u, fake_operation_factory_->created_operations().size()); |
// Before the created operation replies, start a new connection to device 1. |
- CallTetherDelegate(GetTetherNetworkGuid(test_devices_[1].GetDeviceId())); |
+ CallConnect(GetTetherNetworkGuid(test_devices_[1].GetDeviceId())); |
// The first connection attempt should have resulted in a connect canceled |
// error. |
EXPECT_EQ(NetworkConnectionHandler::kErrorConnectCanceled, |
@@ -467,7 +476,7 @@ TEST_F(TetherConnectorTest, |
TEST_F(TetherConnectorTest, |
TestNewConnectionAttemptDuringWifiConnection_DifferentDevice) { |
- CallTetherDelegate(GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); |
+ CallConnect(GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); |
EXPECT_EQ(ActiveHost::ActiveHostStatus::CONNECTING, |
fake_active_host_->GetActiveHostStatus()); |
EXPECT_EQ(test_devices_[0].GetDeviceId(), |
@@ -485,7 +494,7 @@ TEST_F(TetherConnectorTest, |
// While the connection to the Wi-Fi network is in progress, start a new |
// connection attempt. |
- CallTetherDelegate(GetTetherNetworkGuid(test_devices_[1].GetDeviceId())); |
+ CallConnect(GetTetherNetworkGuid(test_devices_[1].GetDeviceId())); |
// The first connection attempt should have resulted in a connect canceled |
// error. |
EXPECT_EQ(NetworkConnectionHandler::kErrorConnectCanceled, |