Commit 495d4e2f authored by Stephen Morris's avatar Stephen Morris

[2404] More changes as a result of review

Including:
* Updates to comments etc.
* Addition of Lease4::operator==() (and associated unit tests)
parent ef364ccb
......@@ -72,6 +72,11 @@ COMMIT;
# This table is only modified during schema upgrades. For historical reasons
# (related to the names of the columns in the BIND 10 DNS database file), the
# first column is called "version" and not "major".
#
# NOTE: this MUST be kept in step with src/lib/dhcpsrv/tests/schema_copy.h,
# which defines the schema for the unit tests. If you are updating
# the version number, the schema has changed: please ensure that
# schema_copy.h has been updated as well.
CREATE TABLE schema_version (
version INT PRIMARY KEY NOT NULL, # Major version number
minor INT # Minor version number
......
......@@ -29,7 +29,8 @@
using namespace std;
using namespace isc::dhcp;
namespace isc {
namespace dhcp {
Lease6::Lease6(LeaseType type, const isc::asiolink::IOAddress& addr,
DuidPtr duid, uint32_t iaid, uint32_t preferred, uint32_t valid,
......@@ -82,17 +83,47 @@ Lease6::toText() {
return (stream.str());
}
bool
Lease4::operator==(const Lease4& other) const {
return (
addr_ == other.addr_ &&
ext_ == other.ext_ &&
hwaddr_ == other.hwaddr_ &&
*client_id_ == *other.client_id_ &&
t1_ == other.t1_ &&
t2_ == other.t2_ &&
valid_lft_ == other.valid_lft_ &&
cltt_ == other.cltt_ &&
subnet_id_ == other.subnet_id_ &&
fixed_ == other.fixed_ &&
hostname_ == other.hostname_ &&
fqdn_fwd_ == other.fqdn_fwd_ &&
fqdn_rev_ == other.fqdn_rev_ &&
comments_ == other.comments_
);
}
bool
Lease6::operator==(const Lease6& other) const {
return (
type_ == other.type_ &&
addr_ == other.addr_ &&
type_ == other.type_ &&
prefixlen_ == other.prefixlen_ &&
iaid_ == other.iaid_ &&
*duid_ == *other.duid_ &&
preferred_lft_ == other.preferred_lft_ &&
valid_lft_ == other.valid_lft_ &&
t1_ == other.t1_ &&
t2_ == other.t2_ &&
cltt_ == other.cltt_ &&
subnet_id_ == other.subnet_id_
);
subnet_id_ == other.subnet_id_ &&
fixed_ == other.fixed_ &&
hostname_ == other.hostname_ &&
fqdn_fwd_ == other.fqdn_fwd_ &&
fqdn_rev_ == other.fqdn_rev_ &&
comments_ == other.comments_
);
}
} // namespace isc::dhcp
} // namespace isc
......@@ -183,7 +183,7 @@ struct Lease4 {
/// consistent T1 and T2 values. This is specified in seconds since cltt.
uint32_t t2_;
/// @brief Ralid lifetime
/// @brief Valid lifetime
///
/// Expressed as number of seconds since cltt.
uint32_t valid_lft_;
......@@ -225,6 +225,18 @@ struct Lease4 {
/// system administrator.
std::string comments_;
/// @brief Compare two leases for equality
///
/// @param other lease6 object with which to compare
bool operator==(const Lease4& other) const;
/// @brief Compare two leases for inequality
///
/// @param other lease6 object with which to compare
bool operator!=(const Lease4& other) const {
return (!operator==(other));
}
/// @todo: Add DHCPv4 failover related fields here
};
......@@ -279,7 +291,7 @@ struct Lease6 {
uint32_t iaid_;
/// @brief Client identifier
boost::shared_ptr<DUID> duid_;
DuidPtr duid_;
/// @brief preferred lifetime
///
......@@ -373,7 +385,6 @@ struct Lease6 {
bool operator!=(const Lease6& other) const {
return (!operator==(other));
}
};
/// @brief Pointer to a Lease6 structure.
......
......@@ -885,9 +885,8 @@ MySqlLeaseMgr::MySqlLeaseMgr(const LeaseMgr::ParameterMap& parameters)
// Enable autocommit. To avoid a flush to disk on every commit, the global
// parameter innodb_flush_log_at_trx_commit should be set to 2. This will
// cause the changes to be written to the log, but flushed to disk in the
// background every second or so. Setting the parameter to that value will
// speed up the system, but at the risk of losing data if the system
// crashes.
// background every second. Setting the parameter to that value will speed
// up the system, but at the risk of losing data if the system crashes.
my_bool result = mysql_autocommit(mysql_, 1);
if (result != 0) {
isc_throw(DbOperationError, mysql_error(mysql_));
......@@ -988,7 +987,7 @@ MySqlLeaseMgr::openDatabase() {
shost = getParameter("host");
host = shost.c_str();
} catch (...) {
; // No host. Fine, we'll use "localhost"
// No host. Fine, we'll use "localhost"
}
const char* user = NULL;
......@@ -997,7 +996,7 @@ MySqlLeaseMgr::openDatabase() {
suser = getParameter("user");
user = suser.c_str();
} catch (...) {
; // No user. Fine, we'll use NULL
// No user. Fine, we'll use NULL
}
const char* password = NULL;
......@@ -1006,7 +1005,7 @@ MySqlLeaseMgr::openDatabase() {
spassword = getParameter("password");
password = spassword.c_str();
} catch (...) {
; // No password. Fine, we'll use NULL
// No password. Fine, we'll use NULL
}
const char* name = NULL;
......@@ -1098,7 +1097,7 @@ MySqlLeaseMgr::prepareStatements() {
}
// Add leases to the database. The two public methods accept a lease object
// (of different types), bind the contents to the appropriate prepared
// (either V4 of V6), bind the contents to the appropriate prepared
// statement, then call common code to execute the statement.
bool
......@@ -1195,9 +1194,6 @@ void MySqlLeaseMgr::getLeaseCollection(StatementIndex stindex,
status = mysql_stmt_store_result(statements_[stindex]);
checkError(status, stindex, "unable to set up for storing all results");
// Initialize for returning the data
result.clear();
// Set up the fetch "release" object to release resources associated
// with the call to mysql_stmt_fetch when this method exits, then
// retrieve the data.
......@@ -1659,7 +1655,7 @@ MySqlLeaseMgr::getName() const {
try {
name = getParameter("name");
} catch (...) {
;
// Return an empty name
}
return (name);
}
......
......@@ -31,7 +31,7 @@ const uint32_t CURRENT_VERSION_VERSION = 1;
const uint32_t CURRENT_VERSION_MINOR = 0;
// Forward declaration of the Lease exchange objects. This class is defined
// Forward declaration of the Lease exchange objects. These classes are defined
// in the .cc file.
class MySqlLease4Exchange;
class MySqlLease6Exchange;
......@@ -419,13 +419,13 @@ public:
DELETE_LEASE4, // Delete from lease4 by address
DELETE_LEASE6, // Delete from lease6 by address
GET_LEASE4_ADDR, // Get lease4 by address
GET_LEASE4_CLIENTID, // Get lease4 by Client ID
GET_LEASE4_CLIENTID_SUBID, // Get lease4 by Client ID
GET_LEASE4_CLIENTID, // Get lease4 by client ID
GET_LEASE4_CLIENTID_SUBID, // Get lease4 by client ID & subnet ID
GET_LEASE4_HWADDR, // Get lease4 by HW address
GET_LEASE4_HWADDR_SUBID, // Get lease4 by HW address & subnet ID
GET_LEASE6_ADDR, // Get lease6 by address
GET_LEASE6_DUID_IAID, // Get lease6 by DUID and IAID
GET_LEASE6_DUID_IAID_SUBID, // Get lease6 by DUID, IAID and Subnet ID
GET_LEASE6_DUID_IAID_SUBID, // Get lease6 by DUID, IAID and subnet ID
GET_VERSION, // Obtain version number
INSERT_LEASE4, // Add entry to lease4 table
INSERT_LEASE6, // Add entry to lease6 table
......@@ -472,9 +472,9 @@ private:
/// @brief Add Lease Common Code
///
/// This method performs the common actions for both flavours of the
/// addLease method. It binds the contents of the lease object to
/// the prepated statement and adds it to the database.
/// This method performs the common actions for both flavours (V4 and V6)
/// of the addLease method. It binds the contents of the lease object to
/// the prepared statement and adds it to the database.
///
/// @param stindex Index of statemnent being executed
/// @param bind MYSQL_BIND array that has been created for the type
......@@ -495,8 +495,9 @@ private:
/// @param stindex Index of statement being executed
/// @param bind MYSQL_BIND array for input parameters
/// @param exchange Exchange object to use
/// @param lease LeaseCollection object returned. Note that any data in
/// the collection is cleared before new data is added.
/// @param lease LeaseCollection object returned. Note that any leases in
/// the collection when this method is called are not erased: the
/// new data is appended to the end.
/// @param single If true, only a single data item is to be retrieved.
/// If more than one is present, a MultipleRecords exception will
/// be thrown.
......@@ -518,8 +519,9 @@ private:
///
/// @param stindex Index of statement being executed
/// @param bind MYSQL_BIND array for input parameters
/// @param lease LeaseCollection object returned. Note that any data in
/// the collection is cleared before new data is added.
/// @param lease LeaseCollection object returned. Note that any leases in
/// the collection when this method is called are not erased: the
/// new data is appended to the end.
///
/// @throw isc::dhcp::BadValue Data retrieved from the database was invalid.
/// @throw isc::dhcp::DbOperationError An operation on the open database has
......@@ -538,8 +540,8 @@ private:
///
/// @param stindex Index of statement being executed
/// @param bind MYSQL_BIND array for input parameters
/// @param lease LeaseCollection object returned. Note that any data in
/// the collection is cleared before new data is added.
/// @param lease LeaseCollection object returned. Note that any existing
/// data in the collection is erased first.
///
/// @throw isc::dhcp::BadValue Data retrieved from the database was invalid.
/// @throw isc::dhcp::DbOperationError An operation on the open database has
......@@ -551,7 +553,7 @@ private:
getLeaseCollection(stindex, bind, exchange6_, result);
}
/// @brief Get Lease6 Common Code
/// @brief Get Lease4 Common Code
///
/// This method performs the common actions for the various getLease4()
/// methods. It acts as an interface to the getLeaseCollection() method,
......@@ -563,9 +565,9 @@ private:
void getLease(StatementIndex stindex, MYSQL_BIND* bind,
Lease4Ptr& result) const;
/// @brief Get Lease4 Common Code
/// @brief Get Lease6 Common Code
///
/// This method performs the common actions for the various getLease4()
/// This method performs the common actions for the various getLease46)
/// methods. It acts as an interface to the getLeaseCollection() method,
/// but retrieveing only a single lease.
///
......
// Copyright (C) 2011-2012 Internet Systems Consortium, Inc. ("ISC")
// Copyright (C) 2012 Internet Systems Consortium, Inc. ("ISC")
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
......
// Copyright (C) 2011-2012 Internet Systems Consortium, Inc. ("ISC")
// Copyright (C) 2012 Internet Systems Consortium, Inc. ("ISC")
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
......@@ -238,16 +238,12 @@ public:
};
namespace {
// empty class for now, but may be extended once Addr6 becomes bigger
class LeaseMgrTest : public ::testing::Test {
public:
LeaseMgrTest() {
}
};
// This test checks if the LeaseMgr can be instantiated and that it
// parses parameters string properly.
TEST_F(LeaseMgrTest, getParameter) {
/// @brief getParameter test
///
/// This test checks if the LeaseMgr can be instantiated and that it
/// parses parameters string properly.
TEST(LeaseMgr, getParameter) {
LeaseMgr::ParameterMap pmap;
pmap[std::string("param1")] = std::string("value1");
......@@ -263,7 +259,9 @@ TEST_F(LeaseMgrTest, getParameter) {
// are purely virtual, so we would only call ConcreteLeaseMgr methods.
// Those methods are just stubs that do not return anything.
// Lease4 is also defined in lease_mgr.h, so is tested in this file as well.
/// @brief Lease4 Constructor Test
///
/// Lease4 is also defined in lease_mgr.h, so is tested in this file as well.
// This test checks if the Lease4 structure can be instantiated correctly
TEST(Lease4, Lease4Constructor) {
......@@ -278,61 +276,351 @@ TEST(Lease4, Lease4Constructor) {
// ...and a time
const time_t current_time = time(NULL);
// Other random constants
const uint32_t ADDRESS = 103478;
const uint32_t VALID_LIFETIME = 10986;
// Other random constants.
const uint32_t SUBNET_ID = 42;
const uint32_t VALID_LIFETIME = 500;
// We want to check that various addresses work, so let's iterate over
// these.
const uint32_t ADDRESS[] = {
0x00000000, 0x01020304, 0x7fffffff, 0x80000000, 0x80000001, 0xffffffff
};
for (int i = 0; i < sizeof(ADDRESS) / sizeof(ADDRESS[0]); ++i) {
// Create the lease
Lease4 lease(ADDRESS[i], HWADDR, sizeof(HWADDR),
CLIENTID, sizeof(CLIENTID), VALID_LIFETIME, current_time,
SUBNET_ID);
EXPECT_EQ(ADDRESS[i], static_cast<uint32_t>(lease.addr_));
EXPECT_EQ(0, lease.ext_);
EXPECT_TRUE(hwaddr == lease.hwaddr_);
EXPECT_TRUE(clientid == *lease.client_id_);
EXPECT_EQ(0, lease.t1_);
EXPECT_EQ(0, lease.t2_);
EXPECT_EQ(VALID_LIFETIME, lease.valid_lft_);
EXPECT_EQ(current_time, lease.cltt_);
EXPECT_EQ(SUBNET_ID, lease.subnet_id_);
EXPECT_FALSE(lease.fixed_);
EXPECT_TRUE(lease.hostname_.empty());
EXPECT_FALSE(lease.fqdn_fwd_);
EXPECT_FALSE(lease.fqdn_rev_);
EXPECT_TRUE(lease.comments_.empty());
}
}
/// @brief Lease4 Equality Test
///
/// Checks that the operator==() correctly compares two leases for equality.
/// As operator!=() is also defined for this class, every check on operator==()
/// is followed by the reverse check on operator!=().
TEST(Lease4, OperatorEquals) {
// Create the lease
Lease4 lease(ADDRESS, HWADDR, sizeof(HWADDR), CLIENTID, sizeof(CLIENTID),
VALID_LIFETIME, current_time, SUBNET_ID);
EXPECT_EQ(ADDRESS, static_cast<uint32_t>(lease.addr_));
EXPECT_EQ(0, lease.ext_);
EXPECT_TRUE(hwaddr == lease.hwaddr_);
EXPECT_TRUE(clientid == *lease.client_id_);
EXPECT_EQ(0, lease.t1_);
EXPECT_EQ(0, lease.t2_);
EXPECT_EQ(VALID_LIFETIME, lease.valid_lft_);
EXPECT_EQ(current_time, lease.cltt_);
EXPECT_EQ(SUBNET_ID, lease.subnet_id_);
EXPECT_FALSE(lease.fixed_);
EXPECT_TRUE(lease.hostname_.empty());
EXPECT_FALSE(lease.fqdn_fwd_);
EXPECT_FALSE(lease.fqdn_rev_);
EXPECT_TRUE(lease.comments_.empty());
// Random values for the tests
const uint32_t ADDRESS = 0x01020304;
const uint8_t HWADDR[] = {0x08, 0x00, 0x2b, 0x02, 0x3f, 0x4e};
std::vector<uint8_t> hwaddr(HWADDR, HWADDR + sizeof(HWADDR));
const uint8_t CLIENTID[] = {0x17, 0x34, 0xe2, 0xff, 0x09, 0x92, 0x54};
std::vector<uint8_t> clientid_vec(CLIENTID, CLIENTID + sizeof(CLIENTID));
ClientId clientid(clientid_vec);
const time_t current_time = time(NULL);
const uint32_t SUBNET_ID = 42;
const uint32_t VALID_LIFETIME = 500;
// Check when the leases are equal.
Lease4 lease1(ADDRESS, HWADDR, sizeof(HWADDR),
CLIENTID, sizeof(CLIENTID), VALID_LIFETIME, current_time,
SUBNET_ID);
Lease4 lease2(ADDRESS, HWADDR, sizeof(HWADDR),
CLIENTID, sizeof(CLIENTID), VALID_LIFETIME, current_time,
SUBNET_ID);
EXPECT_TRUE(lease1 == lease2);
EXPECT_FALSE(lease1 != lease2);
// Now vary individual fields in a lease and check that the leases compare
// not equal in every case.
lease1.addr_ = IOAddress(ADDRESS + 1);
EXPECT_FALSE(lease1 == lease2);
EXPECT_TRUE(lease1 != lease2);
lease1.addr_ = lease2.addr_;
EXPECT_TRUE(lease1 == lease2); // Check that the reversion has made the
EXPECT_FALSE(lease1 != lease2); // ... lease equal
++lease1.ext_;
EXPECT_FALSE(lease1 == lease2);
EXPECT_TRUE(lease1 != lease2);
lease1.ext_ = lease2.ext_;
EXPECT_TRUE(lease1 == lease2); // Check that the reversion has made the
EXPECT_FALSE(lease1 != lease2); // ... lease equal
++lease1.hwaddr_[0];
EXPECT_FALSE(lease1 == lease2);
EXPECT_TRUE(lease1 != lease2);
lease1.hwaddr_ = lease2.hwaddr_;
EXPECT_TRUE(lease1 == lease2); // Check that the reversion has made the
EXPECT_FALSE(lease1 != lease2); // ... lease equal
++clientid_vec[0];
lease1.client_id_.reset(new ClientId(clientid_vec));
EXPECT_FALSE(lease1 == lease2);
EXPECT_TRUE(lease1 != lease2);
--clientid_vec[0];
lease1.client_id_.reset(new ClientId(clientid_vec));
EXPECT_TRUE(lease1 == lease2); // Check that the reversion has made the
EXPECT_FALSE(lease1 != lease2); // ... lease equal
++lease1.t1_;
EXPECT_FALSE(lease1 == lease2);
EXPECT_TRUE(lease1 != lease2);
lease1.t1_ = lease2.t1_;
EXPECT_TRUE(lease1 == lease2); // Check that the reversion has made the
EXPECT_FALSE(lease1 != lease2); // ... lease equal
++lease1.t2_;
EXPECT_FALSE(lease1 == lease2);
EXPECT_TRUE(lease1 != lease2);
lease1.t2_ = lease2.t2_;
EXPECT_TRUE(lease1 == lease2); // Check that the reversion has made the
EXPECT_FALSE(lease1 != lease2); // ... lease equal
++lease1.valid_lft_;
EXPECT_FALSE(lease1 == lease2);
EXPECT_TRUE(lease1 != lease2);
lease1.valid_lft_ = lease2.valid_lft_;
EXPECT_TRUE(lease1 == lease2); // Check that the reversion has made the
EXPECT_FALSE(lease1 != lease2); // ... lease equal
++lease1.cltt_;
EXPECT_FALSE(lease1 == lease2);
EXPECT_TRUE(lease1 != lease2);
lease1.cltt_ = lease2.cltt_;
EXPECT_TRUE(lease1 == lease2); // Check that the reversion has made the
EXPECT_FALSE(lease1 != lease2); // ... lease equal
++lease1.subnet_id_;
EXPECT_FALSE(lease1 == lease2);
EXPECT_TRUE(lease1 != lease2);
lease1.subnet_id_ = lease2.subnet_id_;
EXPECT_TRUE(lease1 == lease2); // Check that the reversion has made the
EXPECT_FALSE(lease1 != lease2); // ... lease equal
lease1.fixed_ = !lease1.fixed_;
EXPECT_FALSE(lease1 == lease2);
EXPECT_TRUE(lease1 != lease2);
lease1.fixed_ = lease2.fixed_;
EXPECT_TRUE(lease1 == lease2); // Check that the reversion has made the
EXPECT_FALSE(lease1 != lease2); // ... lease equal
lease1.hostname_ += string("Something random");
EXPECT_FALSE(lease1 == lease2);
EXPECT_TRUE(lease1 != lease2);
lease1.hostname_ = lease2.hostname_;
EXPECT_TRUE(lease1 == lease2); // Check that the reversion has made the
EXPECT_FALSE(lease1 != lease2); // ... lease equal
lease1.fqdn_fwd_ = !lease1.fqdn_fwd_;
EXPECT_FALSE(lease1 == lease2);
EXPECT_TRUE(lease1 != lease2);
lease1.fqdn_fwd_ = lease2.fqdn_fwd_;
EXPECT_TRUE(lease1 == lease2); // Check that the reversion has made the
EXPECT_FALSE(lease1 != lease2); // ... lease equal
lease1.fqdn_rev_ = !lease1.fqdn_rev_;
EXPECT_FALSE(lease1 == lease2);
EXPECT_TRUE(lease1 != lease2);
lease1.fqdn_rev_ = lease2.fqdn_rev_;
EXPECT_TRUE(lease1 == lease2); // Check that the reversion has made the
EXPECT_FALSE(lease1 != lease2); // ... lease equal
lease1.comments_ += string("Something random");
EXPECT_FALSE(lease1 == lease2);
EXPECT_TRUE(lease1 != lease2);
lease1.comments_ = lease2.comments_;
EXPECT_TRUE(lease1 == lease2); // Check that the reversion has made the
EXPECT_FALSE(lease1 != lease2); // ... lease equal
}
// Lease6 is also defined in lease_mgr.h, so is tested in this file as well.
// This test checks if the Lease6 structure can be instantiated correctly
TEST(Lease6, Lease6Constructor) {
IOAddress addr("2001:db8:1::456");
// check a variety of addresses with different bits set.
const char* ADDRESS[] = {
"::", "::1", "2001:db8:1::456",
"7fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
"8000::", "8000::1",
"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"
};
// Other values
uint8_t llt[] = {0, 1, 2, 3, 4, 5, 6, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf};
DuidPtr duid(new DUID(llt, sizeof(llt)));
uint32_t iaid = 7; // just a number
SubnetID subnet_id = 8; // just another number
Lease6Ptr x(new Lease6(Lease6::LEASE_IA_NA, addr,
duid, iaid, 100, 200, 50, 80,
subnet_id));
EXPECT_TRUE(x->addr_ == addr);
EXPECT_TRUE(*x->duid_ == *duid);
EXPECT_TRUE(x->iaid_ == iaid);
EXPECT_TRUE(x->subnet_id_ == subnet_id);
EXPECT_TRUE(x->type_ == Lease6::LEASE_IA_NA);
EXPECT_TRUE(x->preferred_lft_ == 100);
EXPECT_TRUE(x->valid_lft_ == 200);
EXPECT_TRUE(x->t1_ == 50);
EXPECT_TRUE(x->t2_ == 80);
for (int i = 0; i < sizeof(ADDRESS) / sizeof(ADDRESS[0]); ++i) {
IOAddress addr(ADDRESS[i]);
Lease6Ptr lease(new Lease6(Lease6::LEASE_IA_NA, addr,
duid, iaid, 100, 200, 50, 80,
subnet_id));
EXPECT_TRUE(lease->addr_ == addr);
EXPECT_TRUE(*lease->duid_ == *duid);
EXPECT_TRUE(lease->iaid_ == iaid);
EXPECT_TRUE(lease->subnet_id_ == subnet_id);
EXPECT_TRUE(lease->type_ == Lease6::LEASE_IA_NA);
EXPECT_TRUE(lease->preferred_lft_ == 100);
EXPECT_TRUE(lease->valid_lft_ == 200);
EXPECT_TRUE(lease->t1_ == 50);
EXPECT_TRUE(lease->t2_ == 80);
}
// Lease6 must be instantiated with a DUID, not with NULL pointer
IOAddress addr(ADDRESS[0]);
EXPECT_THROW(new Lease6(Lease6::LEASE_IA_NA, addr,
DuidPtr(), iaid, 100, 200, 50, 80,
subnet_id), InvalidOperation);
}
/// @brief Lease6 Equality Test
///
/// Checks that the operator==() correctly compares two leases for equality.
/// As operator!=() is also defined for this class, every check on operator==()
/// is followed by the reverse check on operator!=().
TEST(Lease6, OperatorEquals) {
// check a variety of addressemas with different bits set.
const IOAddress addr("2001:db8:1::456");
uint8_t duid_array[] = {0, 1, 2, 3, 4, 5, 6, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf};
DuidPtr duid(new DUID(duid_array, sizeof(duid_array)));
uint32_t iaid = 7; // just a number
SubnetID subnet_id = 8; // just another number
// Check for equality.
Lease6 lease1(Lease6::LEASE_IA_NA, addr, duid, iaid, 100, 200, 50, 80,
subnet_id);
Lease6 lease2(Lease6::LEASE_IA_NA, addr, duid, iaid, 100, 200, 50, 80,
subnet_id);
EXPECT_TRUE(lease1 == lease2);
EXPECT_FALSE(lease1 != lease2);
// Go through and alter all the fields one by one
lease1.addr_ = IOAddress("::1");
EXPECT_FALSE(lease1 == lease2);
EXPECT_TRUE(lease1 != lease2);
lease1.addr_ = lease2.addr_;
EXPECT_TRUE(lease1 == lease2); // Check that the reversion has made the
EXPECT_FALSE(lease1 != lease2); // ... lease equal
lease1.type_ = Lease6::LEASE_IA_PD;
EXPECT_FALSE(lease1 == lease2);
EXPECT_TRUE(lease1 != lease2);
lease1.type_ = lease2.type_;
EXPECT_TRUE(lease1 == lease2); // Check that the reversion has made the
EXPECT_FALSE(lease1 != lease2); // ... lease equal
++lease1.prefixlen_;
EXPECT_FALSE(lease1 == lease2);
EXPECT_TRUE(lease1 != lease2);