blob: 999e6a1c21c1afb9ac98bfcb6048306c2a5bbb9b [file] [log] [blame]
// 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 "pdu_generator.h"
#include "gtest/gtest.h"
namespace bt {
namespace l2cap {
namespace internal {
namespace {
TEST(L2CAP_PduGeneratorTest, CanGeneratePdusFromEvenlyDivisbleBuffer) {
std::array<uint8_t, 1024> buf;
internal::PduGenerator gen(buf.data(), buf.size(), 2);
EXPECT_TRUE(gen.GetNextPdu());
EXPECT_TRUE(gen.GetNextPdu());
}
TEST(L2CAP_PduGeneratorTest,
ReadingPastEndFromEvenlyDivisibleBufferYieldsFalse) {
std::array<uint8_t, 1024> buf;
internal::PduGenerator gen(buf.data(), buf.size(), 2);
gen.GetNextPdu();
gen.GetNextPdu();
EXPECT_FALSE(gen.GetNextPdu());
}
TEST(L2CAP_PduGeneratorTest, CanGeneratePdusFromNonEvenlyDivisibleBuffer) {
std::array<uint8_t, 1024> buf;
internal::PduGenerator gen(buf.data(), buf.size(), 3);
for (size_t i = 0; i < 3; ++i) {
auto pdu = gen.GetNextPdu();
ASSERT_TRUE(pdu);
EXPECT_EQ(341u, pdu.value().length());
}
}
TEST(L2CAP_PduGeneratorTest,
ReadingPastEndFromNonEvenlyDivisibleBufferYieldsFalse) {
std::array<uint8_t, 1024> buf;
internal::PduGenerator gen(buf.data(), buf.size(), 3);
gen.GetNextPdu();
gen.GetNextPdu();
gen.GetNextPdu();
EXPECT_FALSE(gen.GetNextPdu());
}
TEST(L2CAP_PduGeneratorTest, ZeroNumPdusYieldsZeroPdus) {
std::array<uint8_t, 1024> buf;
EXPECT_FALSE(internal::PduGenerator(buf.data(), buf.size(), 0).GetNextPdu());
}
TEST(L2CAP_PduGeneratorTest, NumPdusGreaterThanNumBytesYieldsZeroPdus) {
std::array<uint8_t, 1024> buf;
EXPECT_FALSE(internal::PduGenerator(buf.data(), buf.size(), buf.size() + 1)
.GetNextPdu());
}
TEST(L2CAP_PduGeneratorTest, ZeroBufSizeDoesNotCrash) {
std::array<uint8_t, 1024> buf;
internal::PduGenerator(buf.data(), 0, 1).GetNextPdu();
}
TEST(L2CAP_PduGeneratorTest, OversizedBufSizeDoesNotCrash) {
std::array<uint8_t, 2 * kMaxBasicFramePayloadSize> buf;
internal::PduGenerator(buf.data(), buf.size(), 1).GetNextPdu();
}
} // namespace
} // namespace internal
} // namespace l2cap
} // namespace bt