Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e6da6755 authored by cmanton@google.com's avatar cmanton@google.com Committed by Automerger Merge Worker
Browse files

More logging around API get_connected_state am: c0f53d14

parents f508b7cd c0f53d14
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -2794,6 +2794,9 @@ void bta_dm_acl_up(const RawAddress& bd_addr, tBT_TRANSPORT transport,
    LOG_WARN("Unable to allocate device resources for new connection");
    LOG_WARN("Unable to allocate device resources for new connection");
    return;
    return;
  }
  }
  LOG_INFO("Acl connected peer:%s transport:%s handle:%hu",
           ADDRESS_TO_LOGGABLE_CSTR(bd_addr),
           bt_transport_text(transport).c_str(), acl_handle);
  device->conn_state = BTA_DM_CONNECTED;
  device->conn_state = BTA_DM_CONNECTED;
  device->pref_role = BTA_ANY_ROLE;
  device->pref_role = BTA_ANY_ROLE;
  device->info = BTA_DM_DI_NONE;
  device->info = BTA_DM_DI_NONE;
+1 −1
Original line number Original line Diff line number Diff line
@@ -272,7 +272,7 @@ void btif_dm_remove_bond(const RawAddress bd_addr);
 * Returns          0 if not connected
 * Returns          0 if not connected
 *
 *
 ******************************************************************************/
 ******************************************************************************/
uint16_t btif_dm_get_connection_state(const RawAddress* bd_addr);
uint16_t btif_dm_get_connection_state(const RawAddress& bd_addr);


/*******************************************************************************
/*******************************************************************************
 *
 *
+3 −1
Original line number Original line Diff line number Diff line
@@ -662,7 +662,9 @@ static int remove_bond(const RawAddress* bd_addr) {
static int get_connection_state(const RawAddress* bd_addr) {
static int get_connection_state(const RawAddress* bd_addr) {
  if (!interface_ready()) return 0;
  if (!interface_ready()) return 0;


  return btif_dm_get_connection_state(bd_addr);
  if (bd_addr == nullptr) return 0;

  return btif_dm_get_connection_state(*bd_addr);
}
}


static int pin_reply(const RawAddress* bd_addr, uint8_t accept, uint8_t pin_len,
static int pin_reply(const RawAddress* bd_addr, uint8_t accept, uint8_t pin_len,
+15 −6
Original line number Original line Diff line number Diff line
@@ -873,18 +873,27 @@ static void btif_dm_cb_create_bond_le(const RawAddress bd_addr,
 *                  encrypted
 *                  encrypted
 *
 *
 ******************************************************************************/
 ******************************************************************************/
uint16_t btif_dm_get_connection_state(const RawAddress* bd_addr) {
uint16_t btif_dm_get_connection_state(const RawAddress& bd_addr) {
  uint16_t rc = BTA_DmGetConnectionState(*bd_addr);
  uint16_t rc = 0;

  if (BTA_DmGetConnectionState(bd_addr)) {
  if (rc != 0) {
    rc = (uint16_t) true;
    if (BTM_IsEncrypted(*bd_addr, BT_TRANSPORT_BR_EDR)) {
    if (BTM_IsEncrypted(bd_addr, BT_TRANSPORT_BR_EDR)) {
      rc |= ENCRYPTED_BREDR;
      rc |= ENCRYPTED_BREDR;
    }
    }
    if (BTM_IsEncrypted(*bd_addr, BT_TRANSPORT_LE)) {
    if (BTM_IsEncrypted(bd_addr, BT_TRANSPORT_LE)) {
      rc |= ENCRYPTED_LE;
      rc |= ENCRYPTED_LE;
    }
    }
  } else {
    LOG_INFO("Acl is not connected to peer:%s",
             ADDRESS_TO_LOGGABLE_CSTR(bd_addr));
  }
  }


  BTM_LogHistory(
      kBtmLogTag, bd_addr, "Get connection state",
      base::StringPrintf("connected:%c classic_encrypted:%c le_encrypted:%c",
                         (rc & (int)true) ? 'T' : 'F',
                         (rc & ENCRYPTED_BREDR) ? 'T' : 'F',
                         (rc & ENCRYPTED_LE) ? 'T' : 'F'));
  return rc;
  return rc;
}
}


+104 −0
Original line number Original line Diff line number Diff line
@@ -31,6 +31,8 @@
#include "include/hardware/bluetooth.h"
#include "include/hardware/bluetooth.h"
#include "include/hardware/bt_av.h"
#include "include/hardware/bt_av.h"
#include "test/common/core_interface.h"
#include "test/common/core_interface.h"
#include "test/mock/mock_main_shim_controller.h"
#include "test/mock/mock_stack_btm_sec.h"
#include "types/raw_address.h"
#include "types/raw_address.h"


void set_hal_cbacks(bt_callbacks_t* callbacks);
void set_hal_cbacks(bt_callbacks_t* callbacks);
@@ -49,6 +51,8 @@ module_t rust_module;


namespace {
namespace {


const RawAddress kRawAddress({0x11, 0x22, 0x33, 0x44, 0x55, 0x66});

auto timeout_time = std::chrono::seconds(3);
auto timeout_time = std::chrono::seconds(3);


std::map<std::string, std::function<void()>> callback_map_;
std::map<std::string, std::function<void()>> callback_map_;
@@ -147,9 +151,30 @@ class BtifCoreTest : public ::testing::Test {
  }
  }
};
};


namespace {
controller_t controller = {};
}

class BtifCoreWithControllerTest : public BtifCoreTest {
  void SetUp() override {
    BtifCoreTest::SetUp();
    controller.supports_sniff_subrating = []() { return true; };
    bluetooth::testing::controller = &controller;
    ASSERT_TRUE(controller_get_interface() != nullptr);
  }

  void TearDown() override {
    bluetooth::testing::controller = nullptr;
    controller = {};
    BtifCoreTest::TearDown();
  }
};

std::promise<int> promise0;
std::promise<int> promise0;
void callback0(int val) { promise0.set_value(val); }
void callback0(int val) { promise0.set_value(val); }


TEST_F(BtifCoreTest, test_nop) {}

TEST_F(BtifCoreTest, test_post_on_bt_simple0) {
TEST_F(BtifCoreTest, test_post_on_bt_simple0) {
  const int val = 123;
  const int val = 123;
  promise0 = std::promise<int>();
  promise0 = std::promise<int>();
@@ -638,3 +663,82 @@ TEST_F(BtifCoreTest, dump_rc_pdu) {
  ASSERT_STREQ(oss.str().c_str(),
  ASSERT_STREQ(oss.str().c_str(),
               dump_rc_pdu(std::numeric_limits<uint8_t>::max()));
               dump_rc_pdu(std::numeric_limits<uint8_t>::max()));
}
}

void bta_dm_acl_up(const RawAddress& bd_addr, tBT_TRANSPORT transport,
                   uint16_t acl_handle);

TEST_F(BtifCoreWithControllerTest, btif_dm_get_connection_state__unconnected) {
  ASSERT_EQ(0, btif_dm_get_connection_state(kRawAddress));
}

TEST_F(BtifCoreWithControllerTest,
       btif_dm_get_connection_state__connected_no_encryption) {
  bta_dm_acl_up(kRawAddress, BT_TRANSPORT_AUTO, 0x123);

  test::mock::stack_btm_sec::BTM_IsEncrypted.body =
      [](const RawAddress& bd_addr, tBT_TRANSPORT transport) {
        switch (transport) {
          case BT_TRANSPORT_BR_EDR:
            return false;
          case BT_TRANSPORT_LE:
            return false;
        }
        return false;
      };
  ASSERT_EQ(1, btif_dm_get_connection_state(kRawAddress));
  test::mock::stack_btm_sec::BTM_IsEncrypted = {};
}

TEST_F(BtifCoreWithControllerTest,
       btif_dm_get_connection_state__connected_classic_encryption) {
  bta_dm_acl_up(kRawAddress, BT_TRANSPORT_AUTO, 0x123);

  test::mock::stack_btm_sec::BTM_IsEncrypted.body =
      [](const RawAddress& bd_addr, tBT_TRANSPORT transport) {
        switch (transport) {
          case BT_TRANSPORT_BR_EDR:
            return true;
          case BT_TRANSPORT_LE:
            return false;
        }
        return false;
      };
  ASSERT_EQ(3, btif_dm_get_connection_state(kRawAddress));
  test::mock::stack_btm_sec::BTM_IsEncrypted = {};
}

TEST_F(BtifCoreWithControllerTest,
       btif_dm_get_connection_state__connected_le_encryption) {
  bta_dm_acl_up(kRawAddress, BT_TRANSPORT_AUTO, 0x123);

  test::mock::stack_btm_sec::BTM_IsEncrypted.body =
      [](const RawAddress& bd_addr, tBT_TRANSPORT transport) {
        switch (transport) {
          case BT_TRANSPORT_BR_EDR:
            return false;
          case BT_TRANSPORT_LE:
            return true;
        }
        return false;
      };
  ASSERT_EQ(5, btif_dm_get_connection_state(kRawAddress));
  test::mock::stack_btm_sec::BTM_IsEncrypted = {};
}

TEST_F(BtifCoreWithControllerTest,
       btif_dm_get_connection_state__connected_both_encryption) {
  bta_dm_acl_up(kRawAddress, BT_TRANSPORT_AUTO, 0x123);

  test::mock::stack_btm_sec::BTM_IsEncrypted.body =
      [](const RawAddress& bd_addr, tBT_TRANSPORT transport) {
        switch (transport) {
          case BT_TRANSPORT_BR_EDR:
            return true;
          case BT_TRANSPORT_LE:
            return true;
        }
        return false;
      };
  ASSERT_EQ(7, btif_dm_get_connection_state(kRawAddress));
  test::mock::stack_btm_sec::BTM_IsEncrypted = {};
}
Loading