1/*
2 * Copyright (c) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#ifndef BLUETOOTH_MOCK_H
17#define BLUETOOTH_MOCK_H
18
19#include "gmock/gmock.h"
20
21#include "c_header/ohos_bt_gap.h"
22#include "c_header/ohos_bt_gatt.h"
23#include "c_header/ohos_bt_gatt_client.h"
24#include "c_header/ohos_bt_gatt_server.h"
25
26#include "softbus_adapter_bt_common.h"
27
28// declare mock symbols explicitly which hava C implement, redirected to mocker when linking
29class BluetoothInterface {
30public:
31    // 蓝牙公共能力
32    virtual bool EnableBle() = 0;
33    virtual bool DisableBle() = 0;
34    virtual bool IsBleEnabled() = 0;
35    virtual bool GetLocalAddr(unsigned char *mac, unsigned int len) = 0;
36    virtual bool SetLocalName(unsigned char *localName, unsigned char length) = 0;
37    virtual int GapRegisterCallbacks(BtGapCallBacks *func) = 0;
38    virtual bool PairRequestReply(const BdAddr *bdAddr, int transport, bool accept) = 0;
39    virtual bool SetDevicePairingConfirmation(const BdAddr *bdAddr, int transport, bool accept) = 0;
40
41    // BLE广播相关
42    virtual int BleGattRegisterCallbacks(BtGattCallbacks *func) = 0;
43    virtual int BleStartScanEx(int scannerId, BleScanConfigs *configs, BleScanNativeFilter *filter,
44        unsigned int filterSize) = 0;
45    virtual int BleStopScan(int scannerId) = 0;
46    virtual int BleStartAdvEx(int *advId, const StartAdvRawData rawData, BleAdvParams advParam) = 0;
47    virtual int BleStopAdv(int advId) = 0;
48
49    // GATT Client相关
50    virtual int BleGattcRegister(BtUuid appUuid) = 0;
51    virtual int BleGattcConnect(int clientId, BtGattClientCallbacks *func, const BdAddr *bdAddr, bool isAutoConnect,
52        BtTransportType transport) = 0;
53    virtual int BleGattcDisconnect(int clientId) = 0;
54    virtual int BleGattcSearchServices(int clientId) = 0;
55    virtual bool BleGattcGetService(int clientId, BtUuid serviceUuid) = 0;
56    virtual int BleGattcRegisterNotification(int clientId, BtGattCharacteristic characteristic, bool enable) = 0;
57    virtual int BleGattcConfigureMtuSize(int clientId, int mtuSize) = 0;
58    virtual int BleGattcWriteCharacteristic(
59        int clientId, BtGattCharacteristic characteristic, BtGattWriteType writeType, int len, const char *value) = 0;
60    virtual int BleGattcUnRegister(int clientId) = 0;
61    virtual int BleGattcSetFastestConn(int clientId, bool fastestConnFlag) = 0;
62    virtual int BleGattcSetPriority(int clientId, const BdAddr *bdAddr, BtGattPriority priority) = 0;
63
64    // GATT Server相关
65    virtual int BleGattsRegisterCallbacks(BtGattServerCallbacks *func) = 0;
66    virtual int BleGattsRegister(BtUuid appUuid);
67    virtual int BleGattsAddService(int serverId, BtUuid srvcUuid, bool isPrimary, int number) = 0;
68    virtual int BleGattsUnRegister(int serverId);
69    virtual int BleGattsAddCharacteristic(
70        int serverId, int srvcHandle, BtUuid characUuid, int properties, int permissions) = 0;
71    virtual int BleGattsAddDescriptor(int serverId, int srvcHandle, BtUuid descUuid, int permissions) = 0;
72    virtual int BleGattsStartService(int serverId, int srvcHandle) = 0;
73    virtual int BleGattsStopService(int serverId, int srvcHandle) = 0;
74    virtual int BleGattsDeleteService(int serverId, int srvcHandle) = 0;
75    virtual int BleGattsDisconnect(int serverId, BdAddr bdAddr, int connId) = 0;
76    virtual int BleGattsSendResponse(int serverId, GattsSendRspParam *param) = 0;
77    virtual int BleGattsSendIndication(int serverId, GattsSendIndParam *param) = 0;
78};
79
80class MockBluetooth : public BluetoothInterface {
81public:
82    MockBluetooth();
83    ~MockBluetooth();
84
85    MOCK_METHOD(bool, EnableBle, (), (override));
86    MOCK_METHOD(bool, DisableBle, (), (override));
87    MOCK_METHOD(bool, IsBleEnabled, (), (override));
88    MOCK_METHOD(bool, GetLocalAddr, (unsigned char *mac, unsigned int len), (override));
89    MOCK_METHOD(bool, SetLocalName, (unsigned char *localName, unsigned char length), (override));
90    MOCK_METHOD(int32_t, GapRegisterCallbacks, (BtGapCallBacks *func), (override));
91    MOCK_METHOD(bool, PairRequestReply, (const BdAddr *bdAddr, int transport, bool accept), (override));
92    MOCK_METHOD(bool, SetDevicePairingConfirmation, (const BdAddr *bdAddr, int transport, bool accept), (override));
93
94    MOCK_METHOD(int32_t, BleGattRegisterCallbacks, (BtGattCallbacks *func), (override));
95    MOCK_METHOD(int32_t, BleStartScanEx,
96        (int scannerId, BleScanConfigs * configs, BleScanNativeFilter *filter, unsigned int filterSize), (override));
97    MOCK_METHOD(int32_t, BleStopScan, (int scannerId), (override));
98    MOCK_METHOD(int32_t, BleStartAdvEx, (int *advId, const StartAdvRawData rawData,
99                BleAdvParams advParam), (override));
100    MOCK_METHOD(int32_t, BleStopAdv, (int advId), (override));
101
102    MOCK_METHOD(int32_t, BleGattcRegister, (BtUuid appUuid), (override));
103    MOCK_METHOD(int32_t, BleGattcConnect,
104        (int clientId, BtGattClientCallbacks *func, const BdAddr *bdAddr, bool isAutoConnect,
105            BtTransportType transport),
106        (override));
107    MOCK_METHOD(int32_t, BleGattcDisconnect, (int clientId), (override));
108    MOCK_METHOD(int32_t, BleGattcSearchServices, (int clientId), (override));
109    MOCK_METHOD(bool, BleGattcGetService, (int clientId, BtUuid serviceUuid), (override));
110    MOCK_METHOD(int32_t, BleGattcRegisterNotification,
111                (int clientId, BtGattCharacteristic characteristic, bool enable), (override));
112    MOCK_METHOD(int32_t, BleGattcConfigureMtuSize, (int clientId, int mtuSize), (override));
113    MOCK_METHOD(int32_t, BleGattcWriteCharacteristic,
114        (int clientId, BtGattCharacteristic characteristic, BtGattWriteType writeType, int len, const char *value),
115        (override));
116    MOCK_METHOD(int32_t, BleGattcUnRegister, (int clientId), (override));
117    MOCK_METHOD(int32_t, BleGattcSetFastestConn, (int clientId, bool fastestConnFlag), (override));
118    MOCK_METHOD(int32_t, BleGattcSetPriority, (int clientId, const BdAddr *bdAddr,
119                BtGattPriority priority), (override));
120
121    MOCK_METHOD(int32_t, BleGattsRegisterCallbacks, (BtGattServerCallbacks *func), (override));
122    MOCK_METHOD(int32_t, BleGattsRegister, (BtUuid appUuid), (override));
123    MOCK_METHOD(int32_t, BleGattsAddService, (int serverId, BtUuid srvcUuid, bool isPrimary, int number), (override));
124    MOCK_METHOD(int32_t, BleGattsUnRegister, (int serverId), (override));
125    MOCK_METHOD(int32_t, BleGattsAddCharacteristic,
126        (int serverId, int srvcHandle, BtUuid characUuid, int properties, int permissions), (override));
127    MOCK_METHOD(
128        int32_t, BleGattsAddDescriptor, (int serverId, int srvcHandle, BtUuid descUuid, int permissions), (override));
129    MOCK_METHOD(int32_t, BleGattsStartService, (int serverId, int srvcHandle), (override));
130    MOCK_METHOD(int32_t, BleGattsStopService, (int serverId, int srvcHandle), (override));
131    MOCK_METHOD(int32_t, BleGattsDeleteService, (int serverId, int srvcHandle), (override));
132    MOCK_METHOD(int32_t, BleGattsDisconnect, (int serverId, BdAddr bdAddr, int connId), (override));
133    MOCK_METHOD(int32_t, BleGattsSendResponse, (int serverId, GattsSendRspParam *param), (override));
134    MOCK_METHOD(int32_t, BleGattsSendIndication, (int serverId, GattsSendIndParam *param), (override));
135
136    static MockBluetooth *GetMocker();
137
138    static BtGapCallBacks *btGapCallback;
139    static BtGattCallbacks *btGattCallback;
140    static BleScanCallbacks *bleScanCallback;
141
142private:
143    static MockBluetooth *targetMocker;
144};
145
146#endif