mirror of
https://github.com/kidfromjupiter/nearby.git
synced 2026-09-14 14:46:12 -04:00
179 lines
5.4 KiB
C++
179 lines
5.4 KiB
C++
// Copyright 2020 Google LLC
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// https://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#include "internal/platform/uuid.h"
|
|
|
|
#include <array>
|
|
#include <cstdint>
|
|
#include <optional>
|
|
#include <string>
|
|
|
|
#include "gmock/gmock.h"
|
|
#include "protobuf-matchers/protocol-buffer-matchers.h"
|
|
#include "gtest/gtest.h"
|
|
#include "absl/strings/string_view.h"
|
|
#include "internal/platform/crypto.h"
|
|
#include "internal/platform/logging.h"
|
|
|
|
namespace nearby {
|
|
namespace {
|
|
|
|
using ::testing::StrCaseEq;
|
|
|
|
constexpr absl::string_view kString{"some string"};
|
|
constexpr std::uint64_t kCopresenceServiceUuidMsb = 0x0000FEF300001000;
|
|
constexpr std::uint64_t kCopresenceServiceUuidLsb = 0x800000805F9B34FB;
|
|
|
|
TEST(UuidTest, ConstructorWorks) {
|
|
Uuid uuid_1;
|
|
|
|
EXPECT_TRUE(uuid_1.IsEmpty());
|
|
|
|
Uuid uuid_2("test");
|
|
|
|
EXPECT_FALSE(uuid_2.IsEmpty());
|
|
|
|
Uuid uuid_3(1234, 5678);
|
|
|
|
EXPECT_FALSE(uuid_3.IsEmpty());
|
|
}
|
|
|
|
TEST(UuidTest, CreateFromStringWithMd5) {
|
|
Uuid uuid(kString);
|
|
std::string uuid_str(uuid);
|
|
std::array<char, 16> uuid_data = uuid.data();
|
|
std::string md5_data(Crypto::Md5(kString));
|
|
LOG(INFO) << "MD5-based UUID: " << uuid_str;
|
|
uuid_data[6] = 0;
|
|
uuid_data[8] = 0;
|
|
md5_data[6] = 0;
|
|
md5_data[8] = 0;
|
|
EXPECT_EQ(std::string(uuid_data.data(), uuid_data.size()), md5_data);
|
|
}
|
|
|
|
TEST(UuidTest, CreateFromBinaryCanOutputString) {
|
|
Uuid uuid(kCopresenceServiceUuidMsb, kCopresenceServiceUuidLsb);
|
|
std::array<char, 16> uuid_data = uuid.data();
|
|
std::string uuid_str(uuid);
|
|
LOG(INFO) << "UUID: " << uuid_str;
|
|
EXPECT_EQ(uuid_data[0],
|
|
static_cast<char>((kCopresenceServiceUuidMsb >> 56) & 0xFF));
|
|
EXPECT_EQ(uuid_data[1],
|
|
static_cast<char>((kCopresenceServiceUuidMsb >> 48) & 0xFF));
|
|
EXPECT_EQ(uuid_data[2],
|
|
static_cast<char>((kCopresenceServiceUuidMsb >> 40) & 0xFF));
|
|
EXPECT_EQ(uuid_data[3],
|
|
static_cast<char>((kCopresenceServiceUuidMsb >> 32) & 0xFF));
|
|
EXPECT_EQ(uuid_data[4],
|
|
static_cast<char>((kCopresenceServiceUuidMsb >> 24) & 0xFF));
|
|
EXPECT_EQ(uuid_data[5],
|
|
static_cast<char>((kCopresenceServiceUuidMsb >> 16) & 0xFF));
|
|
EXPECT_EQ(uuid_data[6],
|
|
static_cast<char>((kCopresenceServiceUuidMsb >> 8) & 0xFF));
|
|
EXPECT_EQ(uuid_data[7],
|
|
static_cast<char>((kCopresenceServiceUuidMsb >> 0) & 0xFF));
|
|
EXPECT_EQ(uuid_data[8],
|
|
static_cast<char>((kCopresenceServiceUuidLsb >> 56) & 0xFF));
|
|
EXPECT_EQ(uuid_data[9],
|
|
static_cast<char>((kCopresenceServiceUuidLsb >> 48) & 0xFF));
|
|
EXPECT_EQ(uuid_data[10],
|
|
static_cast<char>((kCopresenceServiceUuidLsb >> 40) & 0xFF));
|
|
EXPECT_EQ(uuid_data[11],
|
|
static_cast<char>((kCopresenceServiceUuidLsb >> 32) & 0xFF));
|
|
EXPECT_EQ(uuid_data[12],
|
|
static_cast<char>((kCopresenceServiceUuidLsb >> 24) & 0xFF));
|
|
EXPECT_EQ(uuid_data[13],
|
|
static_cast<char>((kCopresenceServiceUuidLsb >> 16) & 0xFF));
|
|
EXPECT_EQ(uuid_data[14],
|
|
static_cast<char>((kCopresenceServiceUuidLsb >> 8) & 0xFF));
|
|
EXPECT_EQ(uuid_data[15],
|
|
static_cast<char>((kCopresenceServiceUuidLsb >> 0) & 0xFF));
|
|
|
|
EXPECT_THAT(uuid_str, StrCaseEq("0000FEF3-0000-1000-8000-00805F9B34FB"));
|
|
EXPECT_THAT(uuid.Get16BitAsString(), StrCaseEq("FEF3"));
|
|
}
|
|
|
|
TEST(UuidTest, ComparisonEqualWorksForMsbAndLsb) {
|
|
Uuid uuid_1(kCopresenceServiceUuidMsb, kCopresenceServiceUuidLsb);
|
|
Uuid uuid_2(kCopresenceServiceUuidMsb, kCopresenceServiceUuidLsb);
|
|
|
|
EXPECT_EQ(uuid_1, uuid_2);
|
|
|
|
Uuid uuid_3(1234, 5678);
|
|
Uuid uuid_4(8765, 4321);
|
|
|
|
EXPECT_FALSE(uuid_3 == uuid_4);
|
|
}
|
|
|
|
TEST(UuidTest, ComparisonEqualWorksForString) {
|
|
Uuid uuid_1("uuid");
|
|
Uuid uuid_2("uuid");
|
|
|
|
EXPECT_EQ(uuid_1, uuid_2);
|
|
|
|
Uuid uuid_3("foo");
|
|
Uuid uuid_4("loo");
|
|
|
|
EXPECT_FALSE(uuid_3 == uuid_4);
|
|
}
|
|
|
|
TEST(UuidTest, OperatorGreaterThan) {
|
|
Uuid a("12345678-1234-1234-1234-123456789012");
|
|
Uuid b("12345678-1234-1234-1234-123456789013");
|
|
|
|
EXPECT_TRUE(a < b);
|
|
}
|
|
|
|
TEST(UuidTest, ConstructUuidFromString) {
|
|
std::optional<Uuid> a =
|
|
Uuid::FromString("12345678-1234-1234-1234-123456789012");
|
|
|
|
ASSERT_TRUE(a.has_value());
|
|
EXPECT_EQ(std::string(*a), "12345678-1234-1234-1234-123456789012");
|
|
}
|
|
|
|
TEST(UuidTest, GetBtUuid16Succeeds) {
|
|
std::optional<Uuid> a =
|
|
Uuid::FromString("0000ABCD-0000-1000-8000-00805F9B34FB");
|
|
ASSERT_TRUE(a.has_value());
|
|
|
|
std::optional<uint16_t> bt_uuid16 = a->GetBtUuid16();
|
|
|
|
ASSERT_TRUE(bt_uuid16.has_value());
|
|
EXPECT_EQ(bt_uuid16, 0xABCD);
|
|
}
|
|
|
|
TEST(UuidTest, GetBtUuid16FailsMsb) {
|
|
std::optional<Uuid> a =
|
|
Uuid::FromString("0100ABCD-0000-1000-8000-00805F9B34FB");
|
|
ASSERT_TRUE(a.has_value());
|
|
|
|
std::optional<uint16_t> bt_uuid16 = a->GetBtUuid16();
|
|
|
|
EXPECT_FALSE(bt_uuid16.has_value());
|
|
}
|
|
|
|
TEST(UuidTest, GetBtUuid16FailsLsb) {
|
|
std::optional<Uuid> a =
|
|
Uuid::FromString("0000ABCD-0000-1000-8000-00905F9B34FB");
|
|
ASSERT_TRUE(a.has_value());
|
|
|
|
std::optional<uint16_t> bt_uuid16 = a->GetBtUuid16();
|
|
|
|
EXPECT_FALSE(bt_uuid16.has_value());
|
|
}
|
|
|
|
} // namespace
|
|
} // namespace nearby
|