Commit b7bce1d6 authored by Stephen Morris's avatar Stephen Morris
Browse files

[2404] Change multiple discrete variables to arrays

... in preparation for adding IPv4 tests
parent 504f64b2
...@@ -36,14 +36,11 @@ namespace { ...@@ -36,14 +36,11 @@ namespace {
#include "schema_copy.h" #include "schema_copy.h"
// IPv6 addresseses // IPv6 addresseses
const char* ADDRESS_0 = "2001:db8::0"; const char* ADDRESS6[] = {
const char* ADDRESS_1 = "2001:db8::1"; "2001:db8::0", "2001:db8::1", "2001:db8::2", "2001:db8::3",
const char* ADDRESS_2 = "2001:db8::2"; "2001:db8::4", "2001:db8::5", "2001:db8::6", "2001:db8::7",
const char* ADDRESS_3 = "2001:db8::3"; NULL
const char* ADDRESS_4 = "2001:db8::4"; };
const char* ADDRESS_5 = "2001:db8::5";
const char* ADDRESS_6 = "2001:db8::6";
const char* ADDRESS_7 = "2001:db8::7";
// Connection strings. Assume: // Connection strings. Assume:
// Database: keatest // Database: keatest
...@@ -168,15 +165,14 @@ public: ...@@ -168,15 +165,14 @@ public:
// @brief Constructor // @brief Constructor
// //
// Deletes everything from the database and opens it. // Deletes everything from the database and opens it.
MySqlLeaseMgrTest() : MySqlLeaseMgrTest() {
L0_ADDRESS(ADDRESS_0), L0_IOADDRESS(L0_ADDRESS), // Initialize address strings and IOAddresses
L1_ADDRESS(ADDRESS_1), L1_IOADDRESS(L1_ADDRESS), for (int i = 0; ADDRESS6[i] != NULL; ++i) {
L2_ADDRESS(ADDRESS_2), L2_IOADDRESS(L2_ADDRESS), string addr(ADDRESS6[i]);
L3_ADDRESS(ADDRESS_3), L3_IOADDRESS(L3_ADDRESS), straddress6_.push_back(addr);
L4_ADDRESS(ADDRESS_4), L4_IOADDRESS(L4_ADDRESS), IOAddress ioaddr(addr);
L5_ADDRESS(ADDRESS_5), L5_IOADDRESS(L5_ADDRESS), ioaddress6_.push_back(ioaddr);
L6_ADDRESS(ADDRESS_6), L6_IOADDRESS(L6_ADDRESS), }
L7_ADDRESS(ADDRESS_7), L7_IOADDRESS(L7_ADDRESS) {
destroySchema(); destroySchema();
createSchema(); createSchema();
...@@ -240,8 +236,8 @@ public: ...@@ -240,8 +236,8 @@ public:
lease->fqdn_rev_ = false; // Unused lease->fqdn_rev_ = false; // Unused
lease->comments_ = std::string(""); // Unused lease->comments_ = std::string(""); // Unused
// Set the other parameters. For historical reasons, L0_ADDRESS is not used. // Set other parameters. For historical reasons, address 0 is not used.
if (address == L0_ADDRESS) { if (address == straddress6_[0]) {
lease->type_ = Lease6::LEASE_IA_TA; lease->type_ = Lease6::LEASE_IA_TA;
lease->prefixlen_ = 4; lease->prefixlen_ = 4;
lease->iaid_ = 142; lease->iaid_ = 142;
...@@ -251,7 +247,7 @@ public: ...@@ -251,7 +247,7 @@ public:
lease->cltt_ = 168256; // Current time of day lease->cltt_ = 168256; // Current time of day
lease->subnet_id_ = 23; // Arbitrary number lease->subnet_id_ = 23; // Arbitrary number
} else if (address == L1_ADDRESS) { } else if (address == straddress6_[1]) {
lease->type_ = Lease6::LEASE_IA_TA; lease->type_ = Lease6::LEASE_IA_TA;
lease->prefixlen_ = 0; lease->prefixlen_ = 0;
lease->iaid_ = 42; lease->iaid_ = 42;
...@@ -261,7 +257,7 @@ public: ...@@ -261,7 +257,7 @@ public:
lease->cltt_ = 123456; // Current time of day lease->cltt_ = 123456; // Current time of day
lease->subnet_id_ = 73; // Arbitrary number lease->subnet_id_ = 73; // Arbitrary number
} else if (address == L2_ADDRESS) { } else if (address == straddress6_[2]) {
lease->type_ = Lease6::LEASE_IA_PD; lease->type_ = Lease6::LEASE_IA_PD;
lease->prefixlen_ = 7; lease->prefixlen_ = 7;
lease->iaid_ = 89; lease->iaid_ = 89;
...@@ -269,9 +265,9 @@ public: ...@@ -269,9 +265,9 @@ public:
lease->preferred_lft_ = 1800; // Preferred lifetime lease->preferred_lft_ = 1800; // Preferred lifetime
lease->valid_lft_ = 5412; // Actual lifetime lease->valid_lft_ = 5412; // Actual lifetime
lease->cltt_ = 234567; // Current time of day lease->cltt_ = 234567; // Current time of day
lease->subnet_id_ = 73; // Same as for L1_ADDRESS lease->subnet_id_ = 73; // Same as for straddress6_1
} else if (address == L3_ADDRESS) { } else if (address == straddress6_[3]) {
lease->type_ = Lease6::LEASE_IA_NA; lease->type_ = Lease6::LEASE_IA_NA;
lease->prefixlen_ = 28; lease->prefixlen_ = 28;
lease->iaid_ = 0xfffffffe; lease->iaid_ = 0xfffffffe;
...@@ -290,8 +286,8 @@ public: ...@@ -290,8 +286,8 @@ public:
lease->cltt_ = 234567; // Current time of day lease->cltt_ = 234567; // Current time of day
lease->subnet_id_ = 37; // Different from L1 and L2 lease->subnet_id_ = 37; // Different from L1 and L2
} else if (address == L4_ADDRESS) { } else if (address == straddress6_[4]) {
// Same DUID and IAID as L1_ADDRESS // Same DUID and IAID as straddress6_1
lease->type_ = Lease6::LEASE_IA_PD; lease->type_ = Lease6::LEASE_IA_PD;
lease->prefixlen_ = 15; lease->prefixlen_ = 15;
lease->iaid_ = 42; lease->iaid_ = 42;
...@@ -301,8 +297,8 @@ public: ...@@ -301,8 +297,8 @@ public:
lease->cltt_ = 222456; // Current time of day lease->cltt_ = 222456; // Current time of day
lease->subnet_id_ = 75; // Arbitrary number lease->subnet_id_ = 75; // Arbitrary number
} else if (address == L5_ADDRESS) { } else if (address == straddress6_[5]) {
// Same DUID and IAID as L1_ADDRESS // Same DUID and IAID as straddress6_1
lease->type_ = Lease6::LEASE_IA_PD; lease->type_ = Lease6::LEASE_IA_PD;
lease->prefixlen_ = 24; lease->prefixlen_ = 24;
lease->iaid_ = 42; lease->iaid_ = 42;
...@@ -312,8 +308,8 @@ public: ...@@ -312,8 +308,8 @@ public:
lease->cltt_ = 227476; // Current time of day lease->cltt_ = 227476; // Current time of day
lease->subnet_id_ = 175; // Arbitrary number lease->subnet_id_ = 175; // Arbitrary number
} else if (address == L6_ADDRESS) { } else if (address == straddress6_[6]) {
// Same DUID as L1_ADDRESS // Same DUID as straddress6_1
lease->type_ = Lease6::LEASE_IA_PD; lease->type_ = Lease6::LEASE_IA_PD;
lease->prefixlen_ = 24; lease->prefixlen_ = 24;
lease->iaid_ = 93; lease->iaid_ = 93;
...@@ -323,8 +319,8 @@ public: ...@@ -323,8 +319,8 @@ public:
lease->cltt_ = 627476; // Current time of day lease->cltt_ = 627476; // Current time of day
lease->subnet_id_ = 112; // Arbitrary number lease->subnet_id_ = 112; // Arbitrary number
} else if (address == L7_ADDRESS) { } else if (address == straddress6_[7]) {
// Same IAID as L1_ADDRESS // Same IAID as straddress6_1
lease->type_ = Lease6::LEASE_IA_PD; lease->type_ = Lease6::LEASE_IA_PD;
lease->prefixlen_ = 24; lease->prefixlen_ = 24;
lease->iaid_ = 42; lease->iaid_ = 42;
...@@ -350,17 +346,11 @@ public: ...@@ -350,17 +346,11 @@ public:
// @return vector<Lease6Ptr> Vector of pointers to leases // @return vector<Lease6Ptr> Vector of pointers to leases
vector<Lease6Ptr> createLeases6() { vector<Lease6Ptr> createLeases6() {
// Create leases // Create leases for each address
vector<Lease6Ptr> leases; vector<Lease6Ptr> leases;
leases.push_back(initializeLease6(L0_ADDRESS)); for (int i = 0; i < straddress6_.size(); ++i) {
leases.push_back(initializeLease6(L1_ADDRESS)); leases.push_back(initializeLease6(straddress6_[i]));
leases.push_back(initializeLease6(L2_ADDRESS)); }
leases.push_back(initializeLease6(L3_ADDRESS));
leases.push_back(initializeLease6(L4_ADDRESS));
leases.push_back(initializeLease6(L5_ADDRESS));
leases.push_back(initializeLease6(L6_ADDRESS));
leases.push_back(initializeLease6(L7_ADDRESS));
EXPECT_EQ(8, leases.size()); EXPECT_EQ(8, leases.size());
// Check they were created // Check they were created
...@@ -381,31 +371,10 @@ public: ...@@ -381,31 +371,10 @@ public:
// Member variables // Member variables
LeaseMgr* lmptr_; // Pointer to the lease manager LeaseMgr* lmptr_; // Pointer to the lease manager
string L0_ADDRESS; // String form of address 1
IOAddress L0_IOADDRESS; // IOAddress form of L1_ADDRESS
string L1_ADDRESS; // String form of address 1
IOAddress L1_IOADDRESS; // IOAddress form of L1_ADDRESS
string L2_ADDRESS; // String form of address 2
IOAddress L2_IOADDRESS; // IOAddress form of L2_ADDRESS
string L3_ADDRESS; // String form of address 3
IOAddress L3_IOADDRESS; // IOAddress form of L3_ADDRESS
string L4_ADDRESS; // String form of address 4
IOAddress L4_IOADDRESS; // IOAddress form of L4_ADDRESS
string L5_ADDRESS; // String form of address 5
IOAddress L5_IOADDRESS; // IOAddress form of L5_ADDRESS
string L6_ADDRESS; // String form of address 6
IOAddress L6_IOADDRESS; // IOAddress form of L6_ADDRESS
string L7_ADDRESS; // String form of address 7 vector<string> straddress6_; // String forms of IPv6 addresses
IOAddress L7_IOADDRESS; // IOAddress form of L7_ADDRESS vector<IOAddress> ioaddress6_; // IOAddress forms of IPv6 addresses
}; };
...@@ -538,9 +507,24 @@ TEST_F(MySqlLeaseMgrTest, checkVersion) { ...@@ -538,9 +507,24 @@ TEST_F(MySqlLeaseMgrTest, checkVersion) {
EXPECT_EQ(CURRENT_VERSION_MINOR, version.second); EXPECT_EQ(CURRENT_VERSION_MINOR, version.second);
} }
// @brief Compare two Lease4 structures for equality
void
detailCompareLease(const Lease4Ptr& first, const Lease4Ptr& second) {
// Compare address strings. Comparison of address objects is not used, as
// odd things happen when they are different: the EXPECT_EQ macro appears to
// call the operator uint32_t() function, which causes an exception to be
// thrown for IPv6 addresses.
EXPECT_EQ(first->addr_.toText(), second->addr_.toText());
EXPECT_TRUE(first->hwaddr_ == second->hwaddr_);
EXPECT_TRUE(*first->client_id_ == *second->client_id_);
EXPECT_EQ(first->valid_lft_, second->valid_lft_);
EXPECT_EQ(first->cltt_, second->cltt_);
EXPECT_EQ(first->subnet_id_, second->subnet_id_);
}
// @brief Compare two Lease6 structures for equality // @brief Compare two Lease6 structures for equality
void void
detailCompareLease6(const Lease6Ptr& first, const Lease6Ptr& second) { detailCompareLease(const Lease6Ptr& first, const Lease6Ptr& second) {
EXPECT_EQ(first->type_, second->type_); EXPECT_EQ(first->type_, second->type_);
// Compare address strings. Comparison of address objects is not used, as // Compare address strings. Comparison of address objects is not used, as
...@@ -560,7 +544,7 @@ detailCompareLease6(const Lease6Ptr& first, const Lease6Ptr& second) { ...@@ -560,7 +544,7 @@ detailCompareLease6(const Lease6Ptr& first, const Lease6Ptr& second) {
// @brief Check individual Lease6 methods // @brief Check individual Lease6 methods
// //
// Checks that the add/update/delete works. All are done within one // Checks that the add/get/delete works. All are done within one
// test so that "rollback" can be used to remove trace of the tests // test so that "rollback" can be used to remove trace of the tests
// from the database. // from the database.
// //
...@@ -580,32 +564,32 @@ TEST_F(MySqlLeaseMgrTest, basicLease6) { ...@@ -580,32 +564,32 @@ TEST_F(MySqlLeaseMgrTest, basicLease6) {
// Reopen the database to ensure that they actually got stored. // Reopen the database to ensure that they actually got stored.
reopen(); reopen();
Lease6Ptr l_returned = lmptr_->getLease6(L1_IOADDRESS); Lease6Ptr l_returned = lmptr_->getLease6(ioaddress6_[1]);
EXPECT_TRUE(l_returned); EXPECT_TRUE(l_returned);
detailCompareLease6(leases[1], l_returned); detailCompareLease(leases[1], l_returned);
l_returned = lmptr_->getLease6(L2_IOADDRESS); l_returned = lmptr_->getLease6(ioaddress6_[2]);
EXPECT_TRUE(l_returned); EXPECT_TRUE(l_returned);
detailCompareLease6(leases[2], l_returned); detailCompareLease(leases[2], l_returned);
l_returned = lmptr_->getLease6(L3_IOADDRESS); l_returned = lmptr_->getLease6(ioaddress6_[3]);
EXPECT_TRUE(l_returned); EXPECT_TRUE(l_returned);
detailCompareLease6(leases[3], l_returned); detailCompareLease(leases[3], l_returned);
// Check that we can't add a second lease with the same address // Check that we can't add a second lease with the same address
EXPECT_FALSE(lmptr_->addLease(leases[1])); EXPECT_FALSE(lmptr_->addLease(leases[1]));
// Delete a lease, check that it's gone, and that we can't delete it // Delete a lease, check that it's gone, and that we can't delete it
// a second time. // a second time.
EXPECT_TRUE(lmptr_->deleteLease6(L1_IOADDRESS)); EXPECT_TRUE(lmptr_->deleteLease6(ioaddress6_[1]));
l_returned = lmptr_->getLease6(L1_IOADDRESS); l_returned = lmptr_->getLease6(ioaddress6_[1]);
EXPECT_FALSE(l_returned); EXPECT_FALSE(l_returned);
EXPECT_FALSE(lmptr_->deleteLease6(L1_IOADDRESS)); EXPECT_FALSE(lmptr_->deleteLease6(ioaddress6_[1]));
// Check that the second address is still there. // Check that the second address is still there.
l_returned = lmptr_->getLease6(L2_IOADDRESS); l_returned = lmptr_->getLease6(ioaddress6_[2]);
EXPECT_TRUE(l_returned); EXPECT_TRUE(l_returned);
detailCompareLease6(leases[2], l_returned); detailCompareLease(leases[2], l_returned);
} }
// @brief Check GetLease6 methods - Access by DUID/IAID // @brief Check GetLease6 methods - Access by DUID/IAID
...@@ -636,9 +620,9 @@ TEST_F(MySqlLeaseMgrTest, getLease6Extended1) { ...@@ -636,9 +620,9 @@ TEST_F(MySqlLeaseMgrTest, getLease6Extended1) {
addresses.push_back((*i)->addr_.toText()); addresses.push_back((*i)->addr_.toText());
} }
sort(addresses.begin(), addresses.end()); sort(addresses.begin(), addresses.end());
EXPECT_EQ(L1_ADDRESS, addresses[0]); EXPECT_EQ(straddress6_[1], addresses[0]);
EXPECT_EQ(L4_ADDRESS, addresses[1]); EXPECT_EQ(straddress6_[4], addresses[1]);
EXPECT_EQ(L5_ADDRESS, addresses[2]); EXPECT_EQ(straddress6_[5], addresses[2]);
// Check that nothing is returned when either the IAID or DUID match // Check that nothing is returned when either the IAID or DUID match
// nothing. // nothing.
...@@ -710,9 +694,9 @@ TEST_F(MySqlLeaseMgrTest, updateLease6) { ...@@ -710,9 +694,9 @@ TEST_F(MySqlLeaseMgrTest, updateLease6) {
lmptr_->commit(); lmptr_->commit();
reopen(); reopen();
Lease6Ptr l_returned = lmptr_->getLease6(L1_IOADDRESS); Lease6Ptr l_returned = lmptr_->getLease6(ioaddress6_[1]);
EXPECT_TRUE(l_returned); EXPECT_TRUE(l_returned);
detailCompareLease6(leases[1], l_returned); detailCompareLease(leases[1], l_returned);
// Modify some fields in lease 1 (not the address) and update it. // Modify some fields in lease 1 (not the address) and update it.
++leases[1]->iaid_; ++leases[1]->iaid_;
...@@ -724,9 +708,9 @@ TEST_F(MySqlLeaseMgrTest, updateLease6) { ...@@ -724,9 +708,9 @@ TEST_F(MySqlLeaseMgrTest, updateLease6) {
// ... and check what is returned is what is expected. // ... and check what is returned is what is expected.
l_returned.reset(); l_returned.reset();
l_returned = lmptr_->getLease6(L1_IOADDRESS); l_returned = lmptr_->getLease6(ioaddress6_[1]);
EXPECT_TRUE(l_returned); EXPECT_TRUE(l_returned);
detailCompareLease6(leases[1], l_returned); detailCompareLease(leases[1], l_returned);
// Alter the lease again and check. // Alter the lease again and check.
++leases[1]->iaid_; ++leases[1]->iaid_;
...@@ -736,16 +720,16 @@ TEST_F(MySqlLeaseMgrTest, updateLease6) { ...@@ -736,16 +720,16 @@ TEST_F(MySqlLeaseMgrTest, updateLease6) {
lmptr_->updateLease6(leases[1]); lmptr_->updateLease6(leases[1]);
l_returned.reset(); l_returned.reset();
l_returned = lmptr_->getLease6(L1_IOADDRESS); l_returned = lmptr_->getLease6(ioaddress6_[1]);
EXPECT_TRUE(l_returned); EXPECT_TRUE(l_returned);
detailCompareLease6(leases[1], l_returned); detailCompareLease(leases[1], l_returned);
// Check we can do an update without changing data. // Check we can do an update without changing data.
lmptr_->updateLease6(leases[1]); lmptr_->updateLease6(leases[1]);
l_returned.reset(); l_returned.reset();
l_returned = lmptr_->getLease6(L1_IOADDRESS); l_returned = lmptr_->getLease6(ioaddress6_[1]);
EXPECT_TRUE(l_returned); EXPECT_TRUE(l_returned);
detailCompareLease6(leases[1], l_returned); detailCompareLease(leases[1], l_returned);
// Try updating a lease not in the database. // Try updating a lease not in the database.
EXPECT_THROW(lmptr_->updateLease6(leases[2]), isc::dhcp::NoSuchLease); EXPECT_THROW(lmptr_->updateLease6(leases[2]), isc::dhcp::NoSuchLease);
......
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