Commit 7da6edea authored by Tomek Mrugalski's avatar Tomek Mrugalski 🛰

[3555] Lease6::matches now checks hwaddr

parent cb2fc012
......@@ -277,6 +277,18 @@ Lease4::operator==(const Lease4& other) const {
bool
Lease6::matches(const Lease6& other) const {
// One lease has a hardware address, the other doesn't.
if ( (!hwaddr_ && other.hwaddr_) ||
(hwaddr_ && !other.hwaddr_) ) {
return (false);
}
// Both leases have hardware address, but they are not equal.
if (hwaddr_ && (*hwaddr_ != *other.hwaddr_)) {
return (false);
}
return (addr_ == other.addr_ &&
type_ == other.type_ &&
prefixlen_ == other.prefixlen_ &&
......
......@@ -575,6 +575,34 @@ TEST(Lease6, matches) {
lease1.duid_ = duid;
EXPECT_FALSE(lease1.matches(lease2));
lease1.duid_ = lease2.duid_;
// Hardware address checks
EXPECT_TRUE(lease1.matches(lease2)); // Neither lease have hardware address.
// Let's add a hardware lease to the first one.
HWAddrPtr hwaddr(new HWAddr(HWADDR, sizeof(HWADDR), HTYPE_ETHER));
lease1.hwaddr_ = hwaddr;
// Only the first one has a hardware address, so not equal.
EXPECT_FALSE(lease1.matches(lease2));
// Only the second one has it, so still not equal.
lease1.hwaddr_.reset();
lease2.hwaddr_ = hwaddr;
EXPECT_FALSE(lease1.matches(lease2));
// Ok, now both have it - they should be equal.
lease1.hwaddr_ = hwaddr;
EXPECT_TRUE(lease1.matches(lease2));
// Let's create a second instance that have the same values.
HWAddrPtr hwaddr2(new HWAddr(HWADDR, sizeof(HWADDR), HTYPE_ETHER));
lease2.hwaddr_ = hwaddr2;
EXPECT_TRUE(lease1.matches(lease2));
// Let's modify the second address and check that they won't be equal anymore.
hwaddr2->hwaddr_[0]++;
EXPECT_FALSE(lease1.matches(lease2));
}
/// @brief Lease6 Equality Test
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment