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

Unified Diff: components/proximity_auth/ble/bluetooth_low_energy_connection_unittest.cc

Issue 2843443003: [EasyUnlock] Delete unused BLE code. (Closed)
Patch Set: remove BUILD file Created 3 years, 8 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: components/proximity_auth/ble/bluetooth_low_energy_connection_unittest.cc
diff --git a/components/proximity_auth/ble/bluetooth_low_energy_connection_unittest.cc b/components/proximity_auth/ble/bluetooth_low_energy_connection_unittest.cc
deleted file mode 100644
index 2c529ffef3bbce857d5111de37d7969f7913b3da..0000000000000000000000000000000000000000
--- a/components/proximity_auth/ble/bluetooth_low_energy_connection_unittest.cc
+++ /dev/null
@@ -1,720 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/proximity_auth/ble/bluetooth_low_energy_connection.h"
-
-#include <stdint.h>
-
-#include <memory>
-#include <utility>
-
-#include "base/bind.h"
-#include "base/macros.h"
-#include "base/memory/ptr_util.h"
-#include "base/memory/ref_counted.h"
-#include "base/message_loop/message_loop.h"
-#include "base/run_loop.h"
-#include "base/test/test_simple_task_runner.h"
-#include "components/cryptauth/ble/bluetooth_low_energy_characteristics_finder.h"
-#include "components/cryptauth/bluetooth_throttler.h"
-#include "components/cryptauth/connection_finder.h"
-#include "components/cryptauth/cryptauth_test_util.h"
-#include "components/cryptauth/remote_device.h"
-#include "components/cryptauth/wire_message.h"
-#include "device/bluetooth/bluetooth_adapter_factory.h"
-#include "device/bluetooth/bluetooth_remote_gatt_characteristic.h"
-#include "device/bluetooth/bluetooth_uuid.h"
-#include "device/bluetooth/test/mock_bluetooth_adapter.h"
-#include "device/bluetooth/test/mock_bluetooth_device.h"
-#include "device/bluetooth/test/mock_bluetooth_discovery_session.h"
-#include "device/bluetooth/test/mock_bluetooth_gatt_characteristic.h"
-#include "device/bluetooth/test/mock_bluetooth_gatt_connection.h"
-#include "device/bluetooth/test/mock_bluetooth_gatt_notify_session.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using testing::_;
-using testing::AtLeast;
-using testing::NiceMock;
-using testing::Return;
-using testing::StrictMock;
-using testing::SaveArg;
-
-namespace proximity_auth {
-namespace {
-
-const char kServiceUUID[] = "DEADBEEF-CAFE-FEED-FOOD-D15EA5EBEEEF";
-const char kToPeripheralCharUUID[] = "977c6674-1239-4e72-993b-502369b8bb5a";
-const char kFromPeripheralCharUUID[] = "f4b904a2-a030-43b3-98a8-221c536c03cb";
-
-const char kServiceID[] = "service id";
-const char kToPeripheralCharID[] = "to peripheral char id";
-const char kFromPeripheralCharID[] = "from peripheral char id";
-
-const char kTestFeature[] = "testFeature";
-
-const device::BluetoothRemoteGattCharacteristic::Properties
- kCharacteristicProperties =
- device::BluetoothRemoteGattCharacteristic::PROPERTY_BROADCAST |
- device::BluetoothRemoteGattCharacteristic::PROPERTY_READ |
- device::BluetoothRemoteGattCharacteristic::
- PROPERTY_WRITE_WITHOUT_RESPONSE |
- device::BluetoothRemoteGattCharacteristic::PROPERTY_INDICATE;
-
-const int kMaxNumberOfTries = 3;
-
-class MockBluetoothThrottler : public cryptauth::BluetoothThrottler {
- public:
- MockBluetoothThrottler() {}
- ~MockBluetoothThrottler() override {}
-
- MOCK_CONST_METHOD0(GetDelay, base::TimeDelta());
- MOCK_METHOD1(OnConnection, void(cryptauth::Connection* connection));
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockBluetoothThrottler);
-};
-
-class MockBluetoothLowEnergyCharacteristicsFinder
- : public cryptauth::BluetoothLowEnergyCharacteristicsFinder {
- public:
- MockBluetoothLowEnergyCharacteristicsFinder() {}
- ~MockBluetoothLowEnergyCharacteristicsFinder() override {}
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockBluetoothLowEnergyCharacteristicsFinder);
-};
-
-class MockBluetoothLowEnergyConnection : public BluetoothLowEnergyConnection {
- public:
- MockBluetoothLowEnergyConnection(
- const cryptauth::RemoteDevice& remote_device,
- scoped_refptr<device::BluetoothAdapter> adapter,
- const device::BluetoothUUID remote_service_uuid,
- cryptauth::BluetoothThrottler* bluetooth_throttler,
- int max_number_of_write_attempts)
- : BluetoothLowEnergyConnection(remote_device,
- adapter,
- remote_service_uuid,
- bluetooth_throttler,
- max_number_of_write_attempts) {}
-
- ~MockBluetoothLowEnergyConnection() override {}
-
- MOCK_METHOD2(CreateCharacteristicsFinder,
- cryptauth::BluetoothLowEnergyCharacteristicsFinder*(
- const cryptauth::BluetoothLowEnergyCharacteristicsFinder::
- SuccessCallback& success,
- const cryptauth::BluetoothLowEnergyCharacteristicsFinder::
- ErrorCallback& error));
-
- MOCK_METHOD2(OnDidSendMessage,
- void(const cryptauth::WireMessage& message, bool success));
- MOCK_METHOD1(OnBytesReceived, void(const std::string& bytes));
-
- // Exposing inherited protected methods for testing.
- using BluetoothLowEnergyConnection::GattCharacteristicValueChanged;
- using BluetoothLowEnergyConnection::SetTaskRunnerForTesting;
-
- // Exposing inherited protected fields for testing.
- using BluetoothLowEnergyConnection::status;
- using BluetoothLowEnergyConnection::sub_status;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockBluetoothLowEnergyConnection);
-};
-
-} // namespace
-
-class ProximityAuthBluetoothLowEnergyConnectionTest : public testing::Test {
- public:
- ProximityAuthBluetoothLowEnergyConnectionTest()
- : adapter_(new NiceMock<device::MockBluetoothAdapter>),
- remote_device_(cryptauth::CreateLERemoteDeviceForTest()),
- service_uuid_(device::BluetoothUUID(kServiceUUID)),
- to_peripheral_char_uuid_(device::BluetoothUUID(kToPeripheralCharUUID)),
- from_peripheral_char_uuid_(
- device::BluetoothUUID(kFromPeripheralCharUUID)),
- notify_session_alias_(NULL),
- bluetooth_throttler_(new NiceMock<MockBluetoothThrottler>),
- task_runner_(new base::TestSimpleTaskRunner) {}
-
- void SetUp() override {
- device_ = base::MakeUnique<NiceMock<device::MockBluetoothDevice>>(
- adapter_.get(), 0, cryptauth::kTestRemoteDeviceName,
- cryptauth::kTestRemoteDeviceBluetoothAddress, false, false);
-
- service_ = base::MakeUnique<NiceMock<device::MockBluetoothGattService>>(
- device_.get(), kServiceID, service_uuid_, true, false);
- to_peripheral_char_ =
- base::MakeUnique<NiceMock<device::MockBluetoothGattCharacteristic>>(
- service_.get(), kToPeripheralCharID, to_peripheral_char_uuid_,
- false, kCharacteristicProperties,
- device::BluetoothRemoteGattCharacteristic::PERMISSION_NONE);
-
- from_peripheral_char_ =
- base::MakeUnique<NiceMock<device::MockBluetoothGattCharacteristic>>(
- service_.get(), kFromPeripheralCharID, from_peripheral_char_uuid_,
- false, kCharacteristicProperties,
- device::BluetoothRemoteGattCharacteristic::PERMISSION_NONE);
-
- device::BluetoothAdapterFactory::SetAdapterForTesting(adapter_);
-
- std::vector<const device::BluetoothDevice*> devices;
- devices.push_back(device_.get());
- ON_CALL(*adapter_, GetDevices()).WillByDefault(Return(devices));
- ON_CALL(*adapter_, GetDevice(cryptauth::kTestRemoteDeviceBluetoothAddress))
- .WillByDefault(Return(device_.get()));
- ON_CALL(*device_, GetGattService(kServiceID))
- .WillByDefault(Return(service_.get()));
- ON_CALL(*service_, GetCharacteristic(kFromPeripheralCharID))
- .WillByDefault(Return(from_peripheral_char_.get()));
- ON_CALL(*service_, GetCharacteristic(kToPeripheralCharID))
- .WillByDefault(Return(to_peripheral_char_.get()));
- }
-
- // Creates a BluetoothLowEnergyConnection and verifies it's in DISCONNECTED
- // state.
- std::unique_ptr<MockBluetoothLowEnergyConnection> CreateConnection() {
- EXPECT_CALL(*adapter_, AddObserver(_));
- EXPECT_CALL(*adapter_, RemoveObserver(_));
-
- std::unique_ptr<MockBluetoothLowEnergyConnection> connection(
- new MockBluetoothLowEnergyConnection(
- remote_device_, adapter_, service_uuid_, bluetooth_throttler_.get(),
- kMaxNumberOfTries));
-
- EXPECT_EQ(connection->sub_status(),
- BluetoothLowEnergyConnection::SubStatus::DISCONNECTED);
- EXPECT_EQ(connection->status(), cryptauth::Connection::DISCONNECTED);
-
- connection->SetTaskRunnerForTesting(task_runner_);
-
- return connection;
- }
-
- // Transitions |connection| from DISCONNECTED to WAITING_CHARACTERISTICS
- // state, without an existing GATT connection.
- void ConnectGatt(MockBluetoothLowEnergyConnection* connection) {
- // Preparing |connection| for a CreateGattConnection call.
- EXPECT_CALL(*device_, CreateGattConnection(_, _))
- .WillOnce(DoAll(SaveArg<0>(&create_gatt_connection_success_callback_),
- SaveArg<1>(&create_gatt_connection_error_callback_)));
-
- // No throttling by default
- EXPECT_CALL(*bluetooth_throttler_, GetDelay())
- .WillOnce(Return(base::TimeDelta()));
-
- connection->Connect();
-
- EXPECT_EQ(connection->sub_status(),
- BluetoothLowEnergyConnection::SubStatus::WAITING_GATT_CONNECTION);
- EXPECT_EQ(connection->status(), cryptauth::Connection::IN_PROGRESS);
-
- // Preparing |connection| to run |create_gatt_connection_success_callback_|.
- EXPECT_FALSE(create_gatt_connection_error_callback_.is_null());
- ASSERT_FALSE(create_gatt_connection_success_callback_.is_null());
- EXPECT_CALL(*connection, CreateCharacteristicsFinder(_, _))
- .WillOnce(DoAll(
- SaveArg<0>(&characteristics_finder_success_callback_),
- SaveArg<1>(&characteristics_finder_error_callback_),
- Return(new NiceMock<MockBluetoothLowEnergyCharacteristicsFinder>)));
-
- create_gatt_connection_success_callback_.Run(
- base::MakeUnique<NiceMock<device::MockBluetoothGattConnection>>(
- adapter_, cryptauth::kTestRemoteDeviceBluetoothAddress));
-
- EXPECT_EQ(connection->sub_status(),
- BluetoothLowEnergyConnection::SubStatus::WAITING_CHARACTERISTICS);
- EXPECT_EQ(connection->status(), cryptauth::Connection::IN_PROGRESS);
- }
-
- // Transitions |connection| from WAITING_CHARACTERISTICS to
- // WAITING_NOTIFY_SESSION state.
- void CharacteristicsFound(MockBluetoothLowEnergyConnection* connection) {
- EXPECT_CALL(*from_peripheral_char_, StartNotifySession(_, _))
- .WillOnce(DoAll(SaveArg<0>(&notify_session_success_callback_),
- SaveArg<1>(&notify_session_error_callback_)));
- EXPECT_FALSE(characteristics_finder_error_callback_.is_null());
- ASSERT_FALSE(characteristics_finder_success_callback_.is_null());
-
- characteristics_finder_success_callback_.Run(
- {service_uuid_, kServiceID},
- {to_peripheral_char_uuid_, kToPeripheralCharID},
- {from_peripheral_char_uuid_, kFromPeripheralCharID});
-
- EXPECT_EQ(connection->sub_status(),
- BluetoothLowEnergyConnection::SubStatus::WAITING_NOTIFY_SESSION);
- EXPECT_EQ(connection->status(), cryptauth::Connection::IN_PROGRESS);
- }
-
- // Transitions |connection| from WAITING_NOTIFY_SESSION to
- // WAITING_RESPONSE_SIGNAL state.
- void NotifySessionStarted(MockBluetoothLowEnergyConnection* connection) {
- EXPECT_CALL(*to_peripheral_char_, WriteRemoteCharacteristic(_, _, _))
- .WillOnce(
- DoAll(SaveArg<0>(&last_value_written_on_to_peripheral_char_),
- SaveArg<1>(&write_remote_characteristic_success_callback_),
- SaveArg<2>(&write_remote_characteristic_error_callback_)));
- EXPECT_FALSE(notify_session_error_callback_.is_null());
- ASSERT_FALSE(notify_session_success_callback_.is_null());
-
- // Store an alias for the notify session passed |connection|.
- std::unique_ptr<device::MockBluetoothGattNotifySession> notify_session(
- new NiceMock<device::MockBluetoothGattNotifySession>(
- to_peripheral_char_->GetWeakPtr()));
- notify_session_alias_ = notify_session.get();
-
- notify_session_success_callback_.Run(std::move(notify_session));
- task_runner_->RunUntilIdle();
-
- EXPECT_EQ(connection->sub_status(),
- BluetoothLowEnergyConnection::SubStatus::WAITING_RESPONSE_SIGNAL);
- EXPECT_EQ(connection->status(), cryptauth::Connection::IN_PROGRESS);
- }
-
- // Transitions |connection| from WAITING_RESPONSE_SIGNAL to CONNECTED state.
- void ResponseSignalReceived(MockBluetoothLowEnergyConnection* connection) {
- // Written value contains only the
- // BluetoothLowEneryConnection::ControlSignal::kInviteToConnectSignal.
- const std::vector<uint8_t> kInviteToConnectSignal = ToByteVector(
- static_cast<uint32_t>(BluetoothLowEnergyConnection::ControlSignal::
- kInviteToConnectSignal));
- EXPECT_EQ(last_value_written_on_to_peripheral_char_,
- kInviteToConnectSignal);
-
- EXPECT_CALL(*connection, OnDidSendMessage(_, _)).Times(0);
- RunWriteCharacteristicSuccessCallback();
-
- // Received the
- // BluetoothLowEneryConnection::ControlSignal::kInvitationResponseSignal.
- const std::vector<uint8_t> kInvitationResponseSignal = ToByteVector(
- static_cast<uint32_t>(BluetoothLowEnergyConnection::ControlSignal::
- kInvitationResponseSignal));
- connection->GattCharacteristicValueChanged(
- adapter_.get(), from_peripheral_char_.get(), kInvitationResponseSignal);
-
- EXPECT_EQ(connection->sub_status(),
- BluetoothLowEnergyConnection::SubStatus::CONNECTED);
- EXPECT_EQ(connection->status(), cryptauth::Connection::CONNECTED);
- }
-
- // Transitions |connection| to a DISCONNECTED state regardless of its initial
- // state.
- void Disconnect(MockBluetoothLowEnergyConnection* connection) {
- // A notify session was previously set.
- if (notify_session_alias_)
- EXPECT_CALL(*notify_session_alias_, Stop(_));
-
- connection->Disconnect();
-
- EXPECT_EQ(connection->sub_status(),
- BluetoothLowEnergyConnection::SubStatus::DISCONNECTED);
- EXPECT_EQ(connection->status(), cryptauth::Connection::DISCONNECTED);
- }
-
- void InitializeConnection(MockBluetoothLowEnergyConnection* connection) {
- ConnectGatt(connection);
- CharacteristicsFound(connection);
- NotifySessionStarted(connection);
- ResponseSignalReceived(connection);
- }
-
- void RunWriteCharacteristicSuccessCallback() {
- EXPECT_FALSE(write_remote_characteristic_error_callback_.is_null());
- ASSERT_FALSE(write_remote_characteristic_success_callback_.is_null());
- write_remote_characteristic_success_callback_.Run();
- }
-
- std::vector<uint8_t> CreateSendSignalWithSize(int message_size) {
- std::vector<uint8_t> value = ToByteVector(static_cast<uint32_t>(
- BluetoothLowEnergyConnection::ControlSignal::kSendSignal));
- std::vector<uint8_t> size =
- ToByteVector(static_cast<uint32_t>(message_size));
- value.insert(value.end(), size.begin(), size.end());
- return value;
- }
-
- std::vector<uint8_t> CreateFirstCharacteristicValue(
- const std::string& message,
- int size) {
- std::vector<uint8_t> value(CreateSendSignalWithSize(size));
- std::vector<uint8_t> bytes(message.begin(), message.end());
- value.insert(value.end(), bytes.begin(), bytes.end());
- return value;
- }
-
- std::vector<uint8_t> ToByteVector(uint32_t value) {
- std::vector<uint8_t> bytes(4, 0);
- bytes[0] = static_cast<uint8_t>(value);
- bytes[1] = static_cast<uint8_t>(value >> 8);
- bytes[2] = static_cast<uint8_t>(value >> 16);
- bytes[3] = static_cast<uint8_t>(value >> 24);
- return bytes;
- }
-
- protected:
- scoped_refptr<device::MockBluetoothAdapter> adapter_;
- cryptauth::RemoteDevice remote_device_;
- device::BluetoothUUID service_uuid_;
- device::BluetoothUUID to_peripheral_char_uuid_;
- device::BluetoothUUID from_peripheral_char_uuid_;
- std::unique_ptr<device::MockBluetoothDevice> device_;
- std::unique_ptr<device::MockBluetoothGattService> service_;
- std::unique_ptr<device::MockBluetoothGattCharacteristic> to_peripheral_char_;
- std::unique_ptr<device::MockBluetoothGattCharacteristic>
- from_peripheral_char_;
- std::vector<uint8_t> last_value_written_on_to_peripheral_char_;
- device::MockBluetoothGattNotifySession* notify_session_alias_;
- std::unique_ptr<MockBluetoothThrottler> bluetooth_throttler_;
- scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
- base::MessageLoop message_loop_;
-
- // Callbacks
- device::BluetoothDevice::GattConnectionCallback
- create_gatt_connection_success_callback_;
- device::BluetoothDevice::ConnectErrorCallback
- create_gatt_connection_error_callback_;
-
- cryptauth::BluetoothLowEnergyCharacteristicsFinder::SuccessCallback
- characteristics_finder_success_callback_;
- cryptauth::BluetoothLowEnergyCharacteristicsFinder::ErrorCallback
- characteristics_finder_error_callback_;
-
- device::BluetoothRemoteGattCharacteristic::NotifySessionCallback
- notify_session_success_callback_;
- device::BluetoothRemoteGattCharacteristic::ErrorCallback
- notify_session_error_callback_;
-
- base::Closure write_remote_characteristic_success_callback_;
- device::BluetoothRemoteGattCharacteristic::ErrorCallback
- write_remote_characteristic_error_callback_;
-};
-
-TEST_F(ProximityAuthBluetoothLowEnergyConnectionTest,
- CreateAndDestroyWithouthConnectCallDoesntCrash) {
- BluetoothLowEnergyConnection connection(
- remote_device_, adapter_, service_uuid_, bluetooth_throttler_.get(),
- kMaxNumberOfTries);
-}
-
-TEST_F(ProximityAuthBluetoothLowEnergyConnectionTest,
- Disconect_WithoutConnectDoesntCrash) {
- std::unique_ptr<MockBluetoothLowEnergyConnection> connection(
- CreateConnection());
- Disconnect(connection.get());
-}
-
-TEST_F(ProximityAuthBluetoothLowEnergyConnectionTest, Connect_Success) {
- std::unique_ptr<MockBluetoothLowEnergyConnection> connection(
- CreateConnection());
- ConnectGatt(connection.get());
- CharacteristicsFound(connection.get());
- NotifySessionStarted(connection.get());
- ResponseSignalReceived(connection.get());
-}
-
-TEST_F(ProximityAuthBluetoothLowEnergyConnectionTest,
- Connect_Success_Disconnect) {
- std::unique_ptr<MockBluetoothLowEnergyConnection> connection(
- CreateConnection());
- InitializeConnection(connection.get());
- Disconnect(connection.get());
-}
-
-TEST_F(ProximityAuthBluetoothLowEnergyConnectionTest,
- Connect_Incomplete_Disconnect_FromWaitingCharacteristicsState) {
- std::unique_ptr<MockBluetoothLowEnergyConnection> connection(
- CreateConnection());
- ConnectGatt(connection.get());
- Disconnect(connection.get());
-}
-
-TEST_F(ProximityAuthBluetoothLowEnergyConnectionTest,
- Connect_Incomplete_Disconnect_FromWaitingNotifySessionState) {
- std::unique_ptr<MockBluetoothLowEnergyConnection> connection(
- CreateConnection());
- ConnectGatt(connection.get());
- CharacteristicsFound(connection.get());
- Disconnect(connection.get());
-}
-
-TEST_F(ProximityAuthBluetoothLowEnergyConnectionTest,
- Connect_Incomplete_Disconnect_FromWaitingResponseSignalState) {
- std::unique_ptr<MockBluetoothLowEnergyConnection> connection(
- CreateConnection());
- ConnectGatt(connection.get());
- CharacteristicsFound(connection.get());
- NotifySessionStarted(connection.get());
- Disconnect(connection.get());
-}
-
-TEST_F(ProximityAuthBluetoothLowEnergyConnectionTest,
- Connect_Fails_CharacteristicsNotFound) {
- std::unique_ptr<MockBluetoothLowEnergyConnection> connection(
- CreateConnection());
- ConnectGatt(connection.get());
-
- EXPECT_CALL(*from_peripheral_char_, StartNotifySession(_, _)).Times(0);
- EXPECT_FALSE(characteristics_finder_success_callback_.is_null());
- ASSERT_FALSE(characteristics_finder_error_callback_.is_null());
-
- characteristics_finder_error_callback_.Run(
- {to_peripheral_char_uuid_, kToPeripheralCharID},
- {from_peripheral_char_uuid_, kFromPeripheralCharID});
-
- EXPECT_EQ(connection->sub_status(),
- BluetoothLowEnergyConnection::SubStatus::DISCONNECTED);
- EXPECT_EQ(connection->status(), cryptauth::Connection::DISCONNECTED);
-}
-
-TEST_F(ProximityAuthBluetoothLowEnergyConnectionTest,
- Connect_Fails_NotifySessionError) {
- std::unique_ptr<MockBluetoothLowEnergyConnection> connection(
- CreateConnection());
- ConnectGatt(connection.get());
- CharacteristicsFound(connection.get());
-
- EXPECT_CALL(*to_peripheral_char_, WriteRemoteCharacteristic(_, _, _))
- .Times(0);
- EXPECT_FALSE(notify_session_success_callback_.is_null());
- ASSERT_FALSE(notify_session_error_callback_.is_null());
-
- notify_session_error_callback_.Run(
- device::BluetoothRemoteGattService::GATT_ERROR_UNKNOWN);
-
- EXPECT_EQ(connection->sub_status(),
- BluetoothLowEnergyConnection::SubStatus::DISCONNECTED);
- EXPECT_EQ(connection->status(), cryptauth::Connection::DISCONNECTED);
-}
-
-TEST_F(ProximityAuthBluetoothLowEnergyConnectionTest,
- Connect_Fails_ErrorSendingInviteToConnectSignal) {
- std::unique_ptr<MockBluetoothLowEnergyConnection> connection(
- CreateConnection());
- ConnectGatt(connection.get());
- CharacteristicsFound(connection.get());
- NotifySessionStarted(connection.get());
-
- // |connection| will call WriteRemoteCharacteristics(_,_) to try to send the
- // message |kMaxNumberOfTries| times. There is alredy one EXPECTA_CALL for
- // WriteRemoteCharacteristic(_,_,_) in NotifySessionStated, that's why we use
- // |kMaxNumberOfTries-1| in the EXPECT_CALL statement.
- EXPECT_CALL(*connection, OnDidSendMessage(_, _)).Times(0);
- EXPECT_CALL(*to_peripheral_char_, WriteRemoteCharacteristic(_, _, _))
- .Times(kMaxNumberOfTries - 1)
- .WillRepeatedly(
- DoAll(SaveArg<0>(&last_value_written_on_to_peripheral_char_),
- SaveArg<1>(&write_remote_characteristic_success_callback_),
- SaveArg<2>(&write_remote_characteristic_error_callback_)));
-
- for (int i = 0; i < kMaxNumberOfTries; i++) {
- const std::vector<uint8_t> kInviteToConnectSignal = ToByteVector(
- static_cast<uint32_t>(BluetoothLowEnergyConnection::ControlSignal::
- kInviteToConnectSignal));
- EXPECT_EQ(last_value_written_on_to_peripheral_char_,
- kInviteToConnectSignal);
- ASSERT_FALSE(write_remote_characteristic_error_callback_.is_null());
- EXPECT_FALSE(write_remote_characteristic_success_callback_.is_null());
- write_remote_characteristic_error_callback_.Run(
- device::BluetoothRemoteGattService::GATT_ERROR_UNKNOWN);
- }
-
- EXPECT_EQ(connection->sub_status(),
- BluetoothLowEnergyConnection::SubStatus::DISCONNECTED);
- EXPECT_EQ(connection->status(), cryptauth::Connection::DISCONNECTED);
-}
-
-TEST_F(ProximityAuthBluetoothLowEnergyConnectionTest,
- Receive_MessageSmallerThanCharacteristicSize) {
- std::unique_ptr<MockBluetoothLowEnergyConnection> connection(
- CreateConnection());
- InitializeConnection(connection.get());
-
- std::string received_bytes;
- EXPECT_CALL(*connection, OnBytesReceived(_))
- .WillOnce(SaveArg<0>(&received_bytes));
-
- // Message (bytes) that is going to be received.
- std::string message(100, 'A');
-
- // Sending the |kSendSignal| + |message_size| + |message|.
- connection->GattCharacteristicValueChanged(
- adapter_.get(), from_peripheral_char_.get(),
- CreateFirstCharacteristicValue(message, message.size()));
-
- EXPECT_EQ(received_bytes, message);
-}
-
-TEST_F(ProximityAuthBluetoothLowEnergyConnectionTest,
- Receive_MessageLargerThanCharacteristicSize) {
- std::unique_ptr<MockBluetoothLowEnergyConnection> connection(
- CreateConnection());
- InitializeConnection(connection.get());
-
- std::string received_bytes;
- int chunk_size = 500;
- EXPECT_CALL(*connection, OnBytesReceived(_))
- .WillOnce(SaveArg<0>(&received_bytes));
-
- // Message (bytes) that is going to be received.
- int message_size = 600;
- std::string message(message_size, 'A');
-
- // Sending the |kSendSignal| + |message_size| + |message| (truncated at
- // |chunk_size|).
- int first_write_payload_size =
- chunk_size - CreateSendSignalWithSize(message_size).size();
- connection->GattCharacteristicValueChanged(
- adapter_.get(), from_peripheral_char_.get(),
- CreateFirstCharacteristicValue(
- message.substr(0, first_write_payload_size), message.size()));
-
- // Sending the remaining bytes.
- std::vector<uint8_t> value;
- value.push_back(0);
- value.insert(value.end(), message.begin() + first_write_payload_size,
- message.end());
- connection->GattCharacteristicValueChanged(
- adapter_.get(), from_peripheral_char_.get(), value);
-
- EXPECT_EQ(received_bytes, message);
-}
-
-TEST_F(ProximityAuthBluetoothLowEnergyConnectionTest,
- SendMessage_SmallerThanCharacteristicSize) {
- std::unique_ptr<MockBluetoothLowEnergyConnection> connection(
- CreateConnection());
- InitializeConnection(connection.get());
-
- // Expecting a first call of WriteRemoteCharacteristic, after SendMessage is
- // called.
- EXPECT_CALL(*to_peripheral_char_, WriteRemoteCharacteristic(_, _, _))
- .WillOnce(
- DoAll(SaveArg<0>(&last_value_written_on_to_peripheral_char_),
- SaveArg<1>(&write_remote_characteristic_success_callback_),
- SaveArg<2>(&write_remote_characteristic_error_callback_)));
-
- // Message (bytes) that is going to be sent.
- int message_size = 100;
- std::string message(message_size, 'A');
- message[0] = 'B';
-
- std::unique_ptr<cryptauth::FakeWireMessage> wire_message =
- base::MakeUnique<cryptauth::FakeWireMessage>(message,
- std::string(kTestFeature));
- std::string serialized_message = wire_message->Serialize();
-
- connection->SendMessage(std::move(wire_message));
-
- // Expecting that |kSendSignal| + |message_size| + |message| was written.
- EXPECT_EQ(last_value_written_on_to_peripheral_char_,
- CreateFirstCharacteristicValue(serialized_message,
- serialized_message.size()));
- EXPECT_CALL(*connection, OnDidSendMessage(_, _));
-
- RunWriteCharacteristicSuccessCallback();
-}
-
-TEST_F(ProximityAuthBluetoothLowEnergyConnectionTest,
- SendMessage_LargerThanCharacteristicSize) {
- std::unique_ptr<MockBluetoothLowEnergyConnection> connection(
- CreateConnection());
- InitializeConnection(connection.get());
-
- // Expecting a first call of WriteRemoteCharacteristic, after SendMessage is
- // called.
- EXPECT_CALL(*to_peripheral_char_, WriteRemoteCharacteristic(_, _, _))
- .WillOnce(
- DoAll(SaveArg<0>(&last_value_written_on_to_peripheral_char_),
- SaveArg<1>(&write_remote_characteristic_success_callback_),
- SaveArg<2>(&write_remote_characteristic_error_callback_)));
-
- // Message (bytes) that is going to be sent.
- int message_size = 600;
- std::string message(message_size, 'A');
- message[0] = 'B';
-
- std::unique_ptr<cryptauth::FakeWireMessage> wire_message =
- base::MakeUnique<cryptauth::FakeWireMessage>(message,
- std::string(kTestFeature));
- std::string serialized_message = wire_message->Serialize();
-
- // Send the message.
- connection->SendMessage(std::move(wire_message));
-
- // Expecting that |kSendSignal| + |serialized_message| was written in the
- // first 8 bytes.
- std::vector<uint8_t> prefix(
- last_value_written_on_to_peripheral_char_.begin(),
- last_value_written_on_to_peripheral_char_.begin() + 8);
- EXPECT_EQ(prefix, CreateSendSignalWithSize(serialized_message.size()));
- std::vector<uint8_t> bytes_received(
- last_value_written_on_to_peripheral_char_.begin() + 8,
- last_value_written_on_to_peripheral_char_.end());
-
- // Expecting a second call of WriteRemoteCharacteristic, after success
- // callback is called.
- EXPECT_CALL(*to_peripheral_char_, WriteRemoteCharacteristic(_, _, _))
- .WillOnce(
- DoAll(SaveArg<0>(&last_value_written_on_to_peripheral_char_),
- SaveArg<1>(&write_remote_characteristic_success_callback_),
- SaveArg<2>(&write_remote_characteristic_error_callback_)));
-
- RunWriteCharacteristicSuccessCallback();
- bytes_received.insert(bytes_received.end(),
- last_value_written_on_to_peripheral_char_.begin() + 1,
- last_value_written_on_to_peripheral_char_.end());
-
- // Expecting that the message was written.
- std::vector<uint8_t> expected_value(serialized_message.begin(),
- serialized_message.end());
- EXPECT_EQ(expected_value.size(), bytes_received.size());
- EXPECT_EQ(expected_value, bytes_received);
-
- EXPECT_CALL(*connection, OnDidSendMessage(_, _));
- RunWriteCharacteristicSuccessCallback();
-}
-
-TEST_F(ProximityAuthBluetoothLowEnergyConnectionTest,
- Connect_AfterADelayWhenThrottled) {
- std::unique_ptr<MockBluetoothLowEnergyConnection> connection(
- CreateConnection());
-
- EXPECT_CALL(*bluetooth_throttler_, GetDelay())
- .WillOnce(Return(base::TimeDelta(base::TimeDelta::FromSeconds(1))));
- EXPECT_CALL(*device_, CreateGattConnection(_, _))
- .WillOnce(DoAll(SaveArg<0>(&create_gatt_connection_success_callback_),
- SaveArg<1>(&create_gatt_connection_error_callback_)));
-
- // No GATT connection should be created before the delay.
- connection->Connect();
- EXPECT_EQ(connection->sub_status(),
- BluetoothLowEnergyConnection::SubStatus::WAITING_GATT_CONNECTION);
- EXPECT_EQ(connection->status(), cryptauth::Connection::IN_PROGRESS);
- EXPECT_TRUE(create_gatt_connection_error_callback_.is_null());
- EXPECT_TRUE(create_gatt_connection_success_callback_.is_null());
-
- // A GATT connection should be created after the delay.
- task_runner_->RunUntilIdle();
- EXPECT_FALSE(create_gatt_connection_error_callback_.is_null());
- ASSERT_FALSE(create_gatt_connection_success_callback_.is_null());
-
- // Preparing |connection| to run |create_gatt_connection_success_callback_|.
- EXPECT_CALL(*connection, CreateCharacteristicsFinder(_, _))
- .WillOnce(DoAll(
- SaveArg<0>(&characteristics_finder_success_callback_),
- SaveArg<1>(&characteristics_finder_error_callback_),
- Return(new NiceMock<MockBluetoothLowEnergyCharacteristicsFinder>)));
-
- create_gatt_connection_success_callback_.Run(
- base::MakeUnique<NiceMock<device::MockBluetoothGattConnection>>(
- adapter_, cryptauth::kTestRemoteDeviceBluetoothAddress));
-
- CharacteristicsFound(connection.get());
- NotifySessionStarted(connection.get());
- ResponseSignalReceived(connection.get());
-}
-
-} // namespace proximity_auth

Powered by Google App Engine
This is Rietveld 408576698