blob: 5769df8d3f1271a0c721b8d7ddc67112d3912dc4 [file] [log] [blame]
// Copyright 2021 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 "shill/mac_address.h"
#include <cstdio>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
using testing::Test;
namespace shill {
class MACAddressTest : public Test {
public:
MACAddressTest() = default;
~MACAddressTest() override = default;
};
TEST_F(MACAddressTest, SetClear) {
MACAddress addr;
EXPECT_FALSE(addr.is_set());
EXPECT_EQ(addr.ToString(), "<UNSET>");
addr.Set("abcd");
EXPECT_FALSE(addr.is_set());
addr.Set("aa:bb:cc:dd:ee:ff");
EXPECT_TRUE(addr.is_set());
EXPECT_EQ(addr.ToString(), "aa:bb:cc:dd:ee:ff");
addr.Clear();
EXPECT_FALSE(addr.is_set());
}
TEST_F(MACAddressTest, Randomize) {
static constexpr auto kMulticastBit = 1 << 0;
static constexpr auto kLocallyAdministeredBit = 1 << 1;
MACAddress addr;
EXPECT_FALSE(addr.is_set());
EXPECT_EQ(addr.ToString(), "<UNSET>");
addr.Randomize();
EXPECT_TRUE(addr.is_set());
uint8_t msb;
EXPECT_EQ(sscanf(addr.ToString().substr(0, 2).c_str(), "%02hhx", &msb), 1);
EXPECT_EQ(msb & (kMulticastBit | kLocallyAdministeredBit),
kLocallyAdministeredBit);
addr.Clear();
EXPECT_FALSE(addr.is_set());
}
TEST_F(MACAddressTest, AddressExpire) {
MACAddress addr;
addr.Randomize();
EXPECT_TRUE(addr.is_set());
auto start_time = base::Time::FromDeltaSinceWindowsEpoch(base::Seconds(1));
EXPECT_FALSE(addr.IsExpired(start_time));
addr.set_expiration_time(start_time + base::Seconds(10));
EXPECT_FALSE(addr.IsExpired(start_time));
EXPECT_FALSE(addr.IsExpired(start_time + base::Seconds(9)));
EXPECT_FALSE(addr.IsExpired(start_time + base::Seconds(10)));
EXPECT_TRUE(addr.IsExpired(start_time + base::Seconds(11)));
}
} // namespace shill