blob: 3bec7e7e6d38cbab4a6237caaa69aef7e2f418a6 [file] [log] [blame]
// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "net-base/mac_address.h"
#include <gtest/gtest.h>
namespace net_base {
namespace {
TEST(MacAddress, constructor) {
constexpr MacAddress default_addr;
EXPECT_TRUE(default_addr.IsZero());
EXPECT_EQ(default_addr.ToString(), "00:00:00:00:00:00");
constexpr MacAddress addr1(0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc);
EXPECT_FALSE(addr1.IsZero());
EXPECT_EQ(addr1.ToString(), "12:34:56:78:9a:bc");
constexpr std::array<uint8_t, 6> bytes = {0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc};
constexpr MacAddress addr2(bytes);
EXPECT_EQ(addr2, addr1);
}
TEST(MacAddress, CreateFromString) {
const auto addr = *MacAddress::CreateFromString("12:34:56:78:9a:bc");
EXPECT_EQ(addr, MacAddress(0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc));
}
TEST(MacAddress, CreateFromBytes) {
const std::vector<uint8_t> bytes = {0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc};
const auto addr1 = *MacAddress::CreateFromBytes(bytes);
EXPECT_EQ(addr1, MacAddress(0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc));
EXPECT_EQ(addr1.ToBytes(), bytes);
const char char_bytes[] = {0x12, 0x23, 0x34, 0x45, 0x56, 0x67};
const auto addr2 = *MacAddress::CreateFromBytes(char_bytes);
EXPECT_EQ(addr2, MacAddress(0x12, 0x23, 0x34, 0x45, 0x56, 0x67));
}
TEST(MacAddress, CmpOps) {
const MacAddress kOrderedAddresses[] = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc},
{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}};
for (size_t i = 0; i < std::size(kOrderedAddresses); ++i) {
for (size_t j = 0; j < std::size(kOrderedAddresses); ++j) {
if (i < j) {
EXPECT_TRUE(kOrderedAddresses[i] < kOrderedAddresses[j]);
} else {
EXPECT_FALSE(kOrderedAddresses[i] < kOrderedAddresses[j]);
}
}
}
}
} // namespace
} // namespace net_base