1 /*
2  * Copyright (c) 2024 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 #include "softbus_adapter_bt_common.h"
26 #include "softbus_broadcast_adapter_interface.h"
27 
28 // declare mock symbols explicitly which hava C implement, redirected to mocker when linking
29 class BluetoothInterface {
30 public:
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 BleRegisterScanCallbacks(BleScanCallbacks *func, int32_t *scannerId) = 0;
44     virtual int BleDeregisterScanCallbacks(int32_t scannerId) = 0;
45     virtual int BleStartScanEx(int32_t scannerId, const BleScanConfigs *configs, const BleScanNativeFilter *filter,
46         uint32_t filterSize) = 0;
47     virtual int BleStopScan(int scannerId) = 0;
48     virtual int BleStartAdvEx(int *advId, const StartAdvRawData rawData, BleAdvParams advParam) = 0;
49     virtual int BleStopAdv(int advId) = 0;
50     virtual int GetAdvHandle(int32_t btAdvId, int32_t *bcHandle) = 0;
51     virtual int EnableSyncDataToLpDevice() = 0;
52     virtual int DisableSyncDataToLpDevice() = 0;
53     virtual int SetLpDeviceAdvParam(
54         int32_t duration, int32_t maxExtAdvEvents, int32_t window, int32_t interval, int32_t bcHandle) = 0;
55 
56     // GATT Client相关
57     virtual int BleGattcRegister(BtUuid appUuid) = 0;
58     virtual int BleGattcConnect(int clientId, BtGattClientCallbacks *func, const BdAddr *bdAddr, bool isAutoConnect,
59         BtTransportType transport) = 0;
60     virtual int BleGattcDisconnect(int clientId) = 0;
61     virtual int BleGattcSearchServices(int clientId) = 0;
62     virtual bool BleGattcGetService(int clientId, BtUuid serviceUuid) = 0;
63     virtual int BleGattcRegisterNotification(int clientId, BtGattCharacteristic characteristic, bool enable) = 0;
64     virtual int BleGattcConfigureMtuSize(int clientId, int mtuSize) = 0;
65     virtual int BleGattcWriteCharacteristic(
66         int clientId, BtGattCharacteristic characteristic, BtGattWriteType writeType, int len, const char *value) = 0;
67     virtual int BleGattcUnRegister(int clientId) = 0;
68     virtual int BleGattcSetFastestConn(int clientId, bool fastestConnFlag) = 0;
69     virtual int BleGattcSetPriority(int clientId, const BdAddr *bdAddr, BtGattPriority priority) = 0;
70 
71     // GATT Server相关
72     virtual int BleGattsRegisterCallbacks(BtGattServerCallbacks *func) = 0;
73     virtual int BleGattsRegister(BtUuid appUuid);
74     virtual int BleGattsAddService(int serverId, BtUuid srvcUuid, bool isPrimary, int number) = 0;
75     virtual int BleGattsUnRegister(int serverId);
76     virtual int BleGattsAddCharacteristic(
77         int serverId, int srvcHandle, BtUuid characUuid, int properties, int permissions) = 0;
78     virtual int BleGattsAddDescriptor(int serverId, int srvcHandle, BtUuid descUuid, int permissions) = 0;
79     virtual int BleGattsStartService(int serverId, int srvcHandle) = 0;
80     virtual int BleGattsStopService(int serverId, int srvcHandle) = 0;
81     virtual int BleGattsDeleteService(int serverId, int srvcHandle) = 0;
82     virtual int BleGattsDisconnect(int serverId, BdAddr bdAddr, int connId) = 0;
83     virtual int BleGattsSendResponse(int serverId, GattsSendRspParam *param) = 0;
84     virtual int BleGattsSendIndication(int serverId, GattsSendIndParam *param) = 0;
85 
86     virtual int32_t RegisterBroadcastMediumFunction(SoftbusMediumType type,
87         const SoftbusBroadcastMediumInterface *interface) = 0;
88     virtual int SoftBusAddBtStateListener(const SoftBusBtStateListener *listener) = 0;
89 };
90 
91 class MockBluetooth : public BluetoothInterface {
92 public:
93     MockBluetooth();
94     ~MockBluetooth();
95 
96     MOCK_METHOD(bool, EnableBle, (), (override));
97     MOCK_METHOD(bool, DisableBle, (), (override));
98     MOCK_METHOD(bool, IsBleEnabled, (), (override));
99     MOCK_METHOD(bool, GetLocalAddr, (unsigned char *mac, unsigned int len), (override));
100     MOCK_METHOD(bool, SetLocalName, (unsigned char *localName, unsigned char length), (override));
101     MOCK_METHOD(int, GapRegisterCallbacks, (BtGapCallBacks *func), (override));
102     MOCK_METHOD(bool, PairRequestReply, (const BdAddr *bdAddr, int transport, bool accept), (override));
103     MOCK_METHOD(bool, SetDevicePairingConfirmation, (const BdAddr *bdAddr, int transport, bool accept), (override));
104 
105     MOCK_METHOD(int, BleGattRegisterCallbacks, (BtGattCallbacks *func), (override));
106     MOCK_METHOD(int, BleRegisterScanCallbacks, (BleScanCallbacks *func, int32_t *scannerId), (override));
107     MOCK_METHOD(int, BleDeregisterScanCallbacks, (int32_t scannerId), (override));
108     MOCK_METHOD(int, BleStartScanEx, (int32_t scannerId, const BleScanConfigs *configs,
109         const BleScanNativeFilter *filter, uint32_t filterSize), (override));
110     MOCK_METHOD(int, BleStopScan, (int scannerId), (override));
111     MOCK_METHOD(int, BleStartAdvEx, (int *advId, const StartAdvRawData rawData, BleAdvParams advParam), (override));
112     MOCK_METHOD(int, BleStopAdv, (int advId), (override));
113     MOCK_METHOD(int, GetAdvHandle, (int32_t btAdvId, int32_t *bcHandle), (override));
114     MOCK_METHOD(int, EnableSyncDataToLpDevice, (), (override));
115     MOCK_METHOD(int, DisableSyncDataToLpDevice, (), (override));
116     MOCK_METHOD(int, SetLpDeviceAdvParam,
117         (int32_t duration, int32_t maxExtAdvEvents, int32_t window, int32_t interval, int32_t bcHandle), (override));
118 
119     MOCK_METHOD(int, BleGattcRegister, (BtUuid appUuid), (override));
120     MOCK_METHOD(int, BleGattcConnect,
121         (int clientId, BtGattClientCallbacks *func, const BdAddr *bdAddr, bool isAutoConnect,
122             BtTransportType transport),
123         (override));
124     MOCK_METHOD(int, BleGattcDisconnect, (int clientId), (override));
125     MOCK_METHOD(int, BleGattcSearchServices, (int clientId), (override));
126     MOCK_METHOD(bool, BleGattcGetService, (int clientId, BtUuid serviceUuid), (override));
127     MOCK_METHOD(int, BleGattcRegisterNotification, (int clientId, BtGattCharacteristic characteristic, bool enable),
128         (override));
129     MOCK_METHOD(int, BleGattcConfigureMtuSize, (int clientId, int mtuSize), (override));
130     MOCK_METHOD(int, BleGattcWriteCharacteristic,
131         (int clientId, BtGattCharacteristic characteristic, BtGattWriteType writeType, int len, const char *value),
132         (override));
133     MOCK_METHOD(int, BleGattcUnRegister, (int clientId), (override));
134     MOCK_METHOD(int, BleGattcSetFastestConn, (int clientId, bool fastestConnFlag), (override));
135     MOCK_METHOD(int, BleGattcSetPriority, (int clientId, const BdAddr *bdAddr, BtGattPriority priority), (override));
136 
137     MOCK_METHOD(int, BleGattsRegisterCallbacks, (BtGattServerCallbacks *func), (override));
138     MOCK_METHOD(int, BleGattsRegister, (BtUuid appUuid), (override));
139     MOCK_METHOD(int, BleGattsAddService, (int serverId, BtUuid srvcUuid, bool isPrimary, int number), (override));
140     MOCK_METHOD(int, BleGattsUnRegister, (int serverId), (override));
141     MOCK_METHOD(int, BleGattsAddCharacteristic,
142         (int serverId, int srvcHandle, BtUuid characUuid, int properties, int permissions), (override));
143     MOCK_METHOD(
144         int, BleGattsAddDescriptor, (int serverId, int srvcHandle, BtUuid descUuid, int permissions), (override));
145     MOCK_METHOD(int, BleGattsStartService, (int serverId, int srvcHandle), (override));
146     MOCK_METHOD(int, BleGattsStopService, (int serverId, int srvcHandle), (override));
147     MOCK_METHOD(int, BleGattsDeleteService, (int serverId, int srvcHandle), (override));
148     MOCK_METHOD(int, BleGattsDisconnect, (int serverId, BdAddr bdAddr, int connId), (override));
149     MOCK_METHOD(int, BleGattsSendResponse, (int serverId, GattsSendRspParam *param), (override));
150     MOCK_METHOD(int, BleGattsSendIndication, (int serverId, GattsSendIndParam *param), (override));
151     MOCK_METHOD(int32_t, RegisterBroadcastMediumFunction, (SoftbusMediumType type,
152         const SoftbusBroadcastMediumInterface *interface), (override));
153     MOCK_METHOD(int, SoftBusAddBtStateListener, (const SoftBusBtStateListener *listener), (override));
154     static MockBluetooth *GetMocker();
155 
156     static BtGapCallBacks *btGapCallback;
157     static BtGattCallbacks *btGattCallback;
158     static BleScanCallbacks *bleScanCallback;
159     static const SoftbusBroadcastMediumInterface *interface;
160 
161 private:
162     static MockBluetooth *targetMocker;
163 };
164 
165 #endif