1341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker/*
2341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * Copyright 2018 The Android Open Source Project
3341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker *
4341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * Licensed under the Apache License, Version 2.0 (the "License");
5341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * you may not use this file except in compliance with the License.
6341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * You may obtain a copy of the License at
7341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker *
8341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker *      http://www.apache.org/licenses/LICENSE-2.0
9341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker *
10341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * Unless required by applicable law or agreed to in writing, software
11341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * distributed under the License is distributed on an "AS IS" BASIS,
12341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * See the License for the specific language governing permissions and
14341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * limitations under the License.
15341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker */
16341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker
17341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker#include <gtest/gtest.h>
18341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker#include <memory>
19341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker
20341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker#include "packet.h"
21341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker#include "packet_test_common.h"
22341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker#include "test_packets.h"
23341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker
24341ab2befa059e859cdc67655d83bac14980ea9eAjay Panickerusing std::vector;
25341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker
26341ab2befa059e859cdc67655d83bac14980ea9eAjay Panickernamespace bluetooth {
27341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker
28341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST(PacketBuilderTest, serializeTest) {
29341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker  auto builder = TestPacketBuilder::MakeBuilder(test_l2cap_data);
30341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker  auto packet = TestPacket::Make();
31341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker
32341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker  builder->Serialize(packet);
33341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker
34341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker  for (size_t i = 0; i < test_l2cap_data.size(); i++) {
35341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker    ASSERT_EQ(test_l2cap_data[i], (*packet)[i]);
36341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker  }
37341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker}
38341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker
39341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST(PacketBuilderTest, sizeTest) {
40341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker  auto builder = TestPacketBuilder::MakeBuilder(test_l2cap_data);
41341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker
42341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker  ASSERT_EQ(builder->size(), test_l2cap_data.size());
43341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker}
44341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker
45341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST(PacketBuilderTest, reserveSpaceTest) {
46341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker  auto packet = TestPacket::Make();
47341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker  ASSERT_EQ(packet->GetData().capacity(), 0u);
48341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker
49341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker  auto builder = TestPacketBuilder::MakeBuilder(test_l2cap_data);
50341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker  builder->ReserveSpace(packet, test_l2cap_data.size());
51341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker
52341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker  ASSERT_GE(packet->GetData().capacity(), test_l2cap_data.size());
53341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker}
54341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker
55341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST(PacketBuilderTest, addPayloadOctetsTest) {
56341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker  auto builder = TestPacketBuilder::MakeBuilder(test_l2cap_data);
57341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker  auto packet = TestPacket::Make();
58341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker
59341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker  builder->AddPayloadOctets1(packet, 0x01u);
60341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker  builder->AddPayloadOctets2(packet, 0x0302u);
61341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker  builder->AddPayloadOctets3(packet, 0x060504u);
62341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker  builder->AddPayloadOctets4(packet, 0x0A090807u);
63341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker  builder->AddPayloadOctets6(packet, 0x100F0E0D0C0Bu);
64341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker  builder->AddPayloadOctets8(packet, 0x1817161514131211u);
65341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker
66341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker  for (size_t i = 0; i < 0x18; i++) {
67341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker    ASSERT_EQ((*packet)[i], i + 1);
68341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker  }
69341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker}
70341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker
71341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker}  // namespace bluetooth