18f7377353db29efe0a506123deec03d70935957aAjay Panicker/*
28f7377353db29efe0a506123deec03d70935957aAjay Panicker * Copyright 2018 The Android Open Source Project
38f7377353db29efe0a506123deec03d70935957aAjay Panicker *
48f7377353db29efe0a506123deec03d70935957aAjay Panicker * Licensed under the Apache License, Version 2.0 (the "License");
58f7377353db29efe0a506123deec03d70935957aAjay Panicker * you may not use this file except in compliance with the License.
68f7377353db29efe0a506123deec03d70935957aAjay Panicker * You may obtain a copy of the License at
78f7377353db29efe0a506123deec03d70935957aAjay Panicker *
88f7377353db29efe0a506123deec03d70935957aAjay Panicker *      http://www.apache.org/licenses/LICENSE-2.0
98f7377353db29efe0a506123deec03d70935957aAjay Panicker *
108f7377353db29efe0a506123deec03d70935957aAjay Panicker * Unless required by applicable law or agreed to in writing, software
118f7377353db29efe0a506123deec03d70935957aAjay Panicker * distributed under the License is distributed on an "AS IS" BASIS,
128f7377353db29efe0a506123deec03d70935957aAjay Panicker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138f7377353db29efe0a506123deec03d70935957aAjay Panicker * See the License for the specific language governing permissions and
148f7377353db29efe0a506123deec03d70935957aAjay Panicker * limitations under the License.
158f7377353db29efe0a506123deec03d70935957aAjay Panicker */
168f7377353db29efe0a506123deec03d70935957aAjay Panicker
178f7377353db29efe0a506123deec03d70935957aAjay Panicker#include <base/logging.h>
188f7377353db29efe0a506123deec03d70935957aAjay Panicker#include <gmock/gmock.h>
198f7377353db29efe0a506123deec03d70935957aAjay Panicker#include <gtest/gtest.h>
208f7377353db29efe0a506123deec03d70935957aAjay Panicker
218f7377353db29efe0a506123deec03d70935957aAjay Panicker#include "avrcp_test_packets.h"
228f7377353db29efe0a506123deec03d70935957aAjay Panicker#include "change_path.h"
238f7377353db29efe0a506123deec03d70935957aAjay Panicker#include "packet_test_helper.h"
248f7377353db29efe0a506123deec03d70935957aAjay Panicker
258f7377353db29efe0a506123deec03d70935957aAjay Panickernamespace bluetooth {
268f7377353db29efe0a506123deec03d70935957aAjay Panickernamespace avrcp {
278f7377353db29efe0a506123deec03d70935957aAjay Panicker
288f7377353db29efe0a506123deec03d70935957aAjay Panickerusing TestChangePathReqPacket = TestPacketType<ChangePathRequest>;
298f7377353db29efe0a506123deec03d70935957aAjay Panicker
308f7377353db29efe0a506123deec03d70935957aAjay PanickerTEST(ChangePathResponseBuilderTest, builderTest) {
318f7377353db29efe0a506123deec03d70935957aAjay Panicker  auto builder = ChangePathResponseBuilder::MakeBuilder(Status::NO_ERROR, 2);
328f7377353db29efe0a506123deec03d70935957aAjay Panicker  ASSERT_EQ(builder->size(), change_path_response.size());
338f7377353db29efe0a506123deec03d70935957aAjay Panicker
348f7377353db29efe0a506123deec03d70935957aAjay Panicker  auto test_packet = TestChangePathReqPacket::Make();
358f7377353db29efe0a506123deec03d70935957aAjay Panicker  builder->Serialize(test_packet);
368f7377353db29efe0a506123deec03d70935957aAjay Panicker  ASSERT_EQ(test_packet->GetData(), change_path_response);
378f7377353db29efe0a506123deec03d70935957aAjay Panicker}
388f7377353db29efe0a506123deec03d70935957aAjay Panicker
398f7377353db29efe0a506123deec03d70935957aAjay PanickerTEST(ChangePathResponseBuilderTest, builderErrorStatusTest) {
408f7377353db29efe0a506123deec03d70935957aAjay Panicker  // NOTE: The num items in folder field doesn't matter when the status is
418f7377353db29efe0a506123deec03d70935957aAjay Panicker  // not NO_ERROR
428f7377353db29efe0a506123deec03d70935957aAjay Panicker  auto builder =
438f7377353db29efe0a506123deec03d70935957aAjay Panicker      ChangePathResponseBuilder::MakeBuilder(Status::INVALID_DIRECTION, 2);
448f7377353db29efe0a506123deec03d70935957aAjay Panicker  ASSERT_EQ(builder->size(), change_path_error_response.size());
458f7377353db29efe0a506123deec03d70935957aAjay Panicker
468f7377353db29efe0a506123deec03d70935957aAjay Panicker  auto test_packet = TestChangePathReqPacket::Make();
478f7377353db29efe0a506123deec03d70935957aAjay Panicker  builder->Serialize(test_packet);
488f7377353db29efe0a506123deec03d70935957aAjay Panicker  ASSERT_EQ(test_packet->GetData(), change_path_error_response);
498f7377353db29efe0a506123deec03d70935957aAjay Panicker}
508f7377353db29efe0a506123deec03d70935957aAjay Panicker
518f7377353db29efe0a506123deec03d70935957aAjay PanickerTEST(ChangePathRequestTest, getterTest) {
528f7377353db29efe0a506123deec03d70935957aAjay Panicker  auto test_packet = TestChangePathReqPacket::Make(change_path_request);
538f7377353db29efe0a506123deec03d70935957aAjay Panicker
548f7377353db29efe0a506123deec03d70935957aAjay Panicker  ASSERT_EQ(test_packet->GetUidCounter(), 0x0000u);
558f7377353db29efe0a506123deec03d70935957aAjay Panicker  ASSERT_EQ(test_packet->GetDirection(), Direction::DOWN);
568f7377353db29efe0a506123deec03d70935957aAjay Panicker  ASSERT_EQ(test_packet->GetUid(), 0x0000000000000002u);
578f7377353db29efe0a506123deec03d70935957aAjay Panicker}
588f7377353db29efe0a506123deec03d70935957aAjay Panicker
598f7377353db29efe0a506123deec03d70935957aAjay PanickerTEST(ChangePathRequestTest, validTest) {
608f7377353db29efe0a506123deec03d70935957aAjay Panicker  auto test_packet = TestChangePathReqPacket::Make(change_path_request);
618f7377353db29efe0a506123deec03d70935957aAjay Panicker  ASSERT_TRUE(test_packet->IsValid());
628f7377353db29efe0a506123deec03d70935957aAjay Panicker}
638f7377353db29efe0a506123deec03d70935957aAjay Panicker
648f7377353db29efe0a506123deec03d70935957aAjay PanickerTEST(ChangePathRequestTest, invalidTest) {
658f7377353db29efe0a506123deec03d70935957aAjay Panicker  auto packet_copy = change_path_request;
668f7377353db29efe0a506123deec03d70935957aAjay Panicker  packet_copy.push_back(0x00);
678f7377353db29efe0a506123deec03d70935957aAjay Panicker  auto test_packet = TestChangePathReqPacket::Make(packet_copy);
688f7377353db29efe0a506123deec03d70935957aAjay Panicker  ASSERT_FALSE(test_packet->IsValid());
698f7377353db29efe0a506123deec03d70935957aAjay Panicker
708f7377353db29efe0a506123deec03d70935957aAjay Panicker  std::vector<uint8_t> short_packet = {0x00, 0x01, 0x02, 0x03, 0x04};
718f7377353db29efe0a506123deec03d70935957aAjay Panicker  test_packet = TestChangePathReqPacket::Make(short_packet);
728f7377353db29efe0a506123deec03d70935957aAjay Panicker  ASSERT_FALSE(test_packet->IsValid());
738f7377353db29efe0a506123deec03d70935957aAjay Panicker}
748f7377353db29efe0a506123deec03d70935957aAjay Panicker
758b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay PanickerTEST(ChangePathRequestBuilder, builderTest) {
768b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker  auto builder = ChangePathRequestBuilder::MakeBuilder(0, Direction::DOWN, 2);
778b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker  ASSERT_EQ(builder->size(), change_path_request.size());
788b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker
798b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker  auto test_packet = TestChangePathReqPacket::Make();
808b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker  builder->Serialize(test_packet);
818b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker  ASSERT_EQ(test_packet->GetData(), change_path_request);
828b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker}
838b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker
848f7377353db29efe0a506123deec03d70935957aAjay Panicker}  // namespace avrcp
858f7377353db29efe0a506123deec03d70935957aAjay Panicker}  // namespace bluetooth