blob: 641b463f18babc3bf781f85590516e7956b1b98f [file]
// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef DEVICE_BLUETOOTH_TEST_BLUETOOTH_TEST_ANDROID_H_
#define DEVICE_BLUETOOTH_TEST_BLUETOOTH_TEST_ANDROID_H_
#include <stdint.h>
#include "base/android/scoped_java_ref.h"
#include "base/functional/callback.h"
#include "base/memory/raw_ptr.h"
#include "base/test/task_environment.h"
#include "device/bluetooth/bluetooth_common.h"
#include "device/bluetooth/bluetooth_socket.h"
#include "device/bluetooth/test/bluetooth_test.h"
namespace device {
// Android implementation of BluetoothTestBase.
class BluetoothTestAndroid : public BluetoothTestBase {
public:
BluetoothTestAndroid();
explicit BluetoothTestAndroid(
base::test::TaskEnvironment::TimeSource time_source);
~BluetoothTestAndroid() override;
// Test overrides:
void SetUp() override;
void TearDown() override;
// BluetoothTestBase overrides:
void InitWithDefaultAdapter() override;
void InitWithoutDefaultAdapter() override;
void InitWithFakeAdapter() override;
bool DenyPermission() override;
BluetoothDevice* SimulateLowEnergyDevice(int device_ordinal) override;
BluetoothDevice* SimulateClassicDevice() override;
void RememberDeviceForSubsequentAction(BluetoothDevice* device) override;
void SimulateGattConnection(BluetoothDevice* device) override;
void SimulateGattConnectionError(BluetoothDevice* device,
BluetoothDevice::ConnectErrorCode) override;
void SimulateGattDisconnection(BluetoothDevice* device) override;
void SimulateGattServicesDiscovered(
BluetoothDevice* device,
const std::vector<std::string>& uuids,
const std::vector<std::string>& blocked_uuids = {}) override;
void SimulateGattServicesDiscoveryError(BluetoothDevice* device) override;
void SimulateGattCharacteristic(BluetoothRemoteGattService* service,
const std::string& uuid,
int properties) override;
void RememberCharacteristicForSubsequentAction(
BluetoothRemoteGattCharacteristic* characteristic) override;
void RememberCCCDescriptorForSubsequentAction(
BluetoothRemoteGattCharacteristic* characteristic) override;
void SimulateGattNotifySessionStarted(
BluetoothRemoteGattCharacteristic* characteristic) override;
void SimulateGattNotifySessionStartError(
BluetoothRemoteGattCharacteristic* characteristic,
BluetoothGattService::GattErrorCode error_code) override;
void SimulateGattNotifySessionStopped(
BluetoothRemoteGattCharacteristic* characteristic) override;
void SimulateGattNotifySessionStopError(
BluetoothRemoteGattCharacteristic* characteristic,
BluetoothGattService::GattErrorCode error_code) override;
void SimulateGattCharacteristicSetNotifyWillFailSynchronouslyOnce(
BluetoothRemoteGattCharacteristic* characteristic) override;
void SimulateGattCharacteristicChanged(
BluetoothRemoteGattCharacteristic* characteristic,
const std::vector<uint8_t>& value) override;
void SimulateGattCharacteristicRead(
BluetoothRemoteGattCharacteristic* characteristic,
const std::vector<uint8_t>& value) override;
void SimulateGattCharacteristicReadError(
BluetoothRemoteGattCharacteristic* characteristic,
BluetoothGattService::GattErrorCode) override;
void SimulateGattCharacteristicReadWillFailSynchronouslyOnce(
BluetoothRemoteGattCharacteristic* characteristic) override;
void SimulateGattCharacteristicWrite(
BluetoothRemoteGattCharacteristic* characteristic) override;
void SimulateGattCharacteristicWriteError(
BluetoothRemoteGattCharacteristic* characteristic,
BluetoothGattService::GattErrorCode) override;
void SimulateGattCharacteristicWriteWillFailSynchronouslyOnce(
BluetoothRemoteGattCharacteristic* characteristic) override;
void SimulateGattDescriptor(BluetoothRemoteGattCharacteristic* characteristic,
const std::string& uuid) override;
void RememberDescriptorForSubsequentAction(
BluetoothRemoteGattDescriptor* descriptor) override;
void SimulateGattDescriptorRead(BluetoothRemoteGattDescriptor* descriptor,
const std::vector<uint8_t>& value) override;
void SimulateGattDescriptorReadError(
BluetoothRemoteGattDescriptor* descriptor,
BluetoothGattService::GattErrorCode) override;
void SimulateGattDescriptorReadWillFailSynchronouslyOnce(
BluetoothRemoteGattDescriptor* descriptor) override;
void SimulateGattDescriptorWrite(
BluetoothRemoteGattDescriptor* descriptor) override;
void SimulateGattDescriptorWriteError(
BluetoothRemoteGattDescriptor* descriptor,
BluetoothGattService::GattErrorCode) override;
void SimulateGattDescriptorWriteWillFailSynchronouslyOnce(
BluetoothRemoteGattDescriptor* descriptor) override;
// Instruct the fake adapter to enable/disable BT classic and BLE.
void SetEnabledDeviceTransport(BluetoothTransport transport);
// Creates a fake paired classic device
//
// |device_ordinal| selects between multiple fake device data sets to produce:
// 0: Name: kTestDeviceName
// Address: kTestDeviceAddress3
// UUID: <empty>
// 1: Name: kTestDeviceNameEmpty
// Address: kTestDeviceAddress1
// UUID: kTestUUIDSerial
// 2: Name: kTestDeviceName
// Address: kTestDeviceAddress2
// UUID: kTestUUIDSerial
// Returns the address of the simulated device.
// Notify DeviceBondStateReceiver.Callback if |notify_callback| is true.
std::string SimulatePairedClassicDevice(int device_ordinal,
bool notify_callback = false);
// Simulates having unpaired a device of |address|.
void UnpairDevice(std::string address);
// Simulates a low level (ACL) connect state change for |device|.
void SimulateAclConnectStateChange(BluetoothDevice* device,
uint8_t transport,
bool connected);
// Instruct the fake adapter to claim that location services are off for the
// device.
void SimulateLocationServicesOff();
// Instruct the fake adapter to throw an IllegalStateException for
// startScan and stopScan.
void ForceIllegalStateException();
// Instruct the fake LE scanner to invoke the failure callback with
// |error_code|.
void FailCurrentLeScan(int error_code);
// Instructs the fake device to throw an IOException with |error_message| next
// time |connectToService| or |connectToServiceInsecurely| is called with it.
void FailNextServiceConnection(BluetoothDevice* device,
const std::string& error_message);
// Gets all bytes the fake socket was requested to send since it was created.
std::vector<uint8_t> GetSentBytes(BluetoothSocket* socket);
// Feeds the fake socket |bytes| and serve them when it is requested to read.
// Can't be longer than 8KB.
void SetReceivedBytes(BluetoothSocket* socket,
const std::vector<uint8_t>& bytes);
// Fails the next operation on the fake socket by throwing an IOException with
// |error_message|.
void FailNextOperation(BluetoothSocket* socket,
const std::string& error_message);
// Records that Java FakeBluetoothDevice connectGatt was called.
void OnFakeBluetoothDeviceConnectGattCalled(JNIEnv* env);
// Records that Java FakeBluetoothGatt disconnect was called.
void OnFakeBluetoothGattDisconnect(JNIEnv* env);
// Records that Java FakeBluetoothGatt close was called.
void OnFakeBluetoothGattClose(JNIEnv* env);
// Records that Java FakeBluetoothGatt discoverServices was called.
void OnFakeBluetoothGattDiscoverServices(JNIEnv* env);
// Records that Java FakeBluetoothGatt setCharacteristicNotification was
// called.
void OnFakeBluetoothGattSetCharacteristicNotification(JNIEnv* env);
// Records that Java FakeBluetoothGatt readCharacteristic was called.
void OnFakeBluetoothGattReadCharacteristic(JNIEnv* env);
// Records that Java FakeBluetoothGatt writeCharacteristic was called.
void OnFakeBluetoothGattWriteCharacteristic(
JNIEnv* env,
const base::android::JavaRef<jbyteArray>& value);
// Records that Java FakeBluetoothGatt readDescriptor was called.
void OnFakeBluetoothGattReadDescriptor(JNIEnv* env);
// Records that Java FakeBluetoothGatt writeDescriptor was called.
void OnFakeBluetoothGattWriteDescriptor(
JNIEnv* env,
const base::android::JavaRef<jbyteArray>& value);
// Records that Java FakeBluetoothAdapter onAdapterStateChanged was called.
void OnFakeAdapterStateChanged(JNIEnv* env, const bool powered);
// Posts a task to be run on the current message loop.
void PostTaskFromJava(base::OnceClosure&& runnable);
// Posts a delayed task to be run on the current message loop.
void PostDelayedTaskFromJava(base::OnceClosure&& runnable,
int64_t delayMillis);
base::android::ScopedJavaGlobalRef<jobject> j_default_bluetooth_adapter_;
base::android::ScopedJavaGlobalRef<jobject> j_fake_bluetooth_adapter_;
int gatt_open_connections_ = 0;
raw_ptr<BluetoothRemoteGattDescriptor> remembered_ccc_descriptor_ = nullptr;
};
// Defines common test fixture name. Use TEST_F(BluetoothTest, YourTestName).
typedef BluetoothTestAndroid BluetoothTest;
} // namespace device
#endif // DEVICE_BLUETOOTH_TEST_BLUETOOTH_TEST_ANDROID_H_