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 1398d2aa9986ace6df9d43ed59884c68d6466ff1..0a955d8e459c9807e9a14ad11bb56d66fa79eda8 100644 |
--- a/chromeos/components/tether/tether_connector_unittest.cc |
+++ b/chromeos/components/tether/tether_connector_unittest.cc |
@@ -14,6 +14,7 @@ |
#include "chromeos/components/tether/fake_notification_presenter.h" |
#include "chromeos/components/tether/fake_tether_host_fetcher.h" |
#include "chromeos/components/tether/fake_wifi_hotspot_connector.h" |
+#include "chromeos/components/tether/mock_host_connection_metrics_logger.h" |
#include "chromeos/components/tether/mock_tether_host_response_recorder.h" |
#include "chromeos/components/tether/tether_connector.h" |
#include "chromeos/dbus/dbus_thread_manager.h" |
@@ -27,6 +28,8 @@ |
#include "testing/gtest/include/gtest/gtest.h" |
#include "third_party/cros_system_api/dbus/shill/dbus-constants.h" |
+using testing::StrictMock; |
+ |
namespace chromeos { |
namespace tether { |
@@ -146,6 +149,8 @@ class TetherConnectorTest : public NetworkStateTest { |
fake_host_scan_cache_ = base::MakeUnique<FakeHostScanCache>(); |
fake_notification_presenter_ = |
base::MakeUnique<FakeNotificationPresenter>(); |
+ mock_host_connection_metrics_logger_ = |
+ base::WrapUnique(new StrictMock<MockHostConnectionMetricsLogger>); |
result_.clear(); |
@@ -155,7 +160,8 @@ class TetherConnectorTest : public NetworkStateTest { |
fake_ble_connection_manager_.get(), |
mock_tether_host_response_recorder_.get(), |
device_id_tether_network_guid_map_.get(), fake_host_scan_cache_.get(), |
- fake_notification_presenter_.get())); |
+ fake_notification_presenter_.get(), |
+ mock_host_connection_metrics_logger_.get())); |
SetUpTetherNetworks(); |
} |
@@ -225,6 +231,56 @@ class TetherConnectorTest : public NetworkStateTest { |
base::Unretained(this))); |
} |
+ void TestConnectTetheringOperationFails( |
Kyle Horimoto
2017/07/12 17:23:21
VerifyConnectTetheringOperationFails
Ryan Hansberry
2017/07/12 17:51:17
Done.
|
+ ConnectTetheringResponse_ResponseCode response_code, |
+ bool setup_required, |
+ HostConnectionMetricsLogger::ConnectionToHostResult expected_event_type) { |
+ EXPECT_CALL(*mock_host_connection_metrics_logger_, |
+ RecordConnectionToHostResult(expected_event_type)); |
+ |
+ EXPECT_FALSE( |
+ fake_notification_presenter_->is_setup_required_notification_shown()); |
+ |
+ cryptauth::RemoteDevice test_device = test_devices_[setup_required ? 1 : 0]; |
Kyle Horimoto
2017/07/12 17:23:21
It's hard to tell why setup_required determines th
Ryan Hansberry
2017/07/12 17:51:17
Done.
|
+ |
+ CallConnect(GetTetherNetworkGuid(test_device.GetDeviceId())); |
+ EXPECT_EQ(ActiveHost::ActiveHostStatus::CONNECTING, |
+ fake_active_host_->GetActiveHostStatus()); |
+ EXPECT_EQ(test_device.GetDeviceId(), |
+ fake_active_host_->GetActiveHostDeviceId()); |
+ EXPECT_EQ(GetTetherNetworkGuid(test_device.GetDeviceId()), |
+ fake_active_host_->GetTetherNetworkGuid()); |
+ EXPECT_TRUE(fake_active_host_->GetWifiNetworkGuid().empty()); |
+ |
+ EXPECT_EQ( |
+ setup_required, |
+ fake_notification_presenter_->is_setup_required_notification_shown()); |
+ |
+ fake_tether_host_fetcher_->InvokePendingCallbacks(); |
+ |
+ EXPECT_EQ( |
+ setup_required, |
+ fake_notification_presenter_->is_setup_required_notification_shown()); |
+ EXPECT_EQ( |
+ setup_required, |
+ fake_operation_factory_->created_operations()[0]->setup_required()); |
+ |
+ // 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()); |
+ fake_operation_factory_->created_operations()[0]->SendFailedResponse( |
+ response_code); |
+ |
+ EXPECT_FALSE( |
+ fake_notification_presenter_->is_setup_required_notification_shown()); |
+ |
+ // The failure should have resulted in the host being disconnected. |
+ EXPECT_EQ(ActiveHost::ActiveHostStatus::DISCONNECTED, |
+ fake_active_host_->GetActiveHostStatus()); |
+ EXPECT_EQ(NetworkConnectionHandler::kErrorConnectFailed, |
+ GetResultAndReset()); |
+ } |
+ |
std::string GetResultAndReset() { |
std::string result; |
result.swap(result_); |
@@ -246,6 +302,8 @@ class TetherConnectorTest : public NetworkStateTest { |
device_id_tether_network_guid_map_; |
std::unique_ptr<FakeHostScanCache> fake_host_scan_cache_; |
std::unique_ptr<FakeNotificationPresenter> fake_notification_presenter_; |
+ std::unique_ptr<StrictMock<MockHostConnectionMetricsLogger>> |
+ mock_host_connection_metrics_logger_; |
std::string result_; |
@@ -256,6 +314,12 @@ class TetherConnectorTest : public NetworkStateTest { |
}; |
TEST_F(TetherConnectorTest, TestCannotFetchDevice) { |
+ EXPECT_CALL( |
+ *mock_host_connection_metrics_logger_, |
+ RecordConnectionToHostResult( |
+ HostConnectionMetricsLogger::ConnectionToHostResult:: |
+ CONNECTION_RESULT_FAILURE_CLIENT_CONNECTION_INTERNAL_ERROR)); |
+ |
// Base64-encoded version of "nonexistentDeviceId". |
const char kNonexistentDeviceId[] = "bm9uZXhpc3RlbnREZXZpY2VJZA=="; |
@@ -277,6 +341,12 @@ TEST_F(TetherConnectorTest, TestCannotFetchDevice) { |
} |
TEST_F(TetherConnectorTest, TestCancelWhileOperationActive) { |
+ EXPECT_CALL( |
+ *mock_host_connection_metrics_logger_, |
+ RecordConnectionToHostResult( |
+ HostConnectionMetricsLogger::ConnectionToHostResult:: |
+ CONNECTION_RESULT_FAILURE_CLIENT_CONNECTION_CANCELED_BY_USER)); |
+ |
CallConnect(GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); |
EXPECT_EQ(ActiveHost::ActiveHostStatus::CONNECTING, |
fake_active_host_->GetActiveHostStatus()); |
@@ -302,60 +372,61 @@ TEST_F(TetherConnectorTest, TestCancelWhileOperationActive) { |
GetResultAndReset()); |
} |
-TEST_F(TetherConnectorTest, TestConnectTetheringOperationFails) { |
- 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()); |
- EXPECT_FALSE( |
- fake_operation_factory_->created_operations()[0]->setup_required()); |
- fake_operation_factory_->created_operations()[0]->SendFailedResponse( |
+TEST_F(TetherConnectorTest, |
+ TestConnectTetheringOperationFails_SetupNotRequired) { |
+ TestConnectTetheringOperationFails( |
ConnectTetheringResponse_ResponseCode:: |
- ConnectTetheringResponse_ResponseCode_UNKNOWN_ERROR); |
- |
- // The failure should have resulted in the host being disconnected. |
- EXPECT_EQ(ActiveHost::ActiveHostStatus::DISCONNECTED, |
- fake_active_host_->GetActiveHostStatus()); |
- EXPECT_EQ(NetworkConnectionHandler::kErrorConnectFailed, GetResultAndReset()); |
+ ConnectTetheringResponse_ResponseCode_UNKNOWN_ERROR, |
+ false /* setup_required */, |
+ HostConnectionMetricsLogger::ConnectionToHostResult:: |
+ CONNECTION_RESULT_FAILURE_UNKNOWN_ERROR); |
} |
TEST_F(TetherConnectorTest, TestConnectTetheringOperationFails_SetupRequired) { |
- EXPECT_FALSE( |
- fake_notification_presenter_->is_setup_required_notification_shown()); |
- |
- CallConnect(GetTetherNetworkGuid(test_devices_[1].GetDeviceId())); |
- |
- EXPECT_TRUE( |
- fake_notification_presenter_->is_setup_required_notification_shown()); |
- |
- fake_tether_host_fetcher_->InvokePendingCallbacks(); |
- |
- EXPECT_TRUE( |
- fake_notification_presenter_->is_setup_required_notification_shown()); |
- EXPECT_TRUE( |
- fake_operation_factory_->created_operations()[0]->setup_required()); |
+ TestConnectTetheringOperationFails( |
+ ConnectTetheringResponse_ResponseCode:: |
+ ConnectTetheringResponse_ResponseCode_UNKNOWN_ERROR, |
+ true /* setup_required */, |
+ HostConnectionMetricsLogger::ConnectionToHostResult:: |
+ CONNECTION_RESULT_FAILURE_UNKNOWN_ERROR); |
+} |
- fake_operation_factory_->created_operations()[0]->SendFailedResponse( |
+TEST_F(TetherConnectorTest, |
+ TestConnectTetheringOperationFails_ProvisioningFailed) { |
+ TestConnectTetheringOperationFails( |
ConnectTetheringResponse_ResponseCode:: |
- ConnectTetheringResponse_ResponseCode_UNKNOWN_ERROR); |
+ ConnectTetheringResponse_ResponseCode_PROVISIONING_FAILED, |
+ false /* setup_required */, |
+ HostConnectionMetricsLogger::ConnectionToHostResult:: |
+ CONNECTION_RESULT_PROVISIONING_FAILED); |
+} |
- EXPECT_FALSE( |
- fake_notification_presenter_->is_setup_required_notification_shown()); |
+TEST_F(TetherConnectorTest, |
+ TestConnectTetheringOperationFails_TetheringTimeout_SetupNotRequired) { |
+ TestConnectTetheringOperationFails( |
+ ConnectTetheringResponse_ResponseCode:: |
+ ConnectTetheringResponse_ResponseCode_TETHERING_TIMEOUT, |
+ false /* setup_required */, |
+ HostConnectionMetricsLogger::ConnectionToHostResult:: |
+ CONNECTION_RESULT_FAILURE_TETHERING_TIMED_OUT_FIRST_TIME_SETUP_WAS_NOT_REQUIRED); |
+} |
- EXPECT_EQ(NetworkConnectionHandler::kErrorConnectFailed, GetResultAndReset()); |
+TEST_F(TetherConnectorTest, |
+ TestConnectTetheringOperationFails_TetheringTimeout_SetupRequired) { |
+ TestConnectTetheringOperationFails( |
+ ConnectTetheringResponse_ResponseCode:: |
+ ConnectTetheringResponse_ResponseCode_TETHERING_TIMEOUT, |
+ true /* setup_required */, |
+ HostConnectionMetricsLogger::ConnectionToHostResult:: |
+ CONNECTION_RESULT_FAILURE_TETHERING_TIMED_OUT_FIRST_TIME_SETUP_WAS_REQUIRED); |
} |
TEST_F(TetherConnectorTest, TestConnectingToWifiFails) { |
+ EXPECT_CALL(*mock_host_connection_metrics_logger_, |
+ RecordConnectionToHostResult( |
+ HostConnectionMetricsLogger::ConnectionToHostResult:: |
+ CONNECTION_RESULT_FAILURE_CLIENT_CONNECTION_TIMEOUT)); |
+ |
CallConnect(GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); |
EXPECT_EQ(ActiveHost::ActiveHostStatus::CONNECTING, |
fake_active_host_->GetActiveHostStatus()); |
@@ -392,6 +463,12 @@ TEST_F(TetherConnectorTest, TestConnectingToWifiFails) { |
} |
TEST_F(TetherConnectorTest, TestCancelWhileConnectingToWifi) { |
+ EXPECT_CALL( |
+ *mock_host_connection_metrics_logger_, |
+ RecordConnectionToHostResult( |
+ HostConnectionMetricsLogger::ConnectionToHostResult:: |
+ CONNECTION_RESULT_FAILURE_CLIENT_CONNECTION_CANCELED_BY_USER)); |
+ |
CallConnect(GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); |
EXPECT_EQ(ActiveHost::ActiveHostStatus::CONNECTING, |
fake_active_host_->GetActiveHostStatus()); |
@@ -422,6 +499,11 @@ TEST_F(TetherConnectorTest, TestCancelWhileConnectingToWifi) { |
} |
TEST_F(TetherConnectorTest, TestSuccessfulConnection) { |
+ EXPECT_CALL(*mock_host_connection_metrics_logger_, |
+ RecordConnectionToHostResult( |
+ HostConnectionMetricsLogger::ConnectionToHostResult:: |
+ CONNECTION_RESULT_SUCCESS)); |
+ |
CallConnect(GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); |
EXPECT_EQ(ActiveHost::ActiveHostStatus::CONNECTING, |
fake_active_host_->GetActiveHostStatus()); |
@@ -466,6 +548,11 @@ TEST_F(TetherConnectorTest, TestSuccessfulConnection) { |
} |
TEST_F(TetherConnectorTest, TestSuccessfulConnection_SetupRequired) { |
+ EXPECT_CALL(*mock_host_connection_metrics_logger_, |
+ RecordConnectionToHostResult( |
+ HostConnectionMetricsLogger::ConnectionToHostResult:: |
+ CONNECTION_RESULT_SUCCESS)); |
+ |
EXPECT_FALSE( |
fake_notification_presenter_->is_setup_required_notification_shown()); |
@@ -497,6 +584,12 @@ TEST_F(TetherConnectorTest, TestSuccessfulConnection_SetupRequired) { |
TEST_F(TetherConnectorTest, |
TestNewConnectionAttemptDuringFetch_DifferentDevice) { |
+ EXPECT_CALL( |
+ *mock_host_connection_metrics_logger_, |
+ RecordConnectionToHostResult( |
+ HostConnectionMetricsLogger::ConnectionToHostResult:: |
+ CONNECTION_RESULT_FAILURE_CLIENT_CONNECTION_CANCELED_BY_USER)); |
+ |
CallConnect(GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); |
// Instead of invoking the pending callbacks on |fake_tether_host_fetcher_|, |
@@ -518,6 +611,12 @@ TEST_F(TetherConnectorTest, |
TEST_F(TetherConnectorTest, |
TestNewConnectionAttemptDuringOperation_DifferentDevice) { |
+ EXPECT_CALL( |
+ *mock_host_connection_metrics_logger_, |
+ RecordConnectionToHostResult( |
+ HostConnectionMetricsLogger::ConnectionToHostResult:: |
+ CONNECTION_RESULT_FAILURE_CLIENT_CONNECTION_CANCELED_BY_USER)); |
+ |
CallConnect(GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); |
EXPECT_EQ(ActiveHost::ActiveHostStatus::CONNECTING, |
fake_active_host_->GetActiveHostStatus()); |
@@ -570,6 +669,12 @@ TEST_F(TetherConnectorTest, |
TEST_F(TetherConnectorTest, |
TestNewConnectionAttemptDuringWifiConnection_DifferentDevice) { |
+ EXPECT_CALL( |
+ *mock_host_connection_metrics_logger_, |
+ RecordConnectionToHostResult( |
+ HostConnectionMetricsLogger::ConnectionToHostResult:: |
+ CONNECTION_RESULT_FAILURE_CLIENT_CONNECTION_CANCELED_BY_USER)); |
+ |
CallConnect(GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); |
EXPECT_EQ(ActiveHost::ActiveHostStatus::CONNECTING, |
fake_active_host_->GetActiveHostStatus()); |