From: Francis Dupont Date: Wed, 5 Jul 2023 16:32:55 +0000 (+0200) Subject: [#2869] Finished test factoring X-Git-Tag: Kea-2.5.0~19 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=2b3ab0c7712bfc4045a20574dd6f12d674992865;p=thirdparty%2Fkea.git [#2869] Finished test factoring --- diff --git a/src/lib/dhcpsrv/tests/pgsql_lease_extended_info_unittest.cc b/src/lib/dhcpsrv/tests/pgsql_lease_extended_info_unittest.cc index 83f65993fe..e9f803893b 100644 --- a/src/lib/dhcpsrv/tests/pgsql_lease_extended_info_unittest.cc +++ b/src/lib/dhcpsrv/tests/pgsql_lease_extended_info_unittest.cc @@ -8,15 +8,9 @@ #include #include -#include -#include -#include -#include +#include #include -#include -#include - -#include +#include using namespace isc; using namespace isc::asiolink; @@ -30,24 +24,6 @@ using namespace std; namespace { -/// @brief IPv4 addresses used in the tests. -const vector ADDRESS4 = { - "192.0.2.0", "192.0.2.1", "192.0.2.2", "192.0.2.3", - "192.0.2.4", "192.0.2.5", "192.0.2.6", "192.0.2.7" -}; - -/// @brief IPv6 addresses used in the tests. -const vector ADDRESS6 = { - "2001:db8::", "2001:db8::1", "2001:db8::2", "2001:db8::3", - "2001:db8::4", "2001:db8::5", "2001:db8::6", "2001:db8::7" -}; - -/// @brief DUIDs used in the tests. -const vector DUIDS = { - "wwwwwwww", "BBBBBBBB", "::::::::", "0123456789acdef", - "BBBBBBBB", "$$$$$$$$", "^^^^^^^^", "\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5" -}; - /// @brief A derivation of the lease manager exposing protected methods. class NakedPgSqlLeaseMgr : public PgSqlLeaseMgr { public: @@ -68,177 +44,27 @@ public: using PgSqlLeaseMgr::deleteExtendedInfo6; using PgSqlLeaseMgr::addRelayId6; using PgSqlLeaseMgr::addRemoteId6; -}; -/// @brief Type of unique pointers to naked lease manager. -typedef unique_ptr NakedPgSqlLeaseMgrPtr; + /// @brief Return valid connection string. + static string validConnectionString() { + return (validPgSQLConnectionString()); + } -/// @brief Test fixture class for extended info tests. -class PgSqlExtendedInfoTest : public ::testing::Test { -public: - /// @brief Constructor. - PgSqlExtendedInfoTest() { - // Ensure we have the proper schema with no transient data. + /// @brief Create the database schema. + static void createSchema() { createPgSQLSchema(); - - pmap_ = DatabaseConnection::parse(validPgSQLConnectionString()); - lease_mgr_.reset(); - leases4.clear(); - leases6.clear(); - MultiThreadingMgr::instance().setMode(false); - now_ = time(0); } - /// @brief Destructor. - ~PgSqlExtendedInfoTest() { - pmap_.clear(); - lease_mgr_.reset(); - leases4.clear(); - leases6.clear(); - MultiThreadingMgr::instance().setMode(false); - - // If data wipe enabled, delete transient data otherwise destroy - // the schema. + /// @brief Destroy the database schema. + static void destroySchema() { destroyPgSQLSchema(); } - - /// @brief Create and set v4 leases. - /// - /// @param insert When true insert in the database. - void initLease4(bool insert = true) { - ASSERT_EQ(ADDRESS4.size(), DUIDS.size()); - for (size_t i = 0; i < ADDRESS4.size(); ++i) { - Lease4Ptr lease; - vector hwaddr_data(5, 0x08); - hwaddr_data.push_back(0x80 + i); - HWAddrPtr hwaddr(new HWAddr(hwaddr_data, HTYPE_ETHER)); - vector client_id = createFromString(DUIDS[i]); - IOAddress address(ADDRESS4[i]); - ASSERT_NO_THROW(lease.reset(new Lease4(address, hwaddr, - &client_id[0], - client_id.size(), - 1000, now_, - static_cast(i)))); - leases4.push_back(lease); - if (insert) { - EXPECT_TRUE(lease_mgr_->addLease(lease)); - } - } - ASSERT_EQ(ADDRESS4.size(), leases4.size()); - } - - /// @brief Create and set v6 leases. - void initLease6() { - ASSERT_EQ(ADDRESS6.size(), DUIDS.size()); - for (size_t i = 0; i < ADDRESS6.size(); ++i) { - Lease6Ptr lease; - vector duid_data = createFromString(DUIDS[i]); - DuidPtr duid(new DUID(duid_data)); - IOAddress addr(ADDRESS6[i]); - ASSERT_NO_THROW(lease.reset(new Lease6(((i % 2) ? Lease::TYPE_NA : Lease::TYPE_PD), addr, duid, - 123, 1000, 2000, - static_cast(i)))); - leases6.push_back(lease); - EXPECT_TRUE(lease_mgr_->addLease(lease)); - } - ASSERT_EQ(ADDRESS6.size(), leases6.size()); - } - - /// @brief Check v6 leases (using get page to keep order). - void checkLease6() { - EXPECT_EQ(8, leases6.size()); - Lease6Collection got; - IOAddress zero = IOAddress::IPV6_ZERO_ADDRESS(); - LeasePageSize ps100(100); - EXPECT_NO_THROW(got = lease_mgr_->getLeases6(zero, ps100)); - ASSERT_EQ(leases6.size(), got.size()); - for (size_t i = 0; i < leases6.size(); ++i) { - ConstElementPtr expected = leases6[i]->toElement(); - LeasePtr lease = got[i]; - ASSERT_TRUE(lease); - EXPECT_TRUE(expected->equals(*lease->toElement())) - << "expected: " << expected->str() << "\n" - << "got: " << lease->toElement()->str() << "\n"; - } - } - - /// @brief Start lease manager. - /// - /// @param enable When true enable extended info tables. - void start(bool enable) { - // Do not set unused pmap_["universe"]. - if (enable) { - pmap_["extended-info-tables"] = "true"; - } - - ASSERT_NO_THROW(lease_mgr_.reset(new NakedPgSqlLeaseMgr(pmap_))); - if (enable) { - EXPECT_TRUE(lease_mgr_->getExtendedInfoTablesEnabled()); - } else { - EXPECT_FALSE(lease_mgr_->getExtendedInfoTablesEnabled()); - } - } - - /// @brief Create a vector of uint8_t from a string. - /// - /// @param content A not empty string holding the content. - /// @return A vector of uint8_t with the given content. - inline vector createFromString(const string& content) { - vector v; - v.resize(content.size()); - memmove(&v[0], &content[0], v.size()); - return (v); - } - - /// @brief Test initLease4. - void testInitLease4(); - - /// @brief Test initLease6. - void testInitLease6(); - - /// @brief Test getLease4ByRelayId. - void testGetLeases4ByRelayId(); - - /// @brief Test getLease4ByRemoteId. - void testGetLeases4ByRemoteId(); - - /// @brief Test upgradeExtendedInfo4. - void testUpgradeExtendedInfo4(const CfgConsistency::ExtendedInfoSanity& check, - const LeasePageSize& page_size); - - /// @brief Test initLease6 with tables. - void testEnableTables(); - - /// @brief Test getLeases6ByRelayId. - void testGetLeases6ByRelayId(); - - /// @brief Test getLeases6ByRemoteId. - void testGetLeases6ByRemoteId(); - - /// @brief Test getLeases6ByLink. - void testGetLeases6ByLink(); - - /// @brief Test upgradeExtendedInfo6. - void testUpgradeExtendedInfo6(const CfgConsistency::ExtendedInfoSanity& check, - bool extended_info_table_enable, - const LeasePageSize& page_size); - - /// @brief Parameter map. - DatabaseConnection::ParameterMap pmap_; - - /// @brief Lease manager. - NakedPgSqlLeaseMgrPtr lease_mgr_; - - /// @brief V4 leases. - Lease4Collection leases4; - - /// @brief V6 leases. - Lease6Collection leases6; - - /// @brief Current timestamp. - time_t now_; }; +/// @brief Test fixture class for extended info tests. +class PgSqlExtendedInfoTest : + public isc::dhcp::test::GenericExtendedInfoTest { }; + /// @brief Verifies that the lease manager can start. TEST_F(PgSqlExtendedInfoTest, startWithoutExtendedTables) { start(false); @@ -261,31 +87,6 @@ TEST_F(PgSqlExtendedInfoTest, startWithExtendedTablesMultiThreading) { start(true); } -/// @brief Verifies that the lease manager can add the v4 leases. -void -PgSqlExtendedInfoTest::testInitLease4() { - start(false); - initLease4(); - EXPECT_EQ(8, leases4.size()); - IOAddress zero = IOAddress::IPV4_ZERO_ADDRESS(); - Lease4Collection got; - // Use the page version as it returns leases in order. - EXPECT_NO_THROW(got = lease_mgr_->getLeases4(zero, LeasePageSize(100))); - ASSERT_EQ(leases4.size(), got.size()); - auto compare = [](Lease4Ptr const& left, Lease4Ptr const& right) { - return (left->addr_ < right->addr_); - }; - std::sort(got.begin(), got.end(), compare); - for (size_t i = 0; i < leases4.size(); ++i) { - ConstElementPtr expected = leases4[i]->toElement(); - LeasePtr lease = got[i]; - ASSERT_TRUE(lease); - EXPECT_TRUE(expected->equals(*lease->toElement())) - << "expected: " << expected->str() << "\n" - << "got: " << lease->toElement()->str() << "\n"; - } -} - TEST_F(PgSqlExtendedInfoTest, initLease4) { testInitLease4(); } @@ -295,227 +96,6 @@ TEST_F(PgSqlExtendedInfoTest, initLease4MultiThreading) { testInitLease4(); } -/// @brief Verifies that getLeases4ByRelayId works as expected. -void -PgSqlExtendedInfoTest::testGetLeases4ByRelayId() { - // Lease manager is created with empty tables. - start(false); - initLease4(false); - - // Create leases. - IOAddress addr0(ADDRESS4[0]); - IOAddress addr1(ADDRESS4[1]); - IOAddress addr2(ADDRESS4[2]); - IOAddress addr3(ADDRESS4[3]); - IOAddress addr4(ADDRESS4[4]); - IOAddress zero = IOAddress::IPV4_ZERO_ADDRESS(); - vector relay_id0 = { 0xaa, 0xbb, 0xcc }; - vector relay_id1 = { 1, 2, 3, 4 }; - vector relay_id2 = createFromString(DUIDS[2]); - string user_context_txt0 = "{ \"ISC\": { \"relay-agent-info\": {"; - user_context_txt0 += " \"sub-options\": \"0C03AABBCC\","; - user_context_txt0 += " \"relay-id\": \"AABBCC\" } } }"; - ElementPtr user_context0; - ASSERT_NO_THROW(user_context0 = Element::fromJSON(user_context_txt0)); - string user_context_txt1 = "{ \"ISC\": { \"relay-agent-info\": {"; - user_context_txt1 += " \"sub-options\": \"0C0401020304\","; - user_context_txt1 += " \"relay-id\": \"01020304\" } } }"; - ElementPtr user_context1; - ASSERT_NO_THROW(user_context1 = Element::fromJSON(user_context_txt1)); - - Lease4Ptr lease; - // lease0: addr0, id0, now. - lease = leases4[0]; - ASSERT_TRUE(lease); - lease->relay_id_ = relay_id0; - lease->setContext(user_context0); - - // lease1: addr1, id1, now. - lease = leases4[1]; - ASSERT_TRUE(lease); - lease->relay_id_ = relay_id1; - lease->setContext(user_context1); - - // lease2: addr2, id0, now - 500. - lease = leases4[2]; - ASSERT_TRUE(lease); - lease->relay_id_ = relay_id0; - lease->setContext(user_context0); - lease->cltt_ = now_ - 500; - - // lease3: addr3, id0, now - 800. - lease = leases4[3]; - ASSERT_TRUE(lease); - lease->relay_id_ = relay_id0; - lease->setContext(user_context0); - lease->cltt_ = now_ - 800; - - // lease4: addr4, id0, now - 100. - lease = leases4[4]; - ASSERT_TRUE(lease); - lease->relay_id_ = relay_id0; - lease->setContext(user_context0); - lease->cltt_ = now_ - 100; - - // Add leases. - for (size_t i = 0; i < leases4.size(); ++i) { - EXPECT_TRUE(lease_mgr_->addLease(leases4[i])); - } - - Lease4Collection got; - // Unknown relay id #2: nothing. - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRelayId(relay_id2, - zero, - LeasePageSize(100))); - EXPECT_EQ(0, got.size()); - - // Unknown relay id #2, now - 1000, now + 1000: nothing. - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRelayId(relay_id2, - zero, - LeasePageSize(100), - now_ - 1000, - now_ + 1000)); - EXPECT_EQ(0, got.size()); - - // Relay id #0, now - 2000, now - 1000: nothing. - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRelayId(relay_id0, - zero, - LeasePageSize(100), - now_ - 2000, - now_ - 1000)); - EXPECT_EQ(0, got.size()); - - // Relay id #0, now + 1000, now + 2000: nothing. - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRelayId(relay_id0, - zero, - LeasePageSize(100), - now_ + 1000, - now_ + 2000)); - EXPECT_EQ(0, got.size()); - - // Relay id #0: 3 entries (0, 2, 3, 4). - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRelayId(relay_id0, - zero, - LeasePageSize(100))); - ASSERT_EQ(4, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[0]); - EXPECT_EQ(relay_id0, lease->relay_id_); - lease = got[1]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[2]); - EXPECT_EQ(relay_id0, lease->relay_id_); - lease = got[2]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[3]); - EXPECT_EQ(relay_id0, lease->relay_id_); - lease = got[3]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[4]); - EXPECT_EQ(relay_id0, lease->relay_id_); - - // Relay id #0, partial: 2 entries (0, 2). - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRelayId(relay_id0, - zero, - LeasePageSize(2))); - ASSERT_EQ(2, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[0]); - EXPECT_EQ(relay_id0, lease->relay_id_); - lease = got[1]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[2]); - EXPECT_EQ(relay_id0, lease->relay_id_); - - // Relay id #0, partial from previous: 2 entries (3, 4). - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRelayId(relay_id0, - addr2, - LeasePageSize(2))); - ASSERT_EQ(2, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[3]); - EXPECT_EQ(relay_id0, lease->relay_id_); - lease = got[1]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[4]); - EXPECT_EQ(relay_id0, lease->relay_id_); - - // Relay id #0, final partial: no entries. - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRelayId(relay_id0, - addr4, - LeasePageSize(2))); - EXPECT_EQ(0, got.size()); - - // Relay id #0, from now - 500: 3 entries (0, 2, 4). - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRelayId(relay_id0, - zero, - LeasePageSize(100), - now_ - 500)); - ASSERT_EQ(3, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[0]); - EXPECT_EQ(relay_id0, lease->relay_id_); - lease = got[1]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[2]); - EXPECT_EQ(relay_id0, lease->relay_id_); - lease = got[2]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[4]); - EXPECT_EQ(relay_id0, lease->relay_id_); - - // Relay id #0, to now - 200: 3 entries (2, 3). - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRelayId(relay_id0, - zero, - LeasePageSize(100), - 0, now_ - 200)); - ASSERT_EQ(2, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[2]); - EXPECT_EQ(relay_id0, lease->relay_id_); - lease = got[1]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[3]); - EXPECT_EQ(relay_id0, lease->relay_id_); - - // Relay id #0, from now - 500 to now - 100, partial: 1 entry. - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRelayId(relay_id0, - zero, - LeasePageSize(1), - now_ - 500, - now_ - 100)); - ASSERT_EQ(1, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[2]); - EXPECT_EQ(relay_id0, lease->relay_id_); - - // Relay id #0, from now - 500 to now - 100, partial from 2: 1 entry. - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRelayId(relay_id0, - addr2, - LeasePageSize(1), - now_ - 500, - now_ - 100)); - ASSERT_EQ(1, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[4]); - EXPECT_EQ(relay_id0, lease->relay_id_); - - // Relay id #0, from now - 500 to now - 100, final partial. - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRelayId(relay_id0, - addr4, - LeasePageSize(1), - now_ - 500, - now_ - 100)); - EXPECT_EQ(0, got.size()); -} - TEST_F(PgSqlExtendedInfoTest, getLeases4ByRelayId) { testGetLeases4ByRelayId(); } @@ -525,222 +105,6 @@ TEST_F(PgSqlExtendedInfoTest, getLeases4ByRelayIdMultiThreading) { testGetLeases4ByRelayId(); } -/// @brief Verifies that getLeases4ByRemoteId works as expected. -void -PgSqlExtendedInfoTest::testGetLeases4ByRemoteId() { - // Lease manager is created with empty tables. - start(false); - initLease4(true); - - // Update leases. - IOAddress addr0(ADDRESS4[0]); - IOAddress addr1(ADDRESS4[1]); - IOAddress addr2(ADDRESS4[2]); - IOAddress addr3(ADDRESS4[3]); - IOAddress addr4(ADDRESS4[4]); - IOAddress zero = IOAddress::IPV4_ZERO_ADDRESS(); - vector remote_id0 = { 1, 2, 3, 4 }; - vector remote_id1 = { 0xaa, 0xbb, 0xcc }; - vector remote_id2 = createFromString(DUIDS[2]); - string user_context_txt0 = "{ \"ISC\": { \"relay-agent-info\": {"; - user_context_txt0 += " \"sub-options\": \"020401020304\","; - user_context_txt0 += " \"remote-id\": \"01020304\" } } }"; - ElementPtr user_context0; - ASSERT_NO_THROW(user_context0 = Element::fromJSON(user_context_txt0)); - string user_context_txt1 = "{ \"ISC\": { \"relay-agent-info\": {"; - user_context_txt1 += " \"sub-options\": \"0203AABBCC\","; - user_context_txt1 += " \"remote-id\": \"AABBCC\" } } }"; - ElementPtr user_context1; - ASSERT_NO_THROW(user_context1 = Element::fromJSON(user_context_txt1)); - - Lease4Ptr lease; - // lease0: addr0, id0, now. - lease = leases4[0]; - lease->remote_id_ = remote_id0; - lease->setContext(user_context0); - - // lease1: addr1, id1, now. - lease = leases4[1]; - lease->remote_id_ = remote_id1; - lease->setContext(user_context1); - - // lease2: addr2, id0, now - 500. - lease = leases4[2]; - lease->remote_id_ = remote_id0; - lease->setContext(user_context0); - lease->cltt_ = now_ - 500; - - // lease3: addr3, id0, now - 800. - lease = leases4[3]; - lease->remote_id_ = remote_id0; - lease->setContext(user_context0); - lease->cltt_ = now_ - 800; - - // lease4: addr4, id0, now - 100. - lease = leases4[4]; - lease->remote_id_ = remote_id0; - lease->setContext(user_context0); - lease->cltt_ = now_ - 100; - - // Update leases. - for (size_t i = 0; i < leases4.size(); ++i) { - EXPECT_NO_THROW(lease_mgr_->updateLease4(leases4[i])); - } - - Lease4Collection got; - // Unknown remote id #2: nothing. - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRemoteId(remote_id2, - zero, - LeasePageSize(100))); - EXPECT_EQ(0, got.size()); - - // Unknown remote id #2, now - 1000, now + 1000: nothing. - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRemoteId(remote_id2, - zero, - LeasePageSize(100), - now_ - 1000, - now_ + 1000)); - EXPECT_EQ(0, got.size()); - - // Remote id #0, now - 2000, now - 1000: nothing. - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRemoteId(remote_id0, - zero, - LeasePageSize(100), - now_ - 2000, - now_ - 1000)); - EXPECT_EQ(0, got.size()); - - // Remote id #0, now + 1000, now + 2000: nothing. - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRemoteId(remote_id0, - zero, - LeasePageSize(100), - now_ + 1000, - now_ + 2000)); - EXPECT_EQ(0, got.size()); - - // Remote id #0: 3 entries (0, 2, 3, 4). - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRemoteId(remote_id0, - zero, - LeasePageSize(100))); - ASSERT_EQ(4, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[0]); - EXPECT_EQ(remote_id0, lease->remote_id_); - lease = got[1]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[2]); - EXPECT_EQ(remote_id0, lease->remote_id_); - lease = got[2]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[3]); - EXPECT_EQ(remote_id0, lease->remote_id_); - lease = got[3]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[4]); - EXPECT_EQ(remote_id0, lease->remote_id_); - - // Remote id #0, partial: 2 entries (0, 2). - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRemoteId(remote_id0, - zero, - LeasePageSize(2))); - ASSERT_EQ(2, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[0]); - EXPECT_EQ(remote_id0, lease->remote_id_); - lease = got[1]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[2]); - EXPECT_EQ(remote_id0, lease->remote_id_); - - // Remote id #0, partial from previous: 2 entries (3, 4). - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRemoteId(remote_id0, - addr2, - LeasePageSize(2))); - ASSERT_EQ(2, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[3]); - EXPECT_EQ(remote_id0, lease->remote_id_); - lease = got[1]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[4]); - EXPECT_EQ(remote_id0, lease->remote_id_); - - // Remote id #0, final partial: no entries. - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRemoteId(remote_id0, - addr4, - LeasePageSize(2))); - EXPECT_EQ(0, got.size()); - - // Remote id #0, from now - 500: 3 entries (0, 2, 4). - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRemoteId(remote_id0, - zero, - LeasePageSize(100), - now_ - 500)); - ASSERT_EQ(3, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[0]); - EXPECT_EQ(remote_id0, lease->remote_id_); - lease = got[1]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[2]); - EXPECT_EQ(remote_id0, lease->remote_id_); - lease = got[2]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[4]); - EXPECT_EQ(remote_id0, lease->remote_id_); - - // Remote id #0, to now - 200: 3 entries (2, 3). - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRemoteId(remote_id0, - zero, - LeasePageSize(100), - 0, now_ - 200)); - ASSERT_EQ(2, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[2]); - EXPECT_EQ(remote_id0, lease->remote_id_); - lease = got[1]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[3]); - EXPECT_EQ(remote_id0, lease->remote_id_); - - // Remote id #0, from now - 500 to now - 100, partial: 1 entry. - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRemoteId(remote_id0, - zero, - LeasePageSize(1), - now_ - 500, - now_ - 100)); - ASSERT_EQ(1, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[2]); - EXPECT_EQ(remote_id0, lease->remote_id_); - - // Remote id #0, from now - 500 to now - 100, partial from 2: 1 entry. - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRemoteId(remote_id0, - addr2, - LeasePageSize(1), - now_ - 500, - now_ - 100)); - ASSERT_EQ(1, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(*lease, *leases4[4]); - EXPECT_EQ(remote_id0, lease->remote_id_); - - // Remote id #0, from now - 500 to now - 100, final partial. - EXPECT_NO_THROW(got = lease_mgr_->getLeases4ByRemoteId(remote_id0, - addr4, - LeasePageSize(1), - now_ - 500, - now_ - 100)); - EXPECT_EQ(0, got.size()); -} - TEST_F(PgSqlExtendedInfoTest, getLeases4ByRemoteId) { testGetLeases4ByRemoteId(); } @@ -750,312 +114,6 @@ TEST_F(PgSqlExtendedInfoTest, getLeases4ByRemoteIdMultiThreading) { testGetLeases4ByRemoteId(); } -void -PgSqlExtendedInfoTest::testUpgradeExtendedInfo4(const CfgConsistency::ExtendedInfoSanity& check, - const LeasePageSize& page_size) { - // Lease manager is created with empty tables. - start(false); - initLease4(false); - - // Create leases. - IOAddress addr0(ADDRESS4[0]); - IOAddress addr1(ADDRESS4[1]); - IOAddress addr2(ADDRESS4[2]); - IOAddress addr3(ADDRESS4[3]); - IOAddress addr4(ADDRESS4[4]); - IOAddress addr5(ADDRESS4[5]); - IOAddress addr6(ADDRESS4[6]); - IOAddress addr7(ADDRESS4[7]); - IOAddress zero = IOAddress::IPV4_ZERO_ADDRESS(); - vector relay_id = { 0xaa, 0xbb, 0xcc }; - vector relay_id2 = { 0xdd, 0xee, 0xff }; - vector remote_id = { 1, 2, 3, 4 }; - vector remote_id2 = { 5, 6, 7, 8 }; - string user_context_txt = "{ \"ISC\": { \"relay-agent-info\": {"; - user_context_txt += " \"sub-options\": \"0204010203040C03AABBCC\","; - user_context_txt += " \"relay-id\": \"AABBCC\","; - user_context_txt += " \"remote-id\": \"01020304\" } } }"; - ElementPtr user_context; - ASSERT_NO_THROW(user_context = Element::fromJSON(user_context_txt)); - string user_context_txt_old = "{ \"ISC\": { \"relay-agent-info\":"; - user_context_txt_old += " \"0204010203040C03AABBCC\" } }"; - ElementPtr user_context_old; - ASSERT_NO_THROW(user_context_old = Element::fromJSON(user_context_txt_old)); - string user_context_list_txt = "{ \"ISC\": { \"relay-agent-info\": [ ] } }"; - ElementPtr user_context_list; - ASSERT_NO_THROW(user_context_list = Element::fromJSON(user_context_list_txt)); - string user_context_lower_txt = "{ \"isc\": { \"relay-agent-info\":"; - user_context_lower_txt += " \"0204010203040c03aabbcc\" } }"; - ElementPtr user_context_lower; - ASSERT_NO_THROW(user_context_lower = Element::fromJSON(user_context_lower_txt)); - string user_context_badsub_txt = "{ \"ISC\": { \"relay-agent-info\": {"; - user_context_badsub_txt += " \"sub-options\": \"foobar\","; - user_context_badsub_txt += " \"relay-id\": \"AABBCC\","; - user_context_badsub_txt += " \"remote-id\": \"01020304\" } } }"; - ElementPtr user_context_badsub; - ASSERT_NO_THROW(user_context_badsub = Element::fromJSON(user_context_badsub_txt)); - string user_context_extra_txt = "{ \"ISC\": { \"relay-agent-info\": {"; - user_context_extra_txt += " \"foo\": \"bar\", "; - user_context_extra_txt += " \"sub-options\": \"0204010203040C03AABBCC\","; - user_context_extra_txt += " \"relay-id\": \"AABBCC\","; - user_context_extra_txt += " \"remote-id\": \"01020304\" } } }"; - ElementPtr user_context_extra; - ASSERT_NO_THROW(user_context_extra = Element::fromJSON(user_context_extra_txt)); - - Lease4Ptr lease; - // lease0: addr0, ids, before: always not updated. - lease = leases4[0]; - ASSERT_TRUE(lease); - lease->relay_id_ = relay_id; - lease->remote_id_ = remote_id; - lease->setContext(user_context); - lease->cltt_ = now_ - 500; - - // lease1: addr1, ids, after: always not updated. - lease = leases4[1]; - ASSERT_TRUE(lease); - lease->relay_id_ = relay_id; - lease->remote_id_ = remote_id; - lease->setContext(user_context); - lease->cltt_ = now_ + 500; - - // lease2: addr2, no id, old user context: updated on check > NONE. - lease = leases4[2]; - ASSERT_TRUE(lease); - lease->setContext(user_context_old); - - // lease3: addr3, ids, lower case old user context: always updated. - lease = leases4[3]; - ASSERT_TRUE(lease); - lease->relay_id_ = relay_id; - lease->remote_id_ = remote_id; - lease->setContext(user_context_lower); - - // Lease4: addr4, ids, bad (list) user context: updated on check > NONE. - lease = leases4[4]; - ASSERT_TRUE(lease); - lease->relay_id_ = relay_id; - lease->remote_id_ = remote_id; - lease->setContext(user_context_list); - - // Lease5: addr5, other ids: always updated. - lease = leases4[5]; - ASSERT_TRUE(lease); - lease->relay_id_ = relay_id2; - lease->remote_id_ = remote_id2; - lease->setContext(user_context); - - // Lease6: addr6, ids, bad sub-options: updated on check > FIX. - lease = leases4[6]; - ASSERT_TRUE(lease); - lease->relay_id_ = relay_id; - lease->remote_id_ = remote_id; - lease->setContext(user_context_badsub); - - // Lease7: addr7, ids, extra in ISC: updated on check > STRICT. - lease = leases4[7]; - ASSERT_TRUE(lease); - lease->relay_id_ = relay_id; - lease->remote_id_ = remote_id; - lease->setContext(user_context_extra); - - // Add leases. - for (size_t i = 0; i < leases4.size(); ++i) { - EXPECT_TRUE(lease_mgr_->addLease(leases4[i])); - } - - // Set extended info consistency. - CfgMgr::instance().getCurrentCfg()->getConsistency()-> - setExtendedInfoSanityCheck(check); - - size_t updated; - ASSERT_NO_THROW(updated = lease_mgr_->upgradeExtendedInfo4(page_size)); - - // Verify result. - switch (check) { - case CfgConsistency::EXTENDED_INFO_CHECK_NONE: - // Updated leases: 3, 5. - EXPECT_EQ(updated, 2); - break; - - case CfgConsistency::EXTENDED_INFO_CHECK_FIX: - // Updated leases: 2, 3, 4, 5. - EXPECT_EQ(updated, 4); - break; - - case CfgConsistency::EXTENDED_INFO_CHECK_STRICT: - // Updated leases: 2, 3, 4, 5, 6. - EXPECT_EQ(updated, 5); - break; - - case CfgConsistency::EXTENDED_INFO_CHECK_PEDANTIC: - default: - // Updated leases: 2, 3, 4, 5, 6, 7. - EXPECT_EQ(updated, 6); - break; - } - - // Verify stored leases. - Lease4Collection got; - // Use the page version as it returns leases in order. - EXPECT_NO_THROW(got = lease_mgr_->getLeases4(zero, LeasePageSize(100))); - ASSERT_EQ(leases4.size(), got.size()); - - // Check lease0. - lease = got[0]; - EXPECT_EQ(*lease, *leases4[0]); - EXPECT_EQ(relay_id, lease->relay_id_); - EXPECT_EQ(remote_id, lease->remote_id_); - - // Check lease1. - lease = got[1]; - EXPECT_EQ(*lease, *leases4[1]); - EXPECT_EQ(relay_id, lease->relay_id_); - EXPECT_EQ(remote_id, lease->remote_id_); - - // Check lease2. - lease = got[2]; - Lease4Ptr expected2(new Lease4(*leases4[2])); - if (check == CfgConsistency::EXTENDED_INFO_CHECK_NONE) { - EXPECT_EQ(*lease, *expected2); - EXPECT_TRUE(lease->relay_id_.empty()); - EXPECT_TRUE(lease->remote_id_.empty()); - } else { - expected2->setContext(user_context); - expected2->relay_id_ = relay_id; - expected2->remote_id_ = remote_id; - EXPECT_EQ(*lease, *expected2); - EXPECT_EQ(relay_id, lease->relay_id_); - EXPECT_EQ(remote_id, lease->remote_id_); - } - - // Check lease3. - lease = got[3]; - Lease4Ptr expected3(new Lease4(*leases4[3])); - expected3->relay_id_.clear(); - expected3->remote_id_.clear(); - EXPECT_EQ(*lease, *expected3); - EXPECT_TRUE(lease->relay_id_.empty()); - EXPECT_TRUE(lease->remote_id_.empty()); - - // Check lease4. - lease = got[4]; - Lease4Ptr expected4(new Lease4(*leases4[4])); - if (check == CfgConsistency::EXTENDED_INFO_CHECK_NONE) { - EXPECT_EQ(*lease, *expected4); - EXPECT_EQ(relay_id, lease->relay_id_); - EXPECT_EQ(remote_id, lease->remote_id_); - } else { - expected4->relay_id_.clear(); - expected4->remote_id_.clear(); - expected4->setContext(ElementPtr()); - EXPECT_EQ(*lease, *expected4); - EXPECT_TRUE(lease->relay_id_.empty()); - EXPECT_TRUE(lease->remote_id_.empty()); - } - - // Check lease5. - lease = got[5]; - Lease4Ptr expected5(new Lease4(*leases4[5])); - expected5->relay_id_ = relay_id; - expected5->remote_id_ = remote_id; - EXPECT_EQ(*lease, *expected5); - EXPECT_EQ(relay_id, lease->relay_id_); - EXPECT_EQ(remote_id, lease->remote_id_); - - // Check lease6. - lease = got[6]; - Lease4Ptr expected6(new Lease4(*leases4[6])); - if ((check != CfgConsistency::EXTENDED_INFO_CHECK_STRICT) && - (check != CfgConsistency::EXTENDED_INFO_CHECK_PEDANTIC)) { - EXPECT_EQ(*lease, *expected6); - EXPECT_EQ(relay_id, lease->relay_id_); - EXPECT_EQ(remote_id, lease->remote_id_); - } else { - expected6->relay_id_.clear(); - expected6->remote_id_.clear(); - expected6->setContext(ElementPtr()); - EXPECT_EQ(*lease, *expected6); - EXPECT_TRUE(lease->relay_id_.empty()); - EXPECT_TRUE(lease->remote_id_.empty()); - } - - // Check lease7. - lease = got[7]; - Lease4Ptr expected7(new Lease4(*leases4[7])); - if (check != CfgConsistency::EXTENDED_INFO_CHECK_PEDANTIC) { - EXPECT_EQ(*lease, *expected7); - EXPECT_EQ(relay_id, lease->relay_id_); - EXPECT_EQ(remote_id, lease->remote_id_); - } else { - expected7->relay_id_.clear(); - expected7->remote_id_.clear(); - expected7->setContext(ElementPtr()); - EXPECT_EQ(*lease, *expected7); - EXPECT_TRUE(lease->relay_id_.empty()); - EXPECT_TRUE(lease->remote_id_.empty()); - } - - // Verify getLeases4ByRelayId. - Lease4Collection by_relay_id; - EXPECT_NO_THROW(by_relay_id = - lease_mgr_->getLeases4ByRelayId(relay_id, - zero, - LeasePageSize(100))); - switch (check) { - case CfgConsistency::EXTENDED_INFO_CHECK_NONE: - // Got leases: 0, 1, 4, 5, 6, 7. - EXPECT_EQ(6, by_relay_id.size()); - break; - - case CfgConsistency::EXTENDED_INFO_CHECK_FIX: - // Got leases: 0, 1, 2, 5, 6, 7. - EXPECT_EQ(6, by_relay_id.size()); - break; - - case CfgConsistency::EXTENDED_INFO_CHECK_STRICT: - // Got leases: 0, 1, 2, 4, 7. - EXPECT_EQ(5, by_relay_id.size()); - break; - - case CfgConsistency::EXTENDED_INFO_CHECK_PEDANTIC: - default: - // Got leases: 0, 1, 2, 4. - EXPECT_EQ(4, by_relay_id.size()); - break; - } - - // Verify getLeases4ByRemoteId. - Lease4Collection by_remote_id; - EXPECT_NO_THROW(by_remote_id = - lease_mgr_->getLeases4ByRemoteId(remote_id, - zero, - LeasePageSize(100))); - switch (check) { - case CfgConsistency::EXTENDED_INFO_CHECK_NONE: - // Got leases: 0, 1, 4, 5, 6, 7. - EXPECT_EQ(6, by_remote_id.size()); - break; - - case CfgConsistency::EXTENDED_INFO_CHECK_FIX: - // Got leases: 0, 1, 2, 5, 6, 7. - EXPECT_EQ(6, by_remote_id.size()); - break; - - case CfgConsistency::EXTENDED_INFO_CHECK_STRICT: - // Got leases: 0, 1, 2, 4, 7. - EXPECT_EQ(5, by_remote_id.size()); - break; - - case CfgConsistency::EXTENDED_INFO_CHECK_PEDANTIC: - default: - // Got leases: 0, 1, 2, 4. - EXPECT_EQ(4, by_remote_id.size()); - break; - } - -} - TEST_F(PgSqlExtendedInfoTest, upgradeExtendedInfo4None) { testUpgradeExtendedInfo4(CfgConsistency::EXTENDED_INFO_CHECK_NONE, LeasePageSize(100)); @@ -1096,14 +154,6 @@ TEST_F(PgSqlExtendedInfoTest, upgradeExtendedInfo4_1) { LeasePageSize(1)); } -/// @brief Verifies that the lease manager can add the v6 leases. -void -PgSqlExtendedInfoTest::testInitLease6() { - start(false); - initLease6(); - checkLease6(); -} - TEST_F(PgSqlExtendedInfoTest, initLease6) { testInitLease6(); } @@ -1113,25 +163,6 @@ TEST_F(PgSqlExtendedInfoTest, initLease6MultiThreading) { testInitLease6(); } -/// @brief Verifies that the lease manager can add the v6 leases with tables. -void -PgSqlExtendedInfoTest::testEnableTables() { - start(true); - initLease6(); - EXPECT_EQ(8, leases6.size()); - Lease6Collection got; - EXPECT_NO_THROW(got = lease_mgr_->getLeases6()); - ASSERT_EQ(leases6.size(), got.size()); - for (size_t i = 0; i < leases6.size(); ++i) { - ConstElementPtr expected = leases6[i]->toElement(); - LeasePtr lease = got[i]; - ASSERT_TRUE(lease); - EXPECT_TRUE(expected->equals(*lease->toElement())) - << "expected: " << expected->str() << "\n" - << "got: " << lease->toElement()->str() << "\n"; - } -} - TEST_F(PgSqlExtendedInfoTest, enableTables) { testEnableTables(); } @@ -1141,164 +172,6 @@ TEST_F(PgSqlExtendedInfoTest, enableTablesMultiThreading) { testEnableTables(); } -/// @brief Verifies that getLeases6ByRelayId works as expected. -void -PgSqlExtendedInfoTest::testGetLeases6ByRelayId() { - // Lease manager is created with empty tables. - start(true); - initLease6(); - EXPECT_EQ(0, lease_mgr_->byRelayId6size()); - - // Create parameter values. - IOAddress lease_addr0(ADDRESS6[0]); - IOAddress lease_addr1(ADDRESS6[1]); - IOAddress lease_addr2(ADDRESS6[2]); - IOAddress link_addr(ADDRESS6[4]); - IOAddress other_link_addr("2001:db8:1::4"); - IOAddress zero = IOAddress::IPV6_ZERO_ADDRESS(); - vector relay_id_data0 = createFromString(DUIDS[0]); - DUID relay_id0(relay_id_data0); - vector relay_id_data1 = createFromString(DUIDS[1]); - DUID relay_id1(relay_id_data1); - vector relay_id_data2 = createFromString(DUIDS[2]); - DUID relay_id2(relay_id_data2); - - // Fill the table. - EXPECT_NO_THROW(lease_mgr_->addRelayId6(lease_addr0, relay_id_data0)); - EXPECT_NO_THROW(lease_mgr_->addRelayId6(lease_addr0, relay_id_data0)); - EXPECT_NO_THROW(lease_mgr_->addRelayId6(lease_addr0, relay_id_data1)); - EXPECT_NO_THROW(lease_mgr_->addRelayId6(lease_addr1, relay_id_data0)); - EXPECT_NO_THROW(lease_mgr_->addRelayId6(lease_addr1, relay_id_data1)); - EXPECT_NO_THROW(lease_mgr_->addRelayId6(lease_addr2, relay_id_data1)); - EXPECT_EQ(6, lease_mgr_->byRelayId6size()); - - Lease6Collection got; - // Unknown relay id #2, no link: nothing. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRelayId(relay_id2, - zero, - 0, - zero, - LeasePageSize(100))); - EXPECT_EQ(0, got.size()); - - // Unknown relay id #2, link: nothing. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRelayId(relay_id2, - link_addr, - 64, - zero, - LeasePageSize(100))); - EXPECT_EQ(0, got.size()); - - // Relay id #0, other link: nothing. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRelayId(relay_id0, - other_link_addr, - 64, - zero, - LeasePageSize(100))); - EXPECT_EQ(0, got.size()); - - // Relay id #0, no link: 3 entries but 2 addresses. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRelayId(relay_id0, - zero, - 0, - zero, - LeasePageSize(100))); - ASSERT_EQ(2, got.size()); - Lease6Ptr lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(lease_addr0, lease->addr_); - lease = got[1]; - ASSERT_TRUE(lease); - EXPECT_EQ(lease_addr1, lease->addr_); - - // Relay id #1, no link, partial: 2 entries. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRelayId(relay_id1, - zero, - 0, - zero, - LeasePageSize(2))); - ASSERT_EQ(2, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(lease_addr0, lease->addr_); - lease = got[1]; - ASSERT_TRUE(lease); - EXPECT_EQ(lease_addr1, lease->addr_); - - // Relay id #1, no link, partial from previous: 1 entry. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRelayId(relay_id1, - zero, - 0, - lease->addr_, - LeasePageSize(2))); - ASSERT_EQ(1, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(lease_addr2, lease->addr_); - - // Add another entry for last tests. - EXPECT_NO_THROW(lease_mgr_->addRelayId6(lease_addr0, relay_id_data1)); - EXPECT_EQ(7, lease_mgr_->byRelayId6size()); - - // Relay id #1, link: 3 entries. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRelayId(relay_id1, - link_addr, - 64, - zero, - LeasePageSize(100))); - ASSERT_EQ(3, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(lease_addr0, lease->addr_); - lease = got[1]; - ASSERT_TRUE(lease); - EXPECT_EQ(lease_addr1, lease->addr_); - lease = got[2]; - ASSERT_TRUE(lease); - EXPECT_EQ(lease_addr2, lease->addr_); - - // Relay id #1, link, initial partial: 1 entry. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRelayId(relay_id1, - link_addr, - 64, - zero, - LeasePageSize(1))); - ASSERT_EQ(1, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(lease_addr0, lease->addr_); - - // Relay id #1, link, next partial: 1 entry. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRelayId(relay_id1, - link_addr, - 64, - lease->addr_, - LeasePageSize(1))); - ASSERT_EQ(1, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(lease_addr1, lease->addr_); - - // Relay id #1, link, next partial: 1 entry. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRelayId(relay_id1, - link_addr, - 64, - lease->addr_, - LeasePageSize(1))); - ASSERT_EQ(1, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(lease_addr2, lease->addr_); - - // Relay id #1, link, final partial: nothing. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRelayId(relay_id1, - link_addr, - 64, - lease->addr_, - LeasePageSize(1))); - EXPECT_EQ(0, got.size()); -} - TEST_F(PgSqlExtendedInfoTest, getLeases6ByRelayId) { testGetLeases6ByRelayId(); } @@ -1308,161 +181,6 @@ TEST_F(PgSqlExtendedInfoTest, getLeases6ByRelayIdMultiThreading) { testGetLeases6ByRelayId(); } -/// @brief Verifies that getLeases6ByRemoteId works as expected. -void -PgSqlExtendedInfoTest::testGetLeases6ByRemoteId() { - // Lease manager is created with empty tables. - start(true); - initLease6(); - EXPECT_EQ(0, lease_mgr_->byRemoteId6size()); - - // Create parameter values. - IOAddress lease_addr0(ADDRESS6[0]); - IOAddress lease_addr1(ADDRESS6[1]); - IOAddress lease_addr2(ADDRESS6[2]); - IOAddress link_addr(ADDRESS6[4]); - IOAddress other_link_addr("2001:db8:1::4"); - IOAddress zero = IOAddress::IPV6_ZERO_ADDRESS(); - vector remote_id0 = createFromString(DUIDS[0]); - vector remote_id1 = createFromString(DUIDS[1]); - vector remote_id2 = createFromString(DUIDS[2]); - - // Fill the table. - EXPECT_NO_THROW(lease_mgr_->addRemoteId6(lease_addr0, remote_id0)); - EXPECT_NO_THROW(lease_mgr_->addRemoteId6(lease_addr0, remote_id0)); - EXPECT_NO_THROW(lease_mgr_->addRemoteId6(lease_addr0, remote_id1)); - EXPECT_NO_THROW(lease_mgr_->addRemoteId6(lease_addr1, remote_id0)); - EXPECT_NO_THROW(lease_mgr_->addRemoteId6(lease_addr1, remote_id1)); - EXPECT_NO_THROW(lease_mgr_->addRemoteId6(lease_addr2, remote_id1)); - EXPECT_EQ(6, lease_mgr_->byRemoteId6size()); - - Lease6Collection got; - // Unknown remote id #2, no link: nothing. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRemoteId(remote_id2, - zero, - 0, - zero, - LeasePageSize(10))); - EXPECT_EQ(0, got.size()); - - // Unknown remote id #2, link: nothing. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRemoteId(remote_id2, - link_addr, - 64, - zero, - LeasePageSize(10))); - EXPECT_EQ(0, got.size()); - - // Remote id #0, other link: nothing. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRemoteId(remote_id0, - other_link_addr, - 64, - zero, - LeasePageSize(10))); - EXPECT_EQ(0, got.size()); - - // Remote id #0, no link: 3 entries but 2 addresses. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRemoteId(remote_id0, - zero, - 0, - zero, - LeasePageSize(10))); - ASSERT_EQ(2, got.size()); - Lease6Ptr lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(lease_addr0, lease->addr_); - lease = got[1]; - ASSERT_TRUE(lease); - EXPECT_EQ(lease_addr1, lease->addr_); - - // Remote id #1, no link, partial: 2 entries. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRemoteId(remote_id1, - zero, - 0, - zero, - LeasePageSize(2))); - ASSERT_EQ(2, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(lease_addr0, lease->addr_); - lease = got[1]; - ASSERT_TRUE(lease); - EXPECT_EQ(lease_addr1, lease->addr_); - - // Remote id #1, no link, partial from previous: 1 entry. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRemoteId(remote_id1, - zero, - 0, - lease->addr_, - LeasePageSize(2))); - ASSERT_EQ(1, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(lease_addr2, lease->addr_); - - // Add another entry for last tests. - EXPECT_NO_THROW(lease_mgr_->addRemoteId6(lease_addr0, remote_id1)); - EXPECT_EQ(7, lease_mgr_->byRemoteId6size()); - - // Remote id #1, link: 3 entries. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRemoteId(remote_id1, - link_addr, - 64, - zero, - LeasePageSize(10))); - ASSERT_EQ(3, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(lease_addr0, lease->addr_); - lease = got[1]; - ASSERT_TRUE(lease); - EXPECT_EQ(lease_addr1, lease->addr_); - lease = got[2]; - ASSERT_TRUE(lease); - EXPECT_EQ(lease_addr2, lease->addr_); - - // Remote id #1, link, initial partial: 1 entry. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRemoteId(remote_id1, - link_addr, - 64, - zero, - LeasePageSize(1))); - ASSERT_EQ(1, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(lease_addr0, lease->addr_); - - // Remote id #1, link, next partial: 1 entry. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRemoteId(remote_id1, - link_addr, - 64, - lease->addr_, - LeasePageSize(1))); - ASSERT_EQ(1, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(lease_addr1, lease->addr_); - - // Remote id #1, link, next partial: 1 entry. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRemoteId(remote_id1, - link_addr, - 64, - lease->addr_, - LeasePageSize(1))); - ASSERT_EQ(1, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_EQ(lease_addr2, lease->addr_); - - // Remote id #1, link, final partial: nothing. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRemoteId(remote_id1, - link_addr, - 64, - lease->addr_, - LeasePageSize(1))); - EXPECT_EQ(0, got.size()); -} - TEST_F(PgSqlExtendedInfoTest, getLeases6ByRemoteId) { testGetLeases6ByRemoteId(); } @@ -1472,72 +190,6 @@ TEST_F(PgSqlExtendedInfoTest, getLeases6ByRemoteIdMultiThreading) { testGetLeases6ByRemoteId(); } -/// @brief Verifies that getLeases6ByLink works as expected. -void -PgSqlExtendedInfoTest::testGetLeases6ByLink() { - // Lease manager is created with empty tables. - start(false); - initLease6(); - - // Create parameter values. - IOAddress link_addr(ADDRESS6[4]); - IOAddress other_link_addr("2001:db8:1::4"); - IOAddress zero = IOAddress::IPV6_ZERO_ADDRESS(); - - Lease6Collection got; - // Other link: nothing. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByLink(other_link_addr, - 64, - zero, - LeasePageSize(10))); - EXPECT_EQ(0, got.size()); - - // Link: 8 entries. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByLink(link_addr, - 64, - zero, - LeasePageSize(10))); - - ASSERT_EQ(8, got.size()); - Lease6Ptr lease; - for (size_t i = 0; i < 8; ++i) { - lease = got[i]; - ASSERT_TRUE(lease); - EXPECT_EQ(IOAddress(ADDRESS6[i]), lease->addr_); - } - - // Link: initial partial: 4 entries. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByLink(link_addr, - 64, - zero, - LeasePageSize(4))); - ASSERT_EQ(4, got.size()); - for (size_t i = 0; i < 4; ++i) { - lease = got[i]; - ASSERT_TRUE(lease); - EXPECT_EQ(IOAddress(ADDRESS6[i]), lease->addr_); - } - - // Link: next partial: 4 entries. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByLink(link_addr, - 64, - lease->addr_, - LeasePageSize(4))); - ASSERT_EQ(4, got.size()); - for (size_t i = 0; i < 4; ++i) { - lease = got[i]; - ASSERT_TRUE(lease); - EXPECT_EQ(IOAddress(ADDRESS6[i + 4]), lease->addr_); - } - - // Link: further partial: nothing. - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByLink(link_addr, - 64, - lease->addr_, - LeasePageSize(4))); - EXPECT_EQ(0, got.size()); -} - TEST_F(PgSqlExtendedInfoTest, getLeases6ByLink) { testGetLeases6ByLink(); } @@ -1547,193 +199,6 @@ TEST_F(PgSqlExtendedInfoTest, getLeases6ByLinkMultiThreading) { testGetLeases6ByLink(); } -void -PgSqlExtendedInfoTest::testUpgradeExtendedInfo6(const CfgConsistency::ExtendedInfoSanity& check, - bool extended_info_table_enable, - const LeasePageSize& page_size) { - // Lease manager is created with empty tables. - start(false); - initLease6(); - - IOAddress zero = IOAddress::IPV6_ZERO_ADDRESS(); - LeasePageSize ps100(100); - Lease6Collection got; - - // Set empty map user context to first lease. - leases6[0]->setContext(Element::createMap()); - - // Set old extended info format to second lease. - string txt1 = "{ \"ISC\": { \"relays\": [ { \"hop\": 44,"; - txt1 += " \"link\": \"2001:db8::4\", \"peer\": \"2001:db8::5\","; - txt1 += " \"options\": \"0x00250006010203040506003500086464646464646464\""; - txt1 += " } ] } }"; - EXPECT_NO_THROW(leases6[1]->setContext(Element::fromJSON(txt1))); - - // Set third lease with two relays. - string txt2 = "{ \"ISC\": { \"relay-info\": [ { \"hop\": 33,"; - txt2 += " \"link\": \"2001:db8::1\", \"peer\": \"2001:db8::2\","; - txt2 += " \"options\": \"0x00C800080102030405060708\" }, { \"hop\": 100,"; - txt2 += " \"options\": \"0x00250006010203040506003500086464646464646464\","; - txt2 += " \"link\": \"2001:db8::5\", \"peer\": \"2001:db8::6\","; - txt2 += " \"remote-id\": \"010203040506\","; - txt2 += " \"relay-id\": \"6464646464646464\" } ] } }"; - EXPECT_NO_THROW(leases6[2]->setContext(Element::fromJSON(txt2))); - - // Update leases. - for (size_t i = 0; i < leases6.size(); ++i) { - Lease6Ptr copy(new Lease6(*leases6[i])); - EXPECT_NO_THROW(lease_mgr_->updateLease6(copy)); - } - - // Check we have expected leases. - checkLease6(); - - // Set expected lease6. - if (check != CfgConsistency::EXTENDED_INFO_CHECK_NONE) { - // Reset user context for first lease. - leases6[0]->setContext(ConstElementPtr()); - - // Compute upgraded extended info for second lease. - EXPECT_TRUE(LeaseMgr::upgradeLease6ExtendedInfo(leases6[1], check)); - } - - // Set extended info consistency. - CfgMgr::instance().getCurrentCfg()->getConsistency()-> - setExtendedInfoSanityCheck(check); - - // Set extended info table enable flag. - lease_mgr_->setExtendedInfoTablesEnabled(extended_info_table_enable); - - // Put something in extended info tables. - ASSERT_NO_THROW(lease_mgr_->wipeExtendedInfoTables6()); - ASSERT_NO_THROW(lease_mgr_->addRelayId6(ADDRESS6[4], - createFromString(DUIDS[4]))); - ASSERT_NO_THROW(lease_mgr_->addRemoteId6(ADDRESS6[5], - createFromString(DUIDS[5]))); - - // Run upgrade command. - size_t updated; - ASSERT_NO_THROW(updated = lease_mgr_->upgradeExtendedInfo6(page_size)); - - // Verify result. - checkLease6(); - - // If extended info tables were not enabled they are not touched. - if (!extended_info_table_enable) { - EXPECT_EQ(1, lease_mgr_->byRelayId6size()); - EXPECT_EQ(1, lease_mgr_->byRemoteId6size()); - - // Check relay id. - vector relay_id_data = createFromString(DUIDS[4]); - DUID relay_id(relay_id_data); - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRelayId(relay_id, - zero, - 0, - zero, - ps100)); - ASSERT_EQ(1, got.size()); - EXPECT_EQ(IOAddress(ADDRESS6[4]), got[0]->addr_); - - // Check remote id. - vector remote_id = createFromString(DUIDS[5]); - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRemoteId(remote_id, - zero, - 0, - zero, - ps100)); - ASSERT_EQ(1, got.size()); - EXPECT_EQ(IOAddress(ADDRESS6[5]), got[0]->addr_); - } - - if (check == CfgConsistency::EXTENDED_INFO_CHECK_NONE) { - if (!extended_info_table_enable) { - // Nothing was done. - EXPECT_EQ(0, updated); - } else { - // Tables were rebuilt with only the third lease. - EXPECT_EQ(1, updated); - EXPECT_EQ(1, lease_mgr_->byRelayId6size()); - EXPECT_EQ(1, lease_mgr_->byRemoteId6size()); - - DUID relay_id(vector(8, 0x64)); - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRelayId(relay_id, - zero, - 0, - zero, - ps100)); - ASSERT_EQ(1, got.size()); - ConstElementPtr expected2 = leases6[2]->toElement(); - LeasePtr lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_TRUE(expected2->equals(*lease->toElement())) - << "expected2: " << expected2->str() << "\n" - << "got: " << lease->toElement()->str() << "\n"; - - vector remote_id = { 1, 2, 3, 4, 5, 6 }; - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRemoteId(remote_id, - zero, - 0, - zero, - ps100)); - ASSERT_EQ(1, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_TRUE(expected2->equals(*lease->toElement())) - << "expected2: " << expected2->str() << "\n" - << "got: " << lease->toElement()->str() << "\n"; - } - } else { - // Updated first and second. - if (!extended_info_table_enable) { - // and nothing else. - EXPECT_EQ(2, updated); - } else { - // Second and third leases were added to extended info tables. - EXPECT_EQ(3, updated); - EXPECT_EQ(2, lease_mgr_->byRelayId6size()); - EXPECT_EQ(2, lease_mgr_->byRemoteId6size()); - - DUID relay_id(vector(8, 0x64)); - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRelayId(relay_id, - zero, - 0, - zero, - ps100)); - ASSERT_EQ(2, got.size()); - ConstElementPtr expected1 = leases6[1]->toElement(); - LeasePtr lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_TRUE(expected1->equals(*lease->toElement())) - << "expected1: " << expected1->str() << "\n" - << "got: " << lease->toElement()->str() << "\n"; - ConstElementPtr expected2 = leases6[2]->toElement(); - lease = got[1]; - ASSERT_TRUE(lease); - EXPECT_TRUE(expected2->equals(*lease->toElement())) - << "expected2: " << expected2->str() << "\n" - << "got: " << lease->toElement()->str() << "\n"; - - vector remote_id = { 1, 2, 3, 4, 5, 6 }; - EXPECT_NO_THROW(got = lease_mgr_->getLeases6ByRemoteId(remote_id, - zero, - 0, - zero, - ps100)); - ASSERT_EQ(2, got.size()); - lease = got[0]; - ASSERT_TRUE(lease); - EXPECT_TRUE(expected1->equals(*lease->toElement())) - << "expected1: " << expected1->str() << "\n" - << "got: " << lease->toElement()->str() << "\n"; - lease = got[1]; - ASSERT_TRUE(lease); - EXPECT_TRUE(expected2->equals(*lease->toElement())) - << "expected2: " << expected2->str() << "\n" - << "got: " << lease->toElement()->str() << "\n"; - } - } -} - TEST_F(PgSqlExtendedInfoTest, upgradeExtendedInfo6NoCheckDisabled) { testUpgradeExtendedInfo6(CfgConsistency::EXTENDED_INFO_CHECK_NONE, false,