| Index: chromeos/components/tether/keep_alive_operation_unittest.cc
 | 
| diff --git a/chromeos/components/tether/keep_alive_operation_unittest.cc b/chromeos/components/tether/keep_alive_operation_unittest.cc
 | 
| index 57e6e467fe4b452e961367977765d7b2b238a3fa..1c47b790848c94e90cdd68edc26967cf508888ad 100644
 | 
| --- a/chromeos/components/tether/keep_alive_operation_unittest.cc
 | 
| +++ b/chromeos/components/tether/keep_alive_operation_unittest.cc
 | 
| @@ -10,6 +10,7 @@
 | 
|  #include "chromeos/components/tether/fake_ble_connection_manager.h"
 | 
|  #include "chromeos/components/tether/message_wrapper.h"
 | 
|  #include "chromeos/components/tether/proto/tether.pb.h"
 | 
| +#include "chromeos/components/tether/proto_test_util.h"
 | 
|  #include "components/cryptauth/remote_device_test_util.h"
 | 
|  #include "testing/gtest/include/gtest/gtest.h"
 | 
|  
 | 
| @@ -27,10 +28,26 @@ class TestObserver : public KeepAliveOperation::Observer {
 | 
|  
 | 
|    bool has_run_callback() { return has_run_callback_; }
 | 
|  
 | 
| -  void OnOperationFinished() override { has_run_callback_ = true; }
 | 
| +  cryptauth::RemoteDevice last_remote_device_received() {
 | 
| +    return last_remote_device_received_;
 | 
| +  }
 | 
| +
 | 
| +  DeviceStatus* last_device_status_received() {
 | 
| +    return last_device_status_received_.get();
 | 
| +  }
 | 
| +
 | 
| +  void OnOperationFinished(
 | 
| +      const cryptauth::RemoteDevice& remote_device,
 | 
| +      std::unique_ptr<DeviceStatus> device_status) override {
 | 
| +    has_run_callback_ = true;
 | 
| +    last_remote_device_received_ = remote_device;
 | 
| +    last_device_status_received_ = std::move(device_status);
 | 
| +  }
 | 
|  
 | 
|   private:
 | 
|    bool has_run_callback_;
 | 
| +  cryptauth::RemoteDevice last_remote_device_received_;
 | 
| +  std::unique_ptr<DeviceStatus> last_device_status_received_;
 | 
|  };
 | 
|  
 | 
|  std::string CreateKeepAliveTickleString() {
 | 
| @@ -38,6 +55,13 @@ std::string CreateKeepAliveTickleString() {
 | 
|    return MessageWrapper(tickle).ToRawMessage();
 | 
|  }
 | 
|  
 | 
| +std::string CreateKeepAliveTickleResponseString() {
 | 
| +  KeepAliveTickleResponse response;
 | 
| +  response.mutable_device_status()->CopyFrom(
 | 
| +      CreateDeviceStatusWithFakeFields());
 | 
| +  return MessageWrapper(response).ToRawMessage();
 | 
| +}
 | 
| +
 | 
|  }  // namespace
 | 
|  
 | 
|  class KeepAliveOperationTest : public testing::Test {
 | 
| @@ -81,10 +105,40 @@ class KeepAliveOperationTest : public testing::Test {
 | 
|    DISALLOW_COPY_AND_ASSIGN(KeepAliveOperationTest);
 | 
|  };
 | 
|  
 | 
| -TEST_F(KeepAliveOperationTest, TestSendsKeepAliveTickle) {
 | 
| +TEST_F(KeepAliveOperationTest, TestSendsKeepAliveTickleAndReceivesResponse) {
 | 
|    EXPECT_FALSE(test_observer_->has_run_callback());
 | 
| +
 | 
|    SimulateDeviceAuthenticationAndVerifyMessageSent();
 | 
| +  EXPECT_FALSE(test_observer_->has_run_callback());
 | 
| +
 | 
| +  fake_ble_connection_manager_->ReceiveMessage(
 | 
| +      test_device_, CreateKeepAliveTickleResponseString());
 | 
| +  EXPECT_TRUE(test_observer_->has_run_callback());
 | 
| +  EXPECT_EQ(test_device_, test_observer_->last_remote_device_received());
 | 
| +  ASSERT_TRUE(test_observer_->last_device_status_received());
 | 
| +  EXPECT_EQ(CreateDeviceStatusWithFakeFields().SerializeAsString(),
 | 
| +            test_observer_->last_device_status_received()->SerializeAsString());
 | 
| +}
 | 
| +
 | 
| +TEST_F(KeepAliveOperationTest, TestCannotConnect) {
 | 
| +  // Simulate the device failing to connect.
 | 
| +  fake_ble_connection_manager_->SetDeviceStatus(
 | 
| +      test_device_, cryptauth::SecureChannel::Status::CONNECTING);
 | 
| +  fake_ble_connection_manager_->SetDeviceStatus(
 | 
| +      test_device_, cryptauth::SecureChannel::Status::DISCONNECTED);
 | 
| +  fake_ble_connection_manager_->SetDeviceStatus(
 | 
| +      test_device_, cryptauth::SecureChannel::Status::CONNECTING);
 | 
| +  fake_ble_connection_manager_->SetDeviceStatus(
 | 
| +      test_device_, cryptauth::SecureChannel::Status::DISCONNECTED);
 | 
| +  fake_ble_connection_manager_->SetDeviceStatus(
 | 
| +      test_device_, cryptauth::SecureChannel::Status::CONNECTING);
 | 
| +  fake_ble_connection_manager_->SetDeviceStatus(
 | 
| +      test_device_, cryptauth::SecureChannel::Status::DISCONNECTED);
 | 
| +
 | 
| +  // The maximum number of connection failures has occurred.
 | 
|    EXPECT_TRUE(test_observer_->has_run_callback());
 | 
| +  EXPECT_EQ(test_device_, test_observer_->last_remote_device_received());
 | 
| +  EXPECT_FALSE(test_observer_->last_device_status_received());
 | 
|  }
 | 
|  
 | 
|  }  // namespace tether
 | 
| 
 |