blob: 5a9df33122cb074f36913e98a7f9e64921fdee43 [file] [log] [blame]
// Copyright 2018 The Chromium OS 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 "bluetooth/newblued/uuid.h"
#include <stdint.h>
#include <algorithm>
#include <array>
#include <vector>
#include <gtest/gtest.h>
namespace bluetooth {
TEST(UUIDTest, UuidConstruction) {
std::vector<uint8_t> value_invalid = {0x01, 0x02, 0x03};
std::vector<uint8_t> value16 = {0x01, 0x02};
std::array<uint8_t, 16> uuid16_value = {
0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x10, 0x00,
0x80, 0x00, 0x00, 0x80, 0x5f, 0x9b, 0x34, 0xfb,
};
std::vector<uint8_t> value32 = {0x01, 0x02, 0x03, 0x04};
std::array<uint8_t, 16> uuid32_value = {
0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x10, 0x00,
0x80, 0x00, 0x00, 0x80, 0x5f, 0x9b, 0x34, 0xfb,
};
std::vector<uint8_t> value128 = {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15,
};
std::array<uint8_t, 16> uuid128_value;
std::copy(value128.begin(), value128.end(), uuid128_value.begin());
Uuid uuid16(value16);
Uuid uuid32(value32);
Uuid uuid128(value128);
Uuid uuid_invalid(value_invalid);
EXPECT_EQ(UuidFormat::UUID16, uuid16.format());
EXPECT_EQ(UuidFormat::UUID32, uuid32.format());
EXPECT_EQ(UuidFormat::UUID128, uuid128.format());
EXPECT_EQ(UuidFormat::UUID_INVALID, uuid_invalid.format());
EXPECT_EQ(uuid16_value, uuid16.value());
EXPECT_EQ(uuid32_value, uuid32.value());
EXPECT_EQ(uuid128_value, uuid128.value());
Uuid uuid_16("0102");
Uuid uuid_16_invalid("102");
EXPECT_EQ(UuidFormat::UUID16, uuid_16.format());
EXPECT_EQ(uuid16_value, uuid_16.value());
EXPECT_EQ(UuidFormat::UUID_INVALID, uuid_16_invalid.format());
Uuid uuid_32("01020304");
Uuid uuid_32_invalid("0102030405");
EXPECT_EQ(UuidFormat::UUID32, uuid_32.format());
EXPECT_EQ(uuid32_value, uuid_32.value());
EXPECT_EQ(UuidFormat::UUID_INVALID, uuid_32_invalid.format());
Uuid uuid_128("00010203-0405-0607-0809-101112131415");
Uuid uuid_too_long("00010203-0405-0607-0809-1011-1213-1415");
Uuid uuid_too_short("00010203-0405-0607-0809101112131415");
Uuid uuid_non_digit("00010203-0405-0607-0809-1011-2131415");
Uuid uuid_misplaced("0001-002030405-0607-0809-101112131415");
Uuid uuid_at("00010203-0405-0607@0809-101112131415");
EXPECT_EQ(UuidFormat::UUID128, uuid_128.format());
EXPECT_EQ(uuid128_value, uuid_128.value());
EXPECT_EQ(UuidFormat::UUID_INVALID, uuid_too_long.format());
EXPECT_EQ(UuidFormat::UUID_INVALID, uuid_too_short.format());
EXPECT_EQ(UuidFormat::UUID_INVALID, uuid_non_digit.format());
EXPECT_EQ(UuidFormat::UUID_INVALID, uuid_misplaced.format());
EXPECT_EQ(UuidFormat::UUID_INVALID, uuid_at.format());
Uuid uuid_empty;
EXPECT_EQ(UuidFormat::UUID_INVALID, uuid_empty.format());
}
TEST(UUIDTest, UuidOperators) {
std::vector<uint8_t> value16 = {0x01, 0x02};
std::vector<uint8_t> value16_in_128 = {
0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x10, 0x00,
0x80, 0x00, 0x00, 0x80, 0x5f, 0x9b, 0x34, 0xfb,
};
std::vector<uint8_t> value32 = {0x01, 0x02, 0x03, 0x04};
std::vector<uint8_t> value_invalid1 = {0x01};
std::vector<uint8_t> value_invalid2 = {0x01, 0x02, 0x03};
Uuid uuid16(value16);
Uuid uuid16_in_128(value16_in_128);
Uuid uuid32(value32);
Uuid uuid_invalid1(value_invalid1);
Uuid uuid_invalid2(value_invalid2);
EXPECT_EQ(uuid16, uuid16_in_128);
EXPECT_NE(uuid16, uuid_invalid1);
EXPECT_NE(uuid16, uuid32);
EXPECT_FALSE(uuid_invalid1 < uuid_invalid2);
EXPECT_LT(uuid_invalid1, uuid16);
EXPECT_LT(uuid16, uuid32);
}
} // namespace bluetooth