blob: 3ae3fe9d56081a3a293cd5d88fe13d81707083e7 [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::TimeDelta::FromSeconds(1));
EXPECT_FALSE(addr.IsExpired(start_time));
addr.set_expiration_time(start_time + base::TimeDelta::FromSeconds(10));
EXPECT_FALSE(addr.IsExpired(start_time));
EXPECT_FALSE(addr.IsExpired(start_time + base::TimeDelta::FromSeconds(9)));
EXPECT_FALSE(addr.IsExpired(start_time + base::TimeDelta::FromSeconds(10)));
EXPECT_TRUE(addr.IsExpired(start_time + base::TimeDelta::FromSeconds(11)));
}
} // namespace shill