// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromecast/device/bluetooth/bluetooth_util.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace chromecast {
namespace bluetooth {
namespace util {
TEST(BluetoothUtilTest, AddrStringConversion) {
const char kBadAddr1[] = "foo";
const char kBadAddr2[] = "aa:bb:cc:dd:ee:ag";
const char kGoodAddr1[] = "aa:bb:cc:dd:ee:ff";
const char kGoodAddr2[] = "AA:BB:CC:DD:EE:FF";
const char kGoodAddr3[] = "A1:B2:C3:D4:E5:F6";
const char kGoodAddr4[] = "a1:b2:c3:d4:e5:f6";
const bluetooth_v2_shlib::Addr kGoodBytes1 = {
{0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa}};
const bluetooth_v2_shlib::Addr kGoodBytes3 = {
{0xf6, 0xe5, 0xd4, 0xc3, 0xb2, 0xa1}};
bluetooth_v2_shlib::Addr addr;
EXPECT_FALSE(ParseAddr(kBadAddr1, &addr));
EXPECT_FALSE(ParseAddr(kBadAddr2, &addr));
EXPECT_TRUE(ParseAddr(kGoodAddr1, &addr));
EXPECT_EQ(kGoodBytes1, addr);
EXPECT_EQ(kGoodAddr1, AddrToString(addr));
EXPECT_TRUE(ParseAddr(kGoodAddr2, &addr));
EXPECT_EQ(kGoodBytes1, addr);
EXPECT_EQ(kGoodAddr1, AddrToString(addr));
EXPECT_TRUE(ParseAddr(kGoodAddr3, &addr));
EXPECT_EQ(kGoodBytes3, addr);
EXPECT_EQ(kGoodAddr4, AddrToString(addr));
}
TEST(BluetoothUtilTest, UuidStringConversion) {
const char kBadUuid1[] = "hello";
const char kBadUuid2[] = "a822c885-af02-c780-9d4d-bd9a1fa06d9z";
const char kBadUuid3[] = "00000000-0000-0000-0000-0x0000000000";
const char kBadUuid4[] = "123e-567-e89b-12d3-a456-426655440000";
const char kBadUuid5[] = "123e456--e89b-12d3-a456-426655440000";
const char kBadUuid6[] = "123e4567--e89b-12d3-a456-426655440000";
const char kUuid1[] = "123e4567-e89b-12d3-a456-426655440000";
const char kUuid2[] = "123E4567-E89B-12D3-A456-426655440000";
const char kUuid3[] = "a822c885-af02-c780-9d4d-bd9a1fa06d93";
const char kUuid4[] = "FE34";
const char kUuid5[] = "a822c885af02c7809d4dbd9a1fa06d93";
const bluetooth_v2_shlib::Uuid kGoodBytes1 = {
{0x12, 0x3e, 0x45, 0x67, 0xe8, 0x9b, 0x12, 0xd3, 0xa4, 0x56, 0x42, 0x66,
0x55, 0x44, 0x00, 0x00}};
const bluetooth_v2_shlib::Uuid kGoodBytes3 = {
{0xa8, 0x22, 0xc8, 0x85, 0xaf, 0x02, 0xc7, 0x80, 0x9d, 0x4d, 0xbd, 0x9a,
0x1f, 0xa0, 0x6d, 0x93}};
const bluetooth_v2_shlib::Uuid kGoodBytes4 = {
{0x00, 0x00, 0xfe, 0x34, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80,
0x5F, 0x9B, 0x34, 0xFB}};
bluetooth_v2_shlib::Uuid uuid;
EXPECT_FALSE(ParseUuid(kBadUuid1, &uuid));
EXPECT_FALSE(ParseUuid(kBadUuid2, &uuid));
EXPECT_FALSE(ParseUuid(kBadUuid3, &uuid));
EXPECT_FALSE(ParseUuid(kBadUuid4, &uuid));
EXPECT_FALSE(ParseUuid(kBadUuid5, &uuid));
EXPECT_FALSE(ParseUuid(kBadUuid6, &uuid));
EXPECT_TRUE(ParseUuid(kUuid1, &uuid));
EXPECT_EQ(kGoodBytes1, uuid);
EXPECT_EQ(kUuid1, UuidToString(uuid));
EXPECT_TRUE(ParseUuid(kUuid2, &uuid));
EXPECT_EQ(kGoodBytes1, uuid);
EXPECT_EQ(kUuid1, UuidToString(uuid));
EXPECT_TRUE(ParseUuid(kUuid3, &uuid));
EXPECT_EQ(kGoodBytes3, uuid);
EXPECT_EQ(kUuid3, UuidToString(uuid));
EXPECT_TRUE(ParseUuid(kUuid4, &uuid));
EXPECT_EQ(kGoodBytes4, uuid);
EXPECT_TRUE(ParseUuid(kUuid5, &uuid));
EXPECT_EQ(kGoodBytes3, uuid);
EXPECT_EQ(kUuid3, UuidToString(uuid));
}
TEST(BluetoothUtilTest, UuidFromInt16) {
static const bluetooth_v2_shlib::Uuid kExpected = {
{0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80,
0x5F, 0x9B, 0x34, 0xFB}};
EXPECT_EQ(kExpected, UuidFromInt16(0x110a));
}
TEST(BluetoothUtilTest, UuidFromInt32) {
static const bluetooth_v2_shlib::Uuid kExpected = {
{0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80,
0x5F, 0x9B, 0x34, 0xFB}};
EXPECT_EQ(kExpected, UuidFromInt32(0x01020304));
}
} // namespace util
} // namespace bluetooth
} // namespace chromecast