1 /* 2 * Copyright 2021 HIMSA II K/S - www.himsa.com. 3 * Represented by EHIMA - www.ehima.com 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 #pragma once 18 19 #include <gmock/gmock.h> 20 21 #include <cstdint> 22 #include <optional> 23 24 #include "bt_octets.h" 25 #include "stack/btm/neighbor_inquiry.h" 26 #include "stack/btm/security_device_record.h" 27 #include "types/ble_address_with_type.h" 28 #include "types/bt_transport.h" 29 #include "types/raw_address.h" 30 31 namespace bluetooth { 32 namespace manager { 33 34 class BtmInterface { 35 public: 36 virtual bool GetSecurityFlagsByTransport(const RawAddress& bd_addr, uint8_t* p_sec_flags, 37 tBT_TRANSPORT transport) = 0; 38 virtual bool IsLinkKeyKnown(const RawAddress& bd_addr, tBT_TRANSPORT transport) = 0; 39 virtual bool BTM_IsEncrypted(const RawAddress& bd_addr, tBT_TRANSPORT transport) = 0; 40 virtual tBTM_STATUS SetEncryption(const RawAddress& bd_addr, tBT_TRANSPORT transport, 41 tBTM_SEC_CALLBACK* p_callback, void* p_ref_data, 42 tBTM_BLE_SEC_ACT sec_act) = 0; 43 virtual tBTM_SEC_DEV_REC* FindDevice(const RawAddress& bd_addr) = 0; 44 virtual bool IsPhy2mSupported(const RawAddress& remote_bda, tBT_TRANSPORT transport) = 0; 45 virtual uint8_t GetPeerSCA(const RawAddress& remote_bda, tBT_TRANSPORT transport) = 0; 46 virtual void BleSetPhy(const RawAddress& bd_addr, uint8_t tx_phys, uint8_t rx_phys, 47 uint16_t phy_options) = 0; 48 virtual bool SecIsSecurityPending(const RawAddress& bd_addr) = 0; 49 virtual void RequestPeerSCA(RawAddress const& bd_addr, tBT_TRANSPORT transport) = 0; 50 virtual uint16_t GetHCIConnHandle(RawAddress const& bd_addr, tBT_TRANSPORT transport) = 0; 51 virtual void AclDisconnectFromHandle(uint16_t handle, tHCI_STATUS reason) = 0; 52 virtual tBTM_INQ_INFO* BTM_InqDbFirst() = 0; 53 virtual tBTM_INQ_INFO* BTM_InqDbNext(tBTM_INQ_INFO* p_cur) = 0; 54 virtual std::optional<Octet16> BTM_BleGetPeerLTK(const RawAddress address) = 0; 55 virtual std::optional<Octet16> BTM_BleGetPeerIRK(const RawAddress address) = 0; 56 57 virtual bool BTM_BleIsLinkKeyKnown(const RawAddress address) = 0; 58 virtual std::optional<tBLE_BD_ADDR> BTM_BleGetIdentityAddress(const RawAddress address) = 0; 59 virtual bool BTM_IsAclConnectionUp(const RawAddress& remote_bda, tBT_TRANSPORT transport) = 0; 60 61 virtual ~BtmInterface() = default; 62 }; 63 64 class MockBtmInterface : public BtmInterface { 65 public: 66 MOCK_METHOD((bool), GetSecurityFlagsByTransport, 67 (const RawAddress& bd_addr, uint8_t* p_sec_flags, tBT_TRANSPORT transport), 68 (override)); 69 MOCK_METHOD((bool), IsLinkKeyKnown, (const RawAddress& bd_addr, tBT_TRANSPORT transport), 70 (override)); 71 MOCK_METHOD((bool), BTM_IsEncrypted, (const RawAddress& bd_addr, tBT_TRANSPORT transport), 72 (override)); 73 MOCK_METHOD((tBTM_STATUS), SetEncryption, 74 (const RawAddress& bd_addr, tBT_TRANSPORT transport, tBTM_SEC_CALLBACK* p_callback, 75 void* p_ref_data, tBTM_BLE_SEC_ACT sec_act), 76 (override)); 77 MOCK_METHOD((tBTM_SEC_DEV_REC*), FindDevice, (const RawAddress& bd_addr), (override)); 78 MOCK_METHOD((bool), IsPhy2mSupported, (const RawAddress& remote_bda, tBT_TRANSPORT transport), 79 (override)); 80 MOCK_METHOD((uint8_t), GetPeerSCA, (const RawAddress& remote_bda, tBT_TRANSPORT transport), 81 (override)); 82 MOCK_METHOD((void), BleSetPhy, 83 (const RawAddress& bd_addr, uint8_t tx_phys, uint8_t rx_phys, uint16_t phy_options), 84 (override)); 85 MOCK_METHOD((bool), SecIsSecurityPending, (const RawAddress& bd_addr), (override)); 86 MOCK_METHOD((void), RequestPeerSCA, (RawAddress const& bd_addr, tBT_TRANSPORT transport), 87 (override)); 88 MOCK_METHOD((uint16_t), GetHCIConnHandle, (RawAddress const& bd_addr, tBT_TRANSPORT transport), 89 (override)); 90 MOCK_METHOD((void), AclDisconnectFromHandle, (uint16_t handle, tHCI_STATUS reason), (override)); 91 MOCK_METHOD((tBTM_INQ_INFO*), BTM_InqDbFirst, (), (override)); 92 MOCK_METHOD((tBTM_INQ_INFO*), BTM_InqDbNext, (tBTM_INQ_INFO * p_cur), (override)); 93 MOCK_METHOD((std::optional<Octet16>), BTM_BleGetPeerLTK, (const RawAddress address), (override)); 94 MOCK_METHOD((std::optional<Octet16>), BTM_BleGetPeerIRK, (const RawAddress address), (override)); 95 96 MOCK_METHOD((bool), BTM_BleIsLinkKeyKnown, (const RawAddress address), (override)); 97 MOCK_METHOD((std::optional<tBLE_BD_ADDR>), BTM_BleGetIdentityAddress, (const RawAddress address), 98 (override)); 99 MOCK_METHOD((bool), BTM_IsAclConnectionUp, 100 (const RawAddress& remote_bda, tBT_TRANSPORT transport), (override)); 101 }; 102 103 /** 104 * Set the {@link MockBtmInterface} for testing 105 * 106 * @param mock_btm_interface pointer to mock btm interface, could be null 107 */ 108 void SetMockBtmInterface(MockBtmInterface* mock_btm_interface); 109 110 } // namespace manager 111 } // namespace bluetooth 112