blob: 025fe807f3b9d47a89b59c7f78870658fe2e880e [file] [log] [blame]
// Copyright 2017 The Fuchsia 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 <gtest/gtest.h>
#include <lib/fidl/cpp/array.h>
#include <wlan/common/macaddr.h>
namespace wlan {
namespace common {
namespace {
class MacAddrTest : public ::testing::Test {
protected:
};
TEST_F(MacAddrTest, Some) {
MacAddr zero_addr;
zero_addr.Set(kZeroMac);
EXPECT_EQ(0x00, zero_addr.byte[0]);
EXPECT_EQ(true, zero_addr.IsZero());
MacAddr bcast_addr;
bcast_addr.Set(kBcastMac);
EXPECT_EQ(0xff, bcast_addr.byte[0]);
EXPECT_EQ(true, bcast_addr.IsBcast());
EXPECT_EQ(true, bcast_addr.IsMcast());
EXPECT_EQ(false, bcast_addr.IsZero());
EXPECT_EQ(true, bcast_addr.IsLocalAdmin());
EXPECT_EQ(true, bcast_addr > kZeroMac);
EXPECT_EQ(false, bcast_addr < kZeroMac);
EXPECT_EQ(true, bcast_addr.IsGroupAddr());
MacAddr addr2({0x48, 0x0f, 0xcf, 0x54, 0xb9, 0xb1});
EXPECT_EQ(false, addr2.IsMcast());
EXPECT_EQ(false, addr2.IsBcast());
EXPECT_EQ(false, addr2.IsZero());
EXPECT_EQ(true, addr2 > kZeroMac);
EXPECT_EQ(false, addr2 < kZeroMac);
EXPECT_EQ(false, addr2 > kBcastMac);
EXPECT_EQ(true, addr2 < kBcastMac);
}
TEST_F(MacAddrTest, Constructors) {
uint8_t arr[kMacAddrLen] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06};
MacAddr addr1(arr);
MacAddr addr2;
addr2.Set(arr);
std::string str = "01:02:03:04:05:06";
MacAddr addr3(str);
MacAddr addr4;
addr4.Set(str);
MacAddr addr5({0x01, 0x02, 0x03, 0x04, 0x05, 0x06});
MacAddr addr6("01:02:03:04:05:06");
MacAddr addr7(addr6);
const MacAddr& addr8 = addr7;
MacAddr addr9;
addr9 = addr8;
::fidl::Array<uint8_t, 6> fidl_addr;
memcpy(fidl_addr.mutable_data(), addr8.byte, kMacAddrLen);
MacAddr addr10(fidl_addr);
EXPECT_EQ(true, addr1 == addr2);
EXPECT_EQ(false, addr1 != addr2);
EXPECT_EQ(true, addr2 == addr3);
EXPECT_EQ(true, addr3 == addr4);
EXPECT_EQ(true, addr4 == addr5);
EXPECT_EQ(true, addr5 == addr6);
EXPECT_EQ(true, addr6 == addr7);
EXPECT_EQ(true, addr7 == addr1);
EXPECT_EQ(true, addr8 == MacAddr(arr));
EXPECT_EQ(true, addr9 == addr8);
EXPECT_EQ(true, addr10 == addr9);
}
TEST_F(MacAddrTest, Conversion) {
uint8_t arr[kMacAddrLen] = {0x00};
MacAddr addr({0x11, 0x22, 0x33, 0x44, 0x55, 0x66});
addr.CopyTo(arr);
EXPECT_EQ(true, arr[0] == 0x11 && arr[1] == 0x22 && arr[2] == 0x33 && arr[3] == 0x44 &&
arr[4] == 0x55 && arr[5] == 0x66);
EXPECT_EQ(true, memcmp(addr.byte, arr, kMacAddrLen) == 0);
MacAddr addr2;
addr2.Set(arr);
EXPECT_EQ(true, addr == addr2);
MacAddr addr3(addr.ToU64());
EXPECT_EQ(true, addr == addr3);
uint64_t val = 0x0102030405060708;
MacAddr addr4(val);
EXPECT_EQ(false, addr == addr4);
}
} // namespace
} // namespace common
} // namespace wlan