| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "basic_mode_rx_engine.h" |
| |
| #include "gtest/gtest.h" |
| #include "src/connectivity/bluetooth/core/bt-host/common/byte_buffer.h" |
| #include "src/connectivity/bluetooth/core/bt-host/common/test_helpers.h" |
| #include "src/connectivity/bluetooth/core/bt-host/hci/hci.h" |
| #include "src/connectivity/bluetooth/core/bt-host/l2cap/fragmenter.h" |
| #include "src/connectivity/bluetooth/core/bt-host/l2cap/recombiner.h" |
| |
| namespace bt { |
| namespace l2cap { |
| namespace internal { |
| namespace { |
| |
| constexpr hci::ConnectionHandle kTestHandle = 0x0001; |
| constexpr ChannelId kTestChannelId = 0x0001; |
| |
| TEST(L2CAP_BasicModeRxEngineTest, ProcessPduReturnsSdu) { |
| const auto payload = CreateStaticByteBuffer('h', 'e', 'l', 'l', 'o'); |
| const auto sdu = BasicModeRxEngine().ProcessPdu( |
| Fragmenter(kTestHandle).BuildBasicFrame(kTestChannelId, payload)); |
| ASSERT_TRUE(sdu); |
| EXPECT_TRUE(ContainersEqual(payload, *sdu)); |
| } |
| |
| TEST(L2CAP_BasicModeRxEngineTest, ProcessPduCanHandleZeroBytePayload) { |
| const auto byte_buf = |
| CreateStaticByteBuffer(0x01, 0x00, 0x04, 0x00, // ACL data header |
| 0x00, 0x00, 0xFF, 0xFF // Basic L2CAP header |
| ); |
| auto hci_packet = |
| hci::ACLDataPacket::New(byte_buf.size() - sizeof(hci::ACLDataHeader)); |
| hci_packet->mutable_view()->mutable_data().Write(byte_buf); |
| hci_packet->InitializeFromBuffer(); |
| |
| Recombiner recombiner; |
| ASSERT_TRUE(recombiner.AddFragment(std::move(hci_packet))); |
| |
| PDU pdu; |
| ASSERT_TRUE(recombiner.Release(&pdu)); |
| ASSERT_TRUE(pdu.is_valid()); |
| ASSERT_EQ(1u, pdu.fragment_count()); |
| ASSERT_EQ(0u, pdu.length()); |
| |
| const ByteBufferPtr sdu = BasicModeRxEngine().ProcessPdu(std::move(pdu)); |
| ASSERT_TRUE(sdu); |
| EXPECT_EQ(0u, sdu->size()); |
| } |
| |
| } // namespace |
| } // namespace internal |
| } // namespace l2cap |
| } // namespace bt |