AclManager: Check for LE_CREATE_CONNECTION
Bug: 143568835
Test: bluetooth_gd_test
Change-Id: I806d57cb26b4491201d80bd859fe2a03acea9698
diff --git a/gd/hci/acl_manager.cc b/gd/hci/acl_manager.cc
index 2852b6c..faad20b 100644
--- a/gd/hci/acl_manager.cc
+++ b/gd/hci/acl_manager.cc
@@ -924,7 +924,7 @@
supervision_timeout, minimum_ce_length, maximum_ce_length),
common::BindOnce([](CommandStatusView status) {
ASSERT(status.IsValid());
- ASSERT(status.GetCommandOpCode() == OpCode::CREATE_CONNECTION);
+ ASSERT(status.GetCommandOpCode() == OpCode::LE_CREATE_CONNECTION);
}),
handler_);
}
diff --git a/gd/hci/acl_manager_test.cc b/gd/hci/acl_manager_test.cc
index 8b2cb32..3e3f1b5 100644
--- a/gd/hci/acl_manager_test.cc
+++ b/gd/hci/acl_manager_test.cc
@@ -101,6 +101,7 @@
void EnqueueCommand(std::unique_ptr<CommandPacketBuilder> command,
common::OnceCallback<void(CommandStatusView)> on_status, os::Handler* handler) override {
command_queue_.push(std::move(command));
+ command_status_callbacks.push_front(std::move(on_status));
not_empty_.notify_all();
}
@@ -155,9 +156,9 @@
void IncomingEvent(std::unique_ptr<EventPacketBuilder> event_builder) {
auto packet = GetPacketView(std::move(event_builder));
EventPacketView event = EventPacketView::Create(packet);
- EXPECT_TRUE(event.IsValid());
+ ASSERT_TRUE(event.IsValid());
EventCode event_code = event.GetEventCode();
- EXPECT_TRUE(registered_events_.find(event_code) != registered_events_.end());
+ ASSERT_TRUE(registered_events_.find(event_code) != registered_events_.end()) << EventCodeText(event_code);
registered_events_[event_code].Run(event);
}
@@ -202,6 +203,13 @@
command_complete_callbacks.pop_front();
}
+ void CommandStatusCallback(EventPacketView event) {
+ CommandStatusView status_view = CommandStatusView::Create(event);
+ ASSERT(status_view.IsValid());
+ std::move(command_status_callbacks.front()).Run(status_view);
+ command_status_callbacks.pop_front();
+ }
+
PacketView<kLittleEndian> OutgoingAclData() {
auto queue_end = acl_queue_.GetDownEnd();
std::unique_ptr<AclPacketBuilder> received;
@@ -217,13 +225,19 @@
}
void ListDependencies(ModuleList* list) override {}
- void Start() override {}
+ void Start() override {
+ RegisterEventHandler(EventCode::COMMAND_COMPLETE,
+ base::Bind(&TestHciLayer::CommandCompleteCallback, common::Unretained(this)), nullptr);
+ RegisterEventHandler(EventCode::COMMAND_STATUS,
+ base::Bind(&TestHciLayer::CommandStatusCallback, common::Unretained(this)), nullptr);
+ }
void Stop() override {}
private:
std::map<EventCode, common::Callback<void(EventPacketView)>> registered_events_;
std::map<SubeventCode, common::Callback<void(LeMetaEventView)>> registered_le_events_;
std::list<base::OnceCallback<void(CommandCompleteView)>> command_complete_callbacks;
+ std::list<base::OnceCallback<void(CommandStatusView)>> command_status_callbacks;
BidiQueue<AclPacketView, AclPacketBuilder> acl_queue_{3 /* TODO: Set queue depth */};
std::queue<std::unique_ptr<CommandPacketBuilder>> command_queue_;
@@ -235,6 +249,7 @@
protected:
void SetUp() override {
test_hci_layer_ = new TestHciLayer; // Ownership is transferred to registry
+ test_hci_layer_->Start();
test_controller_ = new TestController;
fake_registry_.InjectTestModule(&HciLayer::Factory, test_hci_layer_);
fake_registry_.InjectTestModule(&Controller::Factory, test_controller_);
@@ -348,9 +363,6 @@
protected:
void SetUp() override {
AclManagerTest::SetUp();
- test_hci_layer_->RegisterEventHandler(
- EventCode::COMMAND_COMPLETE,
- base::Bind(&TestHciLayer::CommandCompleteCallback, common::Unretained(test_hci_layer_)), nullptr);
handle_ = 0x123;
acl_manager_->CreateConnection(remote);
@@ -473,6 +485,8 @@
EXPECT_EQ(command_view.GetPeerAddress(), remote);
EXPECT_EQ(command_view.GetPeerAddressType(), AddressType::PUBLIC_DEVICE_ADDRESS);
+ test_hci_layer_->IncomingEvent(LeCreateConnectionStatusBuilder::Create(ErrorCode::SUCCESS, 0x01));
+
auto first_connection = GetLeConnectionFuture();
test_hci_layer_->IncomingLeMetaEvent(
@@ -497,6 +511,8 @@
EXPECT_EQ(command_view.GetPeerAddress(), remote);
EXPECT_EQ(command_view.GetPeerAddressType(), AddressType::PUBLIC_DEVICE_ADDRESS);
+ test_hci_layer_->IncomingEvent(LeCreateConnectionStatusBuilder::Create(ErrorCode::SUCCESS, 0x01));
+
EXPECT_CALL(mock_le_connection_callbacks_,
OnLeConnectFail(remote_with_type, ErrorCode::CONNECTION_REJECTED_LIMITED_RESOURCES));
test_hci_layer_->IncomingLeMetaEvent(LeConnectionCompleteBuilder::Create(