From: Francis Dupont Date: Tue, 2 Jun 2020 19:01:32 +0000 (+0200) Subject: [#1265] Removed the random index for subnets X-Git-Tag: Kea-1.7.10~7^2~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3a0d60a502b069ff934994d1de49cc3b5647c12a;p=thirdparty%2Fkea.git [#1265] Removed the random index for subnets --- diff --git a/src/bin/dhcp4/tests/config_parser_unittest.cc b/src/bin/dhcp4/tests/config_parser_unittest.cc index a3ea616588..6496e0c584 100644 --- a/src/bin/dhcp4/tests/config_parser_unittest.cc +++ b/src/bin/dhcp4/tests/config_parser_unittest.cc @@ -793,7 +793,12 @@ public: ASSERT_TRUE(subnets); ASSERT_GE(subnets->size(), subnet_index + 1); - const PoolCollection pools = subnets->at(subnet_index)->getPools(Lease::TYPE_V4); + auto subnet = subnets->begin(); + // std::advance is not available for subnets iterators. + for (size_t i = 0; i < subnet_index; ++i) { + subnet = std::next(subnet); + } + const PoolCollection pools = (*subnet)->getPools(Lease::TYPE_V4); ASSERT_GE(pools.size(), pool_index + 1); pool = pools.at(pool_index); @@ -1109,10 +1114,11 @@ TEST_F(Dhcp4ParserTest, multipleSubnets) { ASSERT_EQ(4, subnets->size()); // We expect 4 subnets // Check subnet-ids of each subnet (it should be monotonously increasing) - EXPECT_EQ(1, subnets->at(0)->getID()); - EXPECT_EQ(2, subnets->at(1)->getID()); - EXPECT_EQ(3, subnets->at(2)->getID()); - EXPECT_EQ(4, subnets->at(3)->getID()); + auto subnet = subnets->begin(); + EXPECT_EQ(1, (*subnet)->getID()); + EXPECT_EQ(2, (*++subnet)->getID()); + EXPECT_EQ(3, (*++subnet)->getID()); + EXPECT_EQ(4, (*++subnet)->getID()); // Repeat reconfiguration process 10 times and check that the subnet-id // is set to the same value. Technically, just two iterations would be @@ -1167,10 +1173,12 @@ TEST_F(Dhcp4ParserTest, multipleSubnetsExplicitIDs) { ASSERT_EQ(4, subnets->size()); // We expect 4 subnets // Verify that subnet ids are as expected. - EXPECT_EQ(1024, subnets->at(0)->getID()); - EXPECT_EQ(100, subnets->at(1)->getID()); - EXPECT_EQ(1, subnets->at(2)->getID()); - EXPECT_EQ(34, subnets->at(3)->getID()); + // Now the subnet order is the subnet id one. + auto subnet = subnets->begin(); + EXPECT_EQ(1, (*subnet)->getID()); + EXPECT_EQ(34, (*++subnet)->getID()); + EXPECT_EQ(100, (*++subnet)->getID()); + EXPECT_EQ(1024, (*++subnet)->getID()); // Repeat reconfiguration process 10 times and check that the subnet-id // is set to the same value. @@ -1312,9 +1320,10 @@ TEST_F(Dhcp4ParserTest, reconfigureRemoveSubnet) { ASSERT_EQ(3, subnets->size()); // We expect 3 subnets now (4th is removed) // Check subnet-ids of each subnet (it should be monotonously increasing) - EXPECT_EQ(1, subnets->at(0)->getID()); - EXPECT_EQ(2, subnets->at(1)->getID()); - EXPECT_EQ(3, subnets->at(2)->getID()); + auto subnet = subnets->begin(); + EXPECT_EQ(1, (*subnet)->getID()); + EXPECT_EQ(2, (*++subnet)->getID()); + EXPECT_EQ(3, (*++subnet)->getID()); CfgMgr::instance().clear(); @@ -1335,11 +1344,11 @@ TEST_F(Dhcp4ParserTest, reconfigureRemoveSubnet) { ASSERT_TRUE(subnets); ASSERT_EQ(3, subnets->size()); // We expect 4 subnets - EXPECT_EQ(1, subnets->at(0)->getID()); + auto subnet_it = subnets->begin(); + EXPECT_EQ(1, (*subnet_it)->getID()); // The second subnet (with subnet-id = 2) is no longer there - EXPECT_EQ(3, subnets->at(1)->getID()); - EXPECT_EQ(4, subnets->at(2)->getID()); - + EXPECT_EQ(3, (*++subnet_it)->getID()); + EXPECT_EQ(4, (*++subnet_it)->getID()); } /// @todo: implement subnet removal test as part of #3281. @@ -1869,26 +1878,28 @@ TEST_F(Dhcp4ParserTest, multiplePools) { ASSERT_EQ(2, subnets->size()); // We expect 2 subnets // Check the first subnet - const PoolCollection& pools1 = subnets->at(0)->getPools(Lease::TYPE_V4); + auto subnet = subnets->begin(); + const PoolCollection& pools1 = (*subnet)->getPools(Lease::TYPE_V4); ASSERT_EQ(2, pools1.size()); EXPECT_EQ("type=V4, 192.0.2.0-192.0.2.15", pools1[0]->toText()); EXPECT_EQ("type=V4, 192.0.2.200-192.0.2.255", pools1[1]->toText()); // There shouldn't be any TA or PD pools - EXPECT_THROW(subnets->at(0)->getPools(Lease::TYPE_TA), BadValue); - EXPECT_THROW(subnets->at(0)->getPools(Lease::TYPE_PD), BadValue); + EXPECT_THROW((*subnet)->getPools(Lease::TYPE_TA), BadValue); + EXPECT_THROW((*subnet)->getPools(Lease::TYPE_PD), BadValue); // Check the second subnet - const PoolCollection& pools2 = subnets->at(1)->getPools(Lease::TYPE_V4); + ++subnet; + const PoolCollection& pools2 = (*subnet)->getPools(Lease::TYPE_V4); ASSERT_EQ(2, pools2.size()); EXPECT_EQ("type=V4, 192.0.3.0-192.0.3.127", pools2[0]->toText()); EXPECT_EQ("type=V4, 192.0.3.128-192.0.3.255", pools2[1]->toText()); // There shouldn't be any TA or PD pools - EXPECT_THROW(subnets->at(0)->getPools(Lease::TYPE_TA).empty(), BadValue); - EXPECT_THROW(subnets->at(0)->getPools(Lease::TYPE_PD).empty(), BadValue); + EXPECT_THROW((*subnet)->getPools(Lease::TYPE_TA).empty(), BadValue); + EXPECT_THROW((*subnet)->getPools(Lease::TYPE_PD).empty(), BadValue); } // Test verifies that a subnet with pool values that do not belong to that @@ -4742,47 +4753,51 @@ TEST_F(Dhcp4ParserTest, classifySubnets) { // everyone). ClientClasses classes; classes.insert("alpha"); - EXPECT_TRUE (subnets->at(0)->clientSupported(classes)); - EXPECT_FALSE(subnets->at(1)->clientSupported(classes)); - EXPECT_FALSE(subnets->at(2)->clientSupported(classes)); - EXPECT_TRUE (subnets->at(3)->clientSupported(classes)); + auto subnet0 = subnets->begin(); + auto subnet1 = std::next(subnet0); + auto subnet2 = std::next(subnet1); + auto subnet3 = std::next(subnet2); + EXPECT_TRUE ((*subnet0)->clientSupported(classes)); + EXPECT_FALSE((*subnet1)->clientSupported(classes)); + EXPECT_FALSE((*subnet2)->clientSupported(classes)); + EXPECT_TRUE ((*subnet3)->clientSupported(classes)); // Let's check if client belonging to beta class is supported in subnet[1] // and not supported in any other subnet (except subnet[3], which allows // everyone). classes.clear(); classes.insert("beta"); - EXPECT_FALSE(subnets->at(0)->clientSupported(classes)); - EXPECT_TRUE (subnets->at(1)->clientSupported(classes)); - EXPECT_FALSE(subnets->at(2)->clientSupported(classes)); - EXPECT_TRUE (subnets->at(3)->clientSupported(classes)); + EXPECT_FALSE((*subnet0)->clientSupported(classes)); + EXPECT_TRUE ((*subnet1)->clientSupported(classes)); + EXPECT_FALSE((*subnet2)->clientSupported(classes)); + EXPECT_TRUE ((*subnet3)->clientSupported(classes)); // Let's check if client belonging to gamma class is supported in subnet[2] // and not supported in any other subnet (except subnet[3], which allows // everyone). classes.clear(); classes.insert("gamma"); - EXPECT_FALSE(subnets->at(0)->clientSupported(classes)); - EXPECT_FALSE(subnets->at(1)->clientSupported(classes)); - EXPECT_TRUE (subnets->at(2)->clientSupported(classes)); - EXPECT_TRUE (subnets->at(3)->clientSupported(classes)); + EXPECT_FALSE((*subnet0)->clientSupported(classes)); + EXPECT_FALSE((*subnet1)->clientSupported(classes)); + EXPECT_TRUE ((*subnet2)->clientSupported(classes)); + EXPECT_TRUE ((*subnet3)->clientSupported(classes)); // Let's check if client belonging to some other class (not mentioned in // the config) is supported only in subnet[3], which allows everyone. classes.clear(); classes.insert("delta"); - EXPECT_FALSE(subnets->at(0)->clientSupported(classes)); - EXPECT_FALSE(subnets->at(1)->clientSupported(classes)); - EXPECT_FALSE(subnets->at(2)->clientSupported(classes)); - EXPECT_TRUE (subnets->at(3)->clientSupported(classes)); + EXPECT_FALSE((*subnet0)->clientSupported(classes)); + EXPECT_FALSE((*subnet1)->clientSupported(classes)); + EXPECT_FALSE((*subnet2)->clientSupported(classes)); + EXPECT_TRUE ((*subnet3)->clientSupported(classes)); // Finally, let's check class-less client. He should be allowed only in // the last subnet, which does not have any class restrictions. classes.clear(); - EXPECT_FALSE(subnets->at(0)->clientSupported(classes)); - EXPECT_FALSE(subnets->at(1)->clientSupported(classes)); - EXPECT_FALSE(subnets->at(2)->clientSupported(classes)); - EXPECT_TRUE (subnets->at(3)->clientSupported(classes)); + EXPECT_FALSE((*subnet0)->clientSupported(classes)); + EXPECT_FALSE((*subnet1)->clientSupported(classes)); + EXPECT_FALSE((*subnet2)->clientSupported(classes)); + EXPECT_TRUE ((*subnet3)->clientSupported(classes)); } // Goal of this test is to verify that multiple pools can be configured @@ -4823,7 +4838,7 @@ TEST_F(Dhcp4ParserTest, classifyPools) { CfgMgr::instance().getStagingCfg()->getCfgSubnets4()->getAll(); ASSERT_TRUE(subnets); ASSERT_EQ(1, subnets->size()); - const PoolCollection& pools = subnets->at(0)->getPools(Lease::TYPE_V4); + const PoolCollection& pools = (*subnets->begin())->getPools(Lease::TYPE_V4); ASSERT_EQ(4, pools.size()); // We expect 4 pools // Let's check if client belonging to alpha class is supported in pool[0] @@ -6602,7 +6617,7 @@ TEST_F(Dhcp4ParserTest, comments) { const Subnet4Collection* subs = net->getAllSubnets(); ASSERT_TRUE(subs); ASSERT_EQ(1, subs->size()); - Subnet4Ptr sub = subs->at(0); + Subnet4Ptr sub = *subs->begin(); ASSERT_TRUE(sub); EXPECT_EQ(100, sub->getID()); EXPECT_EQ("192.0.1.0/24", sub->toText()); diff --git a/src/bin/dhcp4/tests/decline_unittest.cc b/src/bin/dhcp4/tests/decline_unittest.cc index 6bb98b2e36..b694bab394 100644 --- a/src/bin/dhcp4/tests/decline_unittest.cc +++ b/src/bin/dhcp4/tests/decline_unittest.cc @@ -106,7 +106,7 @@ Dhcpv4SrvTest::acquireAndDecline(Dhcp4Client& client, CfgMgr::instance().getCurrentCfg()->getCfgSubnets4()->getAll(); ASSERT_EQ(1, subnets->size()); std::stringstream name; - name << "subnet[" << subnets->at(0)->getID() << "].declined-addresses"; + name << "subnet[" << (*subnets->begin())->getID() << "].declined-addresses"; // Set the subnet specific statistic explicitly to zero. isc::stats::StatsMgr::instance().setValue(name.str(), static_cast(0)); diff --git a/src/bin/dhcp4/tests/dhcp4_srv_unittest.cc b/src/bin/dhcp4/tests/dhcp4_srv_unittest.cc index 340d26fb8f..9d889cc3c9 100644 --- a/src/bin/dhcp4/tests/dhcp4_srv_unittest.cc +++ b/src/bin/dhcp4/tests/dhcp4_srv_unittest.cc @@ -1720,7 +1720,7 @@ TEST_F(Dhcpv4SrvTest, discoverEchoClientId) { const Subnet4Collection* subnets = cfg->getCfgSubnets4()->getAll(); ASSERT_EQ(1, subnets->size()); CfgMgr::instance().clear(); - CfgMgr::instance().getStagingCfg()->getCfgSubnets4()->add(subnets->at(0)); + CfgMgr::instance().getStagingCfg()->getCfgSubnets4()->add(*subnets->begin()); CfgMgr::instance().getStagingCfg()->setEchoClientId(false); CfgMgr::instance().commit(); @@ -1797,7 +1797,7 @@ TEST_F(Dhcpv4SrvTest, requestEchoClientId) { const Subnet4Collection* subnets = cfg->getCfgSubnets4()->getAll(); ASSERT_EQ(1, subnets->size()); CfgMgr::instance().clear(); - CfgMgr::instance().getStagingCfg()->getCfgSubnets4()->add(subnets->at(0)); + CfgMgr::instance().getStagingCfg()->getCfgSubnets4()->add(*subnets->begin()); CfgMgr::instance().getStagingCfg()->setEchoClientId(false); CfgMgr::instance().commit(); @@ -3547,8 +3547,8 @@ TEST_F(Dhcpv4SrvTest, relayOverride) { ASSERT_EQ(2, subnets->size()); // Let's get them for easy reference - Subnet4Ptr subnet1 = (*subnets)[0]; - Subnet4Ptr subnet2 = (*subnets)[1]; + Subnet4Ptr subnet1 = *subnets->begin(); + Subnet4Ptr subnet2 = *std::next(subnets->begin()); ASSERT_TRUE(subnet1); ASSERT_TRUE(subnet2); @@ -3633,8 +3633,8 @@ TEST_F(Dhcpv4SrvTest, relayOverrideAndClientClass) { ASSERT_EQ(2, subnets->size()); // Let's get them for easy reference - Subnet4Ptr subnet1 = (*subnets)[0]; - Subnet4Ptr subnet2 = (*subnets)[1]; + Subnet4Ptr subnet1 = *subnets->begin(); + Subnet4Ptr subnet2 = *std::next(subnets->begin()); ASSERT_TRUE(subnet1); ASSERT_TRUE(subnet2); @@ -3695,9 +3695,12 @@ TEST_F(Dhcpv4SrvTest, relayLinkSelect) { ASSERT_EQ(3, subnets->size()); // Let's get them for easy reference - Subnet4Ptr subnet1 = (*subnets)[0]; - Subnet4Ptr subnet2 = (*subnets)[1]; - Subnet4Ptr subnet3 = (*subnets)[2]; + auto subnet_it = subnets->begin(); + Subnet4Ptr subnet1 = *subnet_it; + ++subnet_it; + Subnet4Ptr subnet2 = *subnet_it; + ++subnet_it; + Subnet4Ptr subnet3 = *subnet_it; ASSERT_TRUE(subnet1); ASSERT_TRUE(subnet2); ASSERT_TRUE(subnet3); @@ -3814,9 +3817,12 @@ TEST_F(Dhcpv4SrvTest, subnetSelect) { ASSERT_EQ(3, subnets->size()); // Let's get them for easy reference - Subnet4Ptr subnet1 = (*subnets)[0]; - Subnet4Ptr subnet2 = (*subnets)[1]; - Subnet4Ptr subnet3 = (*subnets)[2]; + auto subnet_it = subnets->begin(); + Subnet4Ptr subnet1 = *subnet_it; + ++subnet_it; + Subnet4Ptr subnet2 = *subnet_it; + ++subnet_it; + Subnet4Ptr subnet3 = *subnet_it; ASSERT_TRUE(subnet1); ASSERT_TRUE(subnet2); ASSERT_TRUE(subnet3); @@ -4154,7 +4160,7 @@ TEST_F(Dhcpv4SrvTest, userContext) { ASSERT_EQ(1, subnets->size()); // Let's get the subnet and check its context. - Subnet4Ptr subnet1 = (*subnets)[0]; + Subnet4Ptr subnet1 = *subnets->begin(); ASSERT_TRUE(subnet1); ASSERT_TRUE(subnet1->getContext()); EXPECT_EQ("{ \"secure\": false }", subnet1->getContext()->str()); diff --git a/src/bin/dhcp4/tests/get_config_unittest.cc b/src/bin/dhcp4/tests/get_config_unittest.cc index cac614e0f3..98755403be 100644 --- a/src/bin/dhcp4/tests/get_config_unittest.cc +++ b/src/bin/dhcp4/tests/get_config_unittest.cc @@ -2877,12 +2877,12 @@ const char* UNPARSED_CONFIGS[] = { " \"4o6-interface-id\": \"\",\n" " \"4o6-subnet\": \"\",\n" " \"calculate-tee-times\": false,\n" -" \"id\": 1024,\n" +" \"id\": 1,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" " \"option-data\": [ ],\n" -" \"pool\": \"192.0.2.1-192.0.2.100\"\n" +" \"pool\": \"192.0.4.101-192.0.4.150\"\n" " }\n" " ],\n" " \"rebind-timer\": 2000,\n" @@ -2892,7 +2892,7 @@ const char* UNPARSED_CONFIGS[] = { " \"renew-timer\": 1000,\n" " \"reservations\": [ ],\n" " \"store-extended-info\": false,\n" -" \"subnet\": \"192.0.2.0/24\",\n" +" \"subnet\": \"192.0.4.0/24\",\n" " \"t1-percent\": 0.5,\n" " \"t2-percent\": 0.875,\n" " \"valid-lifetime\": 4000\n" @@ -2902,12 +2902,12 @@ const char* UNPARSED_CONFIGS[] = { " \"4o6-interface-id\": \"\",\n" " \"4o6-subnet\": \"\",\n" " \"calculate-tee-times\": false,\n" -" \"id\": 100,\n" +" \"id\": 34,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" " \"option-data\": [ ],\n" -" \"pool\": \"192.0.3.101-192.0.3.150\"\n" +" \"pool\": \"192.0.5.101-192.0.5.150\"\n" " }\n" " ],\n" " \"rebind-timer\": 2000,\n" @@ -2917,7 +2917,7 @@ const char* UNPARSED_CONFIGS[] = { " \"renew-timer\": 1000,\n" " \"reservations\": [ ],\n" " \"store-extended-info\": false,\n" -" \"subnet\": \"192.0.3.0/24\",\n" +" \"subnet\": \"192.0.5.0/24\",\n" " \"t1-percent\": 0.5,\n" " \"t2-percent\": 0.875,\n" " \"valid-lifetime\": 4000\n" @@ -2927,12 +2927,12 @@ const char* UNPARSED_CONFIGS[] = { " \"4o6-interface-id\": \"\",\n" " \"4o6-subnet\": \"\",\n" " \"calculate-tee-times\": false,\n" -" \"id\": 1,\n" +" \"id\": 100,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" " \"option-data\": [ ],\n" -" \"pool\": \"192.0.4.101-192.0.4.150\"\n" +" \"pool\": \"192.0.3.101-192.0.3.150\"\n" " }\n" " ],\n" " \"rebind-timer\": 2000,\n" @@ -2942,7 +2942,7 @@ const char* UNPARSED_CONFIGS[] = { " \"renew-timer\": 1000,\n" " \"reservations\": [ ],\n" " \"store-extended-info\": false,\n" -" \"subnet\": \"192.0.4.0/24\",\n" +" \"subnet\": \"192.0.3.0/24\",\n" " \"t1-percent\": 0.5,\n" " \"t2-percent\": 0.875,\n" " \"valid-lifetime\": 4000\n" @@ -2952,12 +2952,12 @@ const char* UNPARSED_CONFIGS[] = { " \"4o6-interface-id\": \"\",\n" " \"4o6-subnet\": \"\",\n" " \"calculate-tee-times\": false,\n" -" \"id\": 34,\n" +" \"id\": 1024,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" " \"option-data\": [ ],\n" -" \"pool\": \"192.0.5.101-192.0.5.150\"\n" +" \"pool\": \"192.0.2.1-192.0.2.100\"\n" " }\n" " ],\n" " \"rebind-timer\": 2000,\n" @@ -2967,7 +2967,7 @@ const char* UNPARSED_CONFIGS[] = { " \"renew-timer\": 1000,\n" " \"reservations\": [ ],\n" " \"store-extended-info\": false,\n" -" \"subnet\": \"192.0.5.0/24\",\n" +" \"subnet\": \"192.0.2.0/24\",\n" " \"t1-percent\": 0.5,\n" " \"t2-percent\": 0.875,\n" " \"valid-lifetime\": 4000\n" diff --git a/src/bin/dhcp4/tests/hooks_unittest.cc b/src/bin/dhcp4/tests/hooks_unittest.cc index 06cc6d333d..28385223ab 100644 --- a/src/bin/dhcp4/tests/hooks_unittest.cc +++ b/src/bin/dhcp4/tests/hooks_unittest.cc @@ -563,7 +563,7 @@ public: // Let's change to a different subnet if (subnets->size() > 1) { - subnet = (*subnets)[1]; // Let's pick the other subnet + subnet = *std::next(subnets->begin()); // Let's pick the other subnet callout_handle.setArgument("subnet4", subnet); } @@ -1617,15 +1617,15 @@ TEST_F(HooksDhcpv4SrvTest, subnet4SelectSimple) { // The server is supposed to pick the first subnet, because of matching // interface. Check that the value is reported properly. ASSERT_TRUE(callback_subnet4_); - EXPECT_EQ(exp_subnets->front().get(), callback_subnet4_.get()); + EXPECT_EQ(exp_subnets->begin()->get(), callback_subnet4_.get()); // Server is supposed to report two subnets ASSERT_EQ(exp_subnets->size(), callback_subnet4collection_->size()); ASSERT_GE(exp_subnets->size(), 2); // Compare that the available subnets are reported as expected - EXPECT_TRUE((*exp_subnets)[0].get() == (*callback_subnet4collection_)[0].get()); - EXPECT_TRUE((*exp_subnets)[1].get() == (*callback_subnet4collection_)[1].get()); + EXPECT_TRUE((*exp_subnets->begin())->get() == (*callback_subnet4collection_->begin())->get()); + EXPECT_TRUE((*std::next(exp_subnets->begin()))->get() == (*std::next(callback_subnet4collection_->begin()))->get()); // Pkt passed to a callout must be configured to copy retrieved options. EXPECT_TRUE(callback_qry_options_copy_); @@ -1698,8 +1698,10 @@ TEST_F(HooksDhcpv4SrvTest, subnet4SelectChange) { // Advertised address must belong to the second pool (in subnet's range, // in dynamic pool) - EXPECT_TRUE((*subnets)[1]->inRange(addr)); - EXPECT_TRUE((*subnets)[1]->inPool(Lease::TYPE_V4, addr)); + auto subnet = subnets->begin(); + ++subnet; + EXPECT_TRUE((*subnet)->inRange(addr)); + EXPECT_TRUE((*subnet)->inPool(Lease::TYPE_V4, addr)); // Check if the callout handle state was reset after the callout. checkCalloutHandleReset(sol); diff --git a/src/bin/dhcp4/tests/kea_controller_unittest.cc b/src/bin/dhcp4/tests/kea_controller_unittest.cc index c8b43945ab..d6054e07f9 100644 --- a/src/bin/dhcp4/tests/kea_controller_unittest.cc +++ b/src/bin/dhcp4/tests/kea_controller_unittest.cc @@ -431,35 +431,37 @@ TEST_F(JSONFileBackendTest, jsonFile) { ASSERT_TRUE(subnets); ASSERT_EQ(3, subnets->size()); // We expect 3 subnets. - // Check subnet 1. - EXPECT_EQ("192.0.2.0", subnets->at(0)->get().first.toText()); - EXPECT_EQ(24, subnets->at(0)->get().second); + auto subnet = subnets->begin(); + EXPECT_EQ("192.0.2.0", (*subnet)->get().first.toText()); + EXPECT_EQ(24, (*subnet)->get().second); // Check pools in the first subnet. - const PoolCollection& pools1 = subnets->at(0)->getPools(Lease::TYPE_V4); + const PoolCollection& pools1 = (*subnet)->getPools(Lease::TYPE_V4); ASSERT_EQ(1, pools1.size()); EXPECT_EQ("192.0.2.1", pools1.at(0)->getFirstAddress().toText()); EXPECT_EQ("192.0.2.100", pools1.at(0)->getLastAddress().toText()); EXPECT_EQ(Lease::TYPE_V4, pools1.at(0)->getType()); // Check subnet 2. - EXPECT_EQ("192.0.3.0", subnets->at(1)->get().first.toText()); - EXPECT_EQ(24, subnets->at(1)->get().second); + ++subnet; + EXPECT_EQ("192.0.3.0", (*subnet)->get().first.toText()); + EXPECT_EQ(24, (*subnet)->get().second); // Check pools in the second subnet. - const PoolCollection& pools2 = subnets->at(1)->getPools(Lease::TYPE_V4); + const PoolCollection& pools2 = (*subnet)->getPools(Lease::TYPE_V4); ASSERT_EQ(1, pools2.size()); EXPECT_EQ("192.0.3.101", pools2.at(0)->getFirstAddress().toText()); EXPECT_EQ("192.0.3.150", pools2.at(0)->getLastAddress().toText()); EXPECT_EQ(Lease::TYPE_V4, pools2.at(0)->getType()); // And finally check subnet 3. - EXPECT_EQ("192.0.4.0", subnets->at(2)->get().first.toText()); - EXPECT_EQ(24, subnets->at(2)->get().second); + ++subnet; + EXPECT_EQ("192.0.4.0", (*subnet)->get().first.toText()); + EXPECT_EQ(24, (*subnet)->get().second); // ... and it's only pool. - const PoolCollection& pools3 = subnets->at(2)->getPools(Lease::TYPE_V4); + const PoolCollection& pools3 = (*subnet)->getPools(Lease::TYPE_V4); EXPECT_EQ("192.0.4.101", pools3.at(0)->getFirstAddress().toText()); EXPECT_EQ("192.0.4.150", pools3.at(0)->getLastAddress().toText()); EXPECT_EQ(Lease::TYPE_V4, pools3.at(0)->getType()); @@ -503,11 +505,12 @@ TEST_F(JSONFileBackendTest, hashComments) { ASSERT_EQ(1, subnets->size()); // Check subnet 1. - EXPECT_EQ("192.0.2.0", subnets->at(0)->get().first.toText()); - EXPECT_EQ(22, subnets->at(0)->get().second); + auto subnet = subnets->begin(); + EXPECT_EQ("192.0.2.0", (*subnet)->get().first.toText()); + EXPECT_EQ(22, (*subnet)->get().second); // Check pools in the first subnet. - const PoolCollection& pools1 = subnets->at(0)->getPools(Lease::TYPE_V4); + const PoolCollection& pools1 = (*subnet)->getPools(Lease::TYPE_V4); ASSERT_EQ(1, pools1.size()); EXPECT_EQ("192.0.2.0", pools1.at(0)->getFirstAddress().toText()); EXPECT_EQ("192.0.2.255", pools1.at(0)->getLastAddress().toText()); @@ -552,11 +555,12 @@ TEST_F(JSONFileBackendTest, cppLineComments) { ASSERT_EQ(1, subnets->size()); // Check subnet 1. - EXPECT_EQ("192.0.2.0", subnets->at(0)->get().first.toText()); - EXPECT_EQ(22, subnets->at(0)->get().second); + auto subnet = subnets->begin(); + EXPECT_EQ("192.0.2.0", (*subnet)->get().first.toText()); + EXPECT_EQ(22, (*subnet)->get().second); // Check pools in the first subnet. - const PoolCollection& pools1 = subnets->at(0)->getPools(Lease::TYPE_V4); + const PoolCollection& pools1 = (*subnet)->getPools(Lease::TYPE_V4); ASSERT_EQ(1, pools1.size()); EXPECT_EQ("192.0.2.0", pools1.at(0)->getFirstAddress().toText()); EXPECT_EQ("192.0.2.255", pools1.at(0)->getLastAddress().toText()); @@ -601,11 +605,12 @@ TEST_F(JSONFileBackendTest, cBlockComments) { ASSERT_EQ(1, subnets->size()); // Check subnet 1. - EXPECT_EQ("192.0.2.0", subnets->at(0)->get().first.toText()); - EXPECT_EQ(22, subnets->at(0)->get().second); + auto subnet = subnets->begin(); + EXPECT_EQ("192.0.2.0", (*subnet)->get().first.toText()); + EXPECT_EQ(22, (*subnet)->get().second); // Check pools in the first subnet. - const PoolCollection& pools1 = subnets->at(0)->getPools(Lease::TYPE_V4); + const PoolCollection& pools1 = (*subnet)->getPools(Lease::TYPE_V4); ASSERT_EQ(1, pools1.size()); EXPECT_EQ("192.0.2.0", pools1.at(0)->getFirstAddress().toText()); EXPECT_EQ("192.0.2.255", pools1.at(0)->getLastAddress().toText()); @@ -650,11 +655,12 @@ TEST_F(JSONFileBackendTest, include) { ASSERT_EQ(1, subnets->size()); // Check subnet 1. - EXPECT_EQ("192.0.2.0", subnets->at(0)->get().first.toText()); - EXPECT_EQ(22, subnets->at(0)->get().second); + auto subnet = subnets->begin(); + EXPECT_EQ("192.0.2.0", (*subnet)->get().first.toText()); + EXPECT_EQ(22, (*subnet)->get().second); // Check pools in the first subnet. - const PoolCollection& pools1 = subnets->at(0)->getPools(Lease::TYPE_V4); + const PoolCollection& pools1 = (*subnet)->getPools(Lease::TYPE_V4); ASSERT_EQ(1, pools1.size()); EXPECT_EQ("192.0.2.0", pools1.at(0)->getFirstAddress().toText()); EXPECT_EQ("192.0.2.255", pools1.at(0)->getLastAddress().toText()); diff --git a/src/bin/dhcp4/tests/release_unittest.cc b/src/bin/dhcp4/tests/release_unittest.cc index b018d33154..f2f66f32cf 100644 --- a/src/bin/dhcp4/tests/release_unittest.cc +++ b/src/bin/dhcp4/tests/release_unittest.cc @@ -141,7 +141,7 @@ ReleaseTest::acquireAndRelease(const std::string& hw_address_1, const Subnet4Collection* subnets = CfgMgr::instance().getCurrentCfg()->getCfgSubnets4()->getAll(); ASSERT_EQ(1, subnets->size()); - name << "subnet[" << subnets->at(0)->getID() << "].assigned-addresses"; + name << "subnet[" << (*subnets->begin())->getID() << "].assigned-addresses"; ObservationPtr assigned_cnt = StatsMgr::instance().getObservation(name.str()); ASSERT_TRUE(assigned_cnt); diff --git a/src/bin/dhcp6/tests/classify_unittests.cc b/src/bin/dhcp6/tests/classify_unittests.cc index 70185fc968..51d7e8674e 100644 --- a/src/bin/dhcp6/tests/classify_unittests.cc +++ b/src/bin/dhcp6/tests/classify_unittests.cc @@ -1286,8 +1286,8 @@ TEST_F(ClassifyTest, relayOverrideAndClientClass) { ASSERT_EQ(2, subnets->size()); // Let's get them for easy reference - Subnet6Ptr subnet1 = (*subnets)[0]; - Subnet6Ptr subnet2 = (*subnets)[1]; + Subnet6Ptr subnet1 = *subnets->begin(); + Subnet6Ptr subnet2 = *std::next(subnets->begin()); ASSERT_TRUE(subnet1); ASSERT_TRUE(subnet2); diff --git a/src/bin/dhcp6/tests/config_parser_unittest.cc b/src/bin/dhcp6/tests/config_parser_unittest.cc index b171d58984..d508a277f9 100644 --- a/src/bin/dhcp6/tests/config_parser_unittest.cc +++ b/src/bin/dhcp6/tests/config_parser_unittest.cc @@ -961,7 +961,12 @@ public: ASSERT_TRUE(subnets); ASSERT_GE(subnets->size(), subnet_index + 1); - const PoolCollection pools = subnets->at(subnet_index)->getPools(type); + auto subnet = subnets->begin(); + // std::advance is not available for subnets iterators. + for (size_t i = 0; i < subnet_index; ++i) { + subnet = std::next(subnet); + } + const PoolCollection pools = (*subnet)->getPools(type); ASSERT_GE(pools.size(), pool_index + 1); pool = pools.at(pool_index); @@ -1297,10 +1302,11 @@ TEST_F(Dhcp6ParserTest, multipleSubnets) { ASSERT_EQ(4, subnets->size()); // We expect 4 subnets // Check subnet-ids of each subnet (it should be monotonously increasing) - EXPECT_EQ(1, subnets->at(0)->getID()); - EXPECT_EQ(2, subnets->at(1)->getID()); - EXPECT_EQ(3, subnets->at(2)->getID()); - EXPECT_EQ(4, subnets->at(3)->getID()); + auto subnet = subnets->begin(); + EXPECT_EQ(1, (*subnet)->getID()); + EXPECT_EQ(2, (*++subnet)->getID()); + EXPECT_EQ(3, (*++subnet)->getID()); + EXPECT_EQ(4, (*++subnet)->getID()); // Repeat reconfiguration process 10 times and check that the subnet-id // is set to the same value. Technically, just two iterations would be @@ -1357,10 +1363,12 @@ TEST_F(Dhcp6ParserTest, multipleSubnetsExplicitIDs) { ASSERT_EQ(4, subnets->size()); // We expect 4 subnets // Check that subnet ids are as expected. - EXPECT_EQ(1024, subnets->at(0)->getID()); - EXPECT_EQ(100, subnets->at(1)->getID()); - EXPECT_EQ(1, subnets->at(2)->getID()); - EXPECT_EQ(34, subnets->at(3)->getID()); + // Now the subnet order is the subnet id one. + auto subnet = subnets->begin(); + EXPECT_EQ(1, (*subnet)->getID()); + EXPECT_EQ(34, (*++subnet)->getID()); + EXPECT_EQ(100, (*++subnet)->getID()); + EXPECT_EQ(1024, (*++subnet)->getID()); // Repeat reconfiguration process 10 times and check that the subnet-id // is set to the same value. @@ -1508,9 +1516,10 @@ TEST_F(Dhcp6ParserTest, reconfigureRemoveSubnet) { ASSERT_TRUE(subnets); ASSERT_EQ(3, subnets->size()); // We expect 3 subnets now (4th is removed) - EXPECT_EQ(1, subnets->at(0)->getID()); - EXPECT_EQ(2, subnets->at(1)->getID()); - EXPECT_EQ(3, subnets->at(2)->getID()); + auto subnet = subnets->begin(); + EXPECT_EQ(1, (*subnet)->getID()); + EXPECT_EQ(2, (*++subnet)->getID()); + EXPECT_EQ(3, (*++subnet)->getID()); /// CASE 2: Configure 4 subnets, then reconfigure and remove one /// from in between (not first, not last) @@ -1532,10 +1541,11 @@ TEST_F(Dhcp6ParserTest, reconfigureRemoveSubnet) { ASSERT_TRUE(subnets); ASSERT_EQ(3, subnets->size()); // We expect 4 subnets - EXPECT_EQ(1, subnets->at(0)->getID()); + subnet = subnets->begin(); + EXPECT_EQ(1, (*subnet)->getID()); // The second subnet (with subnet-id = 2) is no longer there - EXPECT_EQ(3, subnets->at(1)->getID()); - EXPECT_EQ(4, subnets->at(2)->getID()); + EXPECT_EQ(3, (*++subnet)->getID()); + EXPECT_EQ(4, (*++subnet)->getID()); } // This test checks if it is possible to override global values @@ -1928,26 +1938,28 @@ TEST_F(Dhcp6ParserTest, multiplePools) { ASSERT_EQ(2, subnets->size()); // We expect 2 subnets // Check the first subnet - const PoolCollection& pools1 = subnets->at(0)->getPools(Lease::TYPE_NA); + auto subnet = subnets->begin(); + const PoolCollection& pools1 = (*subnet)->getPools(Lease::TYPE_NA); ASSERT_EQ(2, pools1.size()); EXPECT_EQ("type=IA_NA, 2001:db8:1::-2001:db8:1::ffff:ffff, delegated_len=128", pools1[0]->toText()); EXPECT_EQ("type=IA_NA, 2001:db8:1:0:abcd::-2001:db8:1:0:abcd::ffff, delegated_len=128", pools1[1]->toText()); // There shouldn't be any TA or PD pools - EXPECT_TRUE(subnets->at(0)->getPools(Lease::TYPE_TA).empty()); - EXPECT_TRUE(subnets->at(0)->getPools(Lease::TYPE_PD).empty()); + EXPECT_TRUE((*subnet)->getPools(Lease::TYPE_TA).empty()); + EXPECT_TRUE((*subnet)->getPools(Lease::TYPE_PD).empty()); // Check the second subnet - const PoolCollection& pools2 = subnets->at(1)->getPools(Lease::TYPE_NA); + ++subnet; + const PoolCollection& pools2 = (*subnet)->getPools(Lease::TYPE_NA); ASSERT_EQ(2, pools2.size()); EXPECT_EQ("type=IA_NA, 2001:db8:2::1-2001:db8:2::ff, delegated_len=128", pools2[0]->toText()); EXPECT_EQ("type=IA_NA, 2001:db8:2::300-2001:db8:2::3ff, delegated_len=128", pools2[1]->toText()); // There shouldn't be any TA or PD pools - EXPECT_TRUE(subnets->at(0)->getPools(Lease::TYPE_TA).empty()); - EXPECT_TRUE(subnets->at(0)->getPools(Lease::TYPE_PD).empty()); + EXPECT_TRUE((*subnet)->getPools(Lease::TYPE_TA).empty()); + EXPECT_TRUE((*subnet)->getPools(Lease::TYPE_PD).empty()); } // Test verifies that a subnet with pool values that do not belong to that @@ -4615,47 +4627,51 @@ TEST_F(Dhcp6ParserTest, classifySubnets) { // everyone). ClientClasses classes; classes.insert("alpha"); - EXPECT_TRUE (subnets->at(0)->clientSupported(classes)); - EXPECT_FALSE(subnets->at(1)->clientSupported(classes)); - EXPECT_FALSE(subnets->at(2)->clientSupported(classes)); - EXPECT_TRUE (subnets->at(3)->clientSupported(classes)); + auto subnet0 = subnets->begin(); + auto subnet1 = std::next(subnet0); + auto subnet2 = std::next(subnet1); + auto subnet3 = std::next(subnet2); + EXPECT_TRUE ((*subnet0)->clientSupported(classes)); + EXPECT_FALSE((*subnet1)->clientSupported(classes)); + EXPECT_FALSE((*subnet2)->clientSupported(classes)); + EXPECT_TRUE ((*subnet3)->clientSupported(classes)); // Let's check if client belonging to beta class is supported in subnet[1] // and not supported in any other subnet (except subnet[3], which allows // everyone). classes.clear(); classes.insert("beta"); - EXPECT_FALSE(subnets->at(0)->clientSupported(classes)); - EXPECT_TRUE (subnets->at(1)->clientSupported(classes)); - EXPECT_FALSE(subnets->at(2)->clientSupported(classes)); - EXPECT_TRUE (subnets->at(3)->clientSupported(classes)); + EXPECT_FALSE((*subnet0)->clientSupported(classes)); + EXPECT_TRUE ((*subnet1)->clientSupported(classes)); + EXPECT_FALSE((*subnet2)->clientSupported(classes)); + EXPECT_TRUE ((*subnet3)->clientSupported(classes)); // Let's check if client belonging to gamma class is supported in subnet[2] // and not supported in any other subnet (except subnet[3], which allows // everyone). classes.clear(); classes.insert("gamma"); - EXPECT_FALSE(subnets->at(0)->clientSupported(classes)); - EXPECT_FALSE(subnets->at(1)->clientSupported(classes)); - EXPECT_TRUE (subnets->at(2)->clientSupported(classes)); - EXPECT_TRUE (subnets->at(3)->clientSupported(classes)); + EXPECT_FALSE((*subnet0)->clientSupported(classes)); + EXPECT_FALSE((*subnet1)->clientSupported(classes)); + EXPECT_TRUE ((*subnet2)->clientSupported(classes)); + EXPECT_TRUE ((*subnet3)->clientSupported(classes)); // Let's check if client belonging to some other class (not mentioned in // the config) is supported only in subnet[3], which allows everyone. classes.clear(); classes.insert("delta"); - EXPECT_FALSE(subnets->at(0)->clientSupported(classes)); - EXPECT_FALSE(subnets->at(1)->clientSupported(classes)); - EXPECT_FALSE(subnets->at(2)->clientSupported(classes)); - EXPECT_TRUE (subnets->at(3)->clientSupported(classes)); + EXPECT_FALSE((*subnet0)->clientSupported(classes)); + EXPECT_FALSE((*subnet1)->clientSupported(classes)); + EXPECT_FALSE((*subnet2)->clientSupported(classes)); + EXPECT_TRUE ((*subnet3)->clientSupported(classes)); // Finally, let's check class-less client. He should be allowed only in // the last subnet, which does not have any class restrictions. classes.clear(); - EXPECT_FALSE(subnets->at(0)->clientSupported(classes)); - EXPECT_FALSE(subnets->at(1)->clientSupported(classes)); - EXPECT_FALSE(subnets->at(2)->clientSupported(classes)); - EXPECT_TRUE (subnets->at(3)->clientSupported(classes)); + EXPECT_FALSE((*subnet0)->clientSupported(classes)); + EXPECT_FALSE((*subnet1)->clientSupported(classes)); + EXPECT_FALSE((*subnet2)->clientSupported(classes)); + EXPECT_TRUE ((*subnet3)->clientSupported(classes)); } // Goal of this test is to verify that multiple pools can be configured @@ -4697,7 +4713,7 @@ TEST_F(Dhcp6ParserTest, classifyPools) { CfgMgr::instance().getStagingCfg()->getCfgSubnets6()->getAll(); ASSERT_TRUE(subnets); ASSERT_EQ(1, subnets->size()); - const PoolCollection& pools = subnets->at(0)->getPools(Lease::TYPE_NA); + const PoolCollection& pools = (*subnets->begin())->getPools(Lease::TYPE_NA); ASSERT_EQ(4, pools.size()); // We expect 4 pools // Let's check if client belonging to alpha class is supported in pool[0] @@ -4795,7 +4811,7 @@ TEST_F(Dhcp6ParserTest, classifyPdPools) { CfgMgr::instance().getStagingCfg()->getCfgSubnets6()->getAll(); ASSERT_TRUE(subnets); ASSERT_EQ(1, subnets->size()); - const PoolCollection& pools = subnets->at(0)->getPools(Lease::TYPE_PD); + const PoolCollection& pools = (*subnets->begin())->getPools(Lease::TYPE_PD); ASSERT_EQ(4, pools.size()); // We expect 4 pools // Let's check if client belonging to alpha class is supported in pool[0] @@ -7045,8 +7061,9 @@ TEST_F(Dhcp6ParserTest, sharedNetworksRapidCommit) { const Subnet6Collection * subs = net->getAllSubnets(); ASSERT_TRUE(subs); ASSERT_EQ(2, subs->size()); - EXPECT_TRUE(subs->at(0)->getRapidCommit()); - EXPECT_TRUE(subs->at(1)->getRapidCommit()); + auto sub = subs->begin(); + EXPECT_TRUE((*sub)->getRapidCommit()); + EXPECT_TRUE((*std::next(sub))->getRapidCommit()); // Ok, now check the second shared network. It doesn't have // anything defined on shared-network or subnet level, so @@ -7059,7 +7076,8 @@ TEST_F(Dhcp6ParserTest, sharedNetworksRapidCommit) { EXPECT_EQ(1, subs->size()); // This subnet should derive its renew-timer from global scope. - EXPECT_FALSE(subs->at(0)->getRapidCommit()); + sub = subs->begin(); + EXPECT_FALSE((*sub)->getRapidCommit()); } // Tests that non-matching rapid-commit setting for subnets belonging to a @@ -7250,7 +7268,7 @@ TEST_F(Dhcp6ParserTest, comments) { const Subnet6Collection* subs = net->getAllSubnets(); ASSERT_TRUE(subs); ASSERT_EQ(1, subs->size()); - Subnet6Ptr sub = subs->at(0); + Subnet6Ptr sub = *subs->begin(); ASSERT_TRUE(sub); // Check subnet user context. diff --git a/src/bin/dhcp6/tests/decline_unittest.cc b/src/bin/dhcp6/tests/decline_unittest.cc index 53be0f515a..dd7f584f08 100644 --- a/src/bin/dhcp6/tests/decline_unittest.cc +++ b/src/bin/dhcp6/tests/decline_unittest.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2017 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2015-2020 Internet Systems Consortium, Inc. ("ISC") // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -88,7 +88,8 @@ Dhcpv6SrvTest::acquireAndDecline(Dhcp6Client& client, ASSERT_EQ(1, subnets->size()); // Let's generate the subnet specific statistic - std::string name = StatsMgr::generateName("subnet", subnets->at(0)->getID(), + std::string name = StatsMgr::generateName("subnet", + (*subnets->begin())->getID(), "declined-addresses"); // Set this statistic explicitly to zero. diff --git a/src/bin/dhcp6/tests/dhcp6_message_test.cc b/src/bin/dhcp6/tests/dhcp6_message_test.cc index 41ad4d80ad..b47e242068 100644 --- a/src/bin/dhcp6/tests/dhcp6_message_test.cc +++ b/src/bin/dhcp6/tests/dhcp6_message_test.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2015 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2014-2020 Internet Systems Consortium, Inc. ("ISC") // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -60,8 +60,10 @@ Dhcpv6MessageTest::requestLease(const std::string& config, // Check if the lease belongs to one of the available pools. bool pool_found = false; - for (int i = 0; i < subnets_num; ++i) { - if ((*subnets)[i]->getPool(lease_client.type_, lease_client.addr_)) { + auto subnet = subnets->begin(); + for (int i = 0; i < subnets_num; ++i, ++subnet) { + ASSERT_TRUE(subnet != subnets->end()); + if ((*subnet)->getPool(lease_client.type_, lease_client.addr_)) { pool_found = true; break; } diff --git a/src/bin/dhcp6/tests/dhcp6_srv_unittest.cc b/src/bin/dhcp6/tests/dhcp6_srv_unittest.cc index 65d7179ac6..a805365707 100644 --- a/src/bin/dhcp6/tests/dhcp6_srv_unittest.cc +++ b/src/bin/dhcp6/tests/dhcp6_srv_unittest.cc @@ -2287,8 +2287,8 @@ TEST_F(Dhcpv6SrvTest, relayOverride) { ASSERT_EQ(2, subnets->size()); // Let's get them for easy reference - Subnet6Ptr subnet1 = (*subnets)[0]; - Subnet6Ptr subnet2 = (*subnets)[1]; + Subnet6Ptr subnet1 = *subnets->begin(); + Subnet6Ptr subnet2 = *std::next(subnets->begin()); ASSERT_TRUE(subnet1); ASSERT_TRUE(subnet2); @@ -2804,7 +2804,7 @@ TEST_F(Dhcpv6SrvTest, userContext) { ASSERT_EQ(1, subnets->size()); // Let's get the subnet and check its context. - Subnet6Ptr subnet1 = (*subnets)[0]; + Subnet6Ptr subnet1 = (*subnets->begin()); ASSERT_TRUE(subnet1); ASSERT_TRUE(subnet1->getContext()); EXPECT_EQ("{ \"secure\": false }", subnet1->getContext()->str()); diff --git a/src/bin/dhcp6/tests/fqdn_unittest.cc b/src/bin/dhcp6/tests/fqdn_unittest.cc index 3263c7bfe5..f7b675dfdf 100644 --- a/src/bin/dhcp6/tests/fqdn_unittest.cc +++ b/src/bin/dhcp6/tests/fqdn_unittest.cc @@ -641,7 +641,12 @@ public: ASSERT_TRUE(subnets); const Subnet6Collection* subnet_col = subnets->getAll(); ASSERT_EQ(subnet_idx + 1, subnet_col->size()); - subnet_ = subnet_col->at(subnet_idx); + auto subnet_it = subnet_col->begin(); + // std::advance is not available for this iterator. + for (int i = 0; i < subnet_idx; ++i) { + subnet_it = std::next(subnet_it); + } + subnet_ = *subnet_it; ASSERT_TRUE(subnet_); const PoolCollection& pool_col = subnet_->getPools(type); diff --git a/src/bin/dhcp6/tests/get_config_unittest.cc b/src/bin/dhcp6/tests/get_config_unittest.cc index f61123ad19..bc13a2953c 100644 --- a/src/bin/dhcp6/tests/get_config_unittest.cc +++ b/src/bin/dhcp6/tests/get_config_unittest.cc @@ -2434,13 +2434,13 @@ const char* UNPARSED_CONFIGS[] = { " \"subnet6\": [\n" " {\n" " \"calculate-tee-times\": true,\n" -" \"id\": 1024,\n" +" \"id\": 1,\n" " \"option-data\": [ ],\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" " \"option-data\": [ ],\n" -" \"pool\": \"2001:db8:1::/80\"\n" +" \"pool\": \"2001:db8:3::/80\"\n" " }\n" " ],\n" " \"preferred-lifetime\": 3000,\n" @@ -2452,20 +2452,20 @@ const char* UNPARSED_CONFIGS[] = { " \"renew-timer\": 1000,\n" " \"reservations\": [ ],\n" " \"store-extended-info\": false,\n" -" \"subnet\": \"2001:db8:1::/64\",\n" +" \"subnet\": \"2001:db8:3::/64\",\n" " \"t1-percent\": 0.5,\n" " \"t2-percent\": 0.8,\n" " \"valid-lifetime\": 4000\n" " },\n" " {\n" " \"calculate-tee-times\": true,\n" -" \"id\": 100,\n" +" \"id\": 34,\n" " \"option-data\": [ ],\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" " \"option-data\": [ ],\n" -" \"pool\": \"2001:db8:2::/80\"\n" +" \"pool\": \"2001:db8:4::/80\"\n" " }\n" " ],\n" " \"preferred-lifetime\": 3000,\n" @@ -2477,20 +2477,20 @@ const char* UNPARSED_CONFIGS[] = { " \"renew-timer\": 1000,\n" " \"reservations\": [ ],\n" " \"store-extended-info\": false,\n" -" \"subnet\": \"2001:db8:2::/64\",\n" +" \"subnet\": \"2001:db8:4::/64\",\n" " \"t1-percent\": 0.5,\n" " \"t2-percent\": 0.8,\n" " \"valid-lifetime\": 4000\n" " },\n" " {\n" " \"calculate-tee-times\": true,\n" -" \"id\": 1,\n" +" \"id\": 100,\n" " \"option-data\": [ ],\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" " \"option-data\": [ ],\n" -" \"pool\": \"2001:db8:3::/80\"\n" +" \"pool\": \"2001:db8:2::/80\"\n" " }\n" " ],\n" " \"preferred-lifetime\": 3000,\n" @@ -2502,20 +2502,20 @@ const char* UNPARSED_CONFIGS[] = { " \"renew-timer\": 1000,\n" " \"reservations\": [ ],\n" " \"store-extended-info\": false,\n" -" \"subnet\": \"2001:db8:3::/64\",\n" +" \"subnet\": \"2001:db8:2::/64\",\n" " \"t1-percent\": 0.5,\n" " \"t2-percent\": 0.8,\n" " \"valid-lifetime\": 4000\n" " },\n" " {\n" " \"calculate-tee-times\": true,\n" -" \"id\": 34,\n" +" \"id\": 1024,\n" " \"option-data\": [ ],\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" " \"option-data\": [ ],\n" -" \"pool\": \"2001:db8:4::/80\"\n" +" \"pool\": \"2001:db8:1::/80\"\n" " }\n" " ],\n" " \"preferred-lifetime\": 3000,\n" @@ -2527,7 +2527,7 @@ const char* UNPARSED_CONFIGS[] = { " \"renew-timer\": 1000,\n" " \"reservations\": [ ],\n" " \"store-extended-info\": false,\n" -" \"subnet\": \"2001:db8:4::/64\",\n" +" \"subnet\": \"2001:db8:1::/64\",\n" " \"t1-percent\": 0.5,\n" " \"t2-percent\": 0.8,\n" " \"valid-lifetime\": 4000\n" diff --git a/src/bin/dhcp6/tests/hooks_unittest.cc b/src/bin/dhcp6/tests/hooks_unittest.cc index e472c3ff91..14730a7b01 100644 --- a/src/bin/dhcp6/tests/hooks_unittest.cc +++ b/src/bin/dhcp6/tests/hooks_unittest.cc @@ -535,7 +535,7 @@ public: // Let's change to a different subnet if (subnets->size() > 1) { - subnet = (*subnets)[1]; // Let's pick the other subnet + subnet = *std::next(subnets->begin()); // Let's pick the other subnet callout_handle.setArgument("subnet6", subnet); } @@ -1697,14 +1697,14 @@ TEST_F(HooksDhcpv6SrvTest, subnet6Select) { // The server is supposed to pick the first subnet, because of matching // interface. Check that the value is reported properly. ASSERT_TRUE(callback_subnet6_); - EXPECT_EQ(callback_subnet6_.get(), exp_subnets->front().get()); + EXPECT_EQ(callback_subnet6_.get(), exp_subnets->begin()->get()); // Server is supposed to report two subnets ASSERT_EQ(exp_subnets->size(), callback_subnet6collection_->size()); // Compare that the available subnets are reported as expected - EXPECT_TRUE((*exp_subnets)[0].get() == (*callback_subnet6collection_)[0].get()); - EXPECT_TRUE((*exp_subnets)[1].get() == (*callback_subnet6collection_)[1].get()); + EXPECT_TRUE((*exp_subnets->begin())->get() == (*callback_subnet6collection_->begin())->get()); + EXPECT_TRUE((*std::next(exp_subnets->begin()))->get() == (*std::next(callback_subnet6collection_->begin()))->get()); // Pkt passed to a callout must be configured to copy retrieved options. EXPECT_TRUE(callback_qry_options_copy_); @@ -1788,8 +1788,10 @@ TEST_F(HooksDhcpv6SrvTest, subnet6SselectChange) { // Advertised address must belong to the second pool (in subnet's range, // in dynamic pool) - EXPECT_TRUE((*subnets)[1]->inRange(addr_opt->getAddress())); - EXPECT_TRUE((*subnets)[1]->inPool(Lease::TYPE_NA, addr_opt->getAddress())); + auto subnet = subnets->begin(); + ++subnet; + EXPECT_TRUE((*subnet)->inRange(addr_opt->getAddress())); + EXPECT_TRUE((*subnet)->inPool(Lease::TYPE_NA, addr_opt->getAddress())); // Check if the callout handle state was reset after the callout. checkCalloutHandleReset(sol); diff --git a/src/bin/dhcp6/tests/kea_controller_unittest.cc b/src/bin/dhcp6/tests/kea_controller_unittest.cc index 4290f74da3..720cf9d659 100644 --- a/src/bin/dhcp6/tests/kea_controller_unittest.cc +++ b/src/bin/dhcp6/tests/kea_controller_unittest.cc @@ -418,33 +418,39 @@ TEST_F(JSONFileBackendTest, jsonFile) { // Check subnet 1. - EXPECT_EQ("2001:db8:1::", subnets->at(0)->get().first.toText()); - EXPECT_EQ(64, subnets->at(0)->get().second); + auto subnet = subnets->begin(); + ASSERT_TRUE(subnet != subnets->end()); + EXPECT_EQ("2001:db8:1::", (*subnet)->get().first.toText()); + EXPECT_EQ(64, (*subnet)->get().second); // Check pools in the first subnet. - const PoolCollection& pools1 = subnets->at(0)->getPools(Lease::TYPE_NA); + const PoolCollection& pools1 = (*subnet)->getPools(Lease::TYPE_NA); ASSERT_EQ(1, pools1.size()); EXPECT_EQ("2001:db8:1::", pools1.at(0)->getFirstAddress().toText()); EXPECT_EQ("2001:db8:1::ffff:ffff:ffff", pools1.at(0)->getLastAddress().toText()); EXPECT_EQ(Lease::TYPE_NA, pools1.at(0)->getType()); // Check subnet 2. - EXPECT_EQ("2001:db8:2::", subnets->at(1)->get().first.toText()); - EXPECT_EQ(64, subnets->at(1)->get().second); + ++subnet; + ASSERT_TRUE(subnet != subnets->end()); + EXPECT_EQ("2001:db8:2::", (*subnet)->get().first.toText()); + EXPECT_EQ(64, (*subnet)->get().second); // Check pools in the second subnet. - const PoolCollection& pools2 = subnets->at(1)->getPools(Lease::TYPE_NA); + const PoolCollection& pools2 = (*subnet)->getPools(Lease::TYPE_NA); ASSERT_EQ(1, pools2.size()); EXPECT_EQ("2001:db8:2::", pools2.at(0)->getFirstAddress().toText()); EXPECT_EQ("2001:db8:2::ffff:ffff:ffff", pools2.at(0)->getLastAddress().toText()); EXPECT_EQ(Lease::TYPE_NA, pools2.at(0)->getType()); // And finally check subnet 3. - EXPECT_EQ("2001:db8:3::", subnets->at(2)->get().first.toText()); - EXPECT_EQ(64, subnets->at(2)->get().second); + ++subnet; + ASSERT_TRUE(subnet != subnets->end()); + EXPECT_EQ("2001:db8:3::", (*subnet)->get().first.toText()); + EXPECT_EQ(64, (*subnet)->get().second); // ... and it's only pool. - const PoolCollection& pools3 = subnets->at(2)->getPools(Lease::TYPE_NA); + const PoolCollection& pools3 = (*subnet)->getPools(Lease::TYPE_NA); EXPECT_EQ("2001:db8:3::", pools3.at(0)->getFirstAddress().toText()); EXPECT_EQ("2001:db8:3::ffff:ffff:ffff", pools3.at(0)->getLastAddress().toText()); EXPECT_EQ(Lease::TYPE_NA, pools3.at(0)->getType()); @@ -489,11 +495,13 @@ TEST_F(JSONFileBackendTest, hashComments) { ASSERT_EQ(1, subnets->size()); // Check subnet 1. - EXPECT_EQ("2001:db8:1::", subnets->at(0)->get().first.toText()); - EXPECT_EQ(64, subnets->at(0)->get().second); + auto subnet = subnets->begin(); + ASSERT_TRUE(subnet != subnets->end()); + EXPECT_EQ("2001:db8:1::", (*subnet)->get().first.toText()); + EXPECT_EQ(64, (*subnet)->get().second); // Check pools in the first subnet. - const PoolCollection& pools1 = subnets->at(0)->getPools(Lease::TYPE_NA); + const PoolCollection& pools1 = (*subnet)->getPools(Lease::TYPE_NA); ASSERT_EQ(1, pools1.size()); EXPECT_EQ("2001:db8:1::", pools1.at(0)->getFirstAddress().toText()); EXPECT_EQ("2001:db8:1::ffff:ffff:ffff", pools1.at(0)->getLastAddress().toText()); @@ -539,11 +547,13 @@ TEST_F(JSONFileBackendTest, cppLineComments) { ASSERT_EQ(1, subnets->size()); // Check subnet 1. - EXPECT_EQ("2001:db8:1::", subnets->at(0)->get().first.toText()); - EXPECT_EQ(64, subnets->at(0)->get().second); + auto subnet = subnets->begin(); + ASSERT_TRUE(subnet != subnets->end()); + EXPECT_EQ("2001:db8:1::", (*subnet)->get().first.toText()); + EXPECT_EQ(64, (*subnet)->get().second); // Check pools in the first subnet. - const PoolCollection& pools1 = subnets->at(0)->getPools(Lease::TYPE_NA); + const PoolCollection& pools1 = (*subnet)->getPools(Lease::TYPE_NA); ASSERT_EQ(1, pools1.size()); EXPECT_EQ("2001:db8:1::", pools1.at(0)->getFirstAddress().toText()); EXPECT_EQ("2001:db8:1::ffff:ffff:ffff", pools1.at(0)->getLastAddress().toText()); @@ -589,11 +599,13 @@ TEST_F(JSONFileBackendTest, cBlockComments) { ASSERT_EQ(1, subnets->size()); // Check subnet 1. - EXPECT_EQ("2001:db8:1::", subnets->at(0)->get().first.toText()); - EXPECT_EQ(64, subnets->at(0)->get().second); + auto subnet = subnets->begin(); + ASSERT_TRUE(subnet != subnets->end()); + EXPECT_EQ("2001:db8:1::", (*subnet)->get().first.toText()); + EXPECT_EQ(64, (*subnet)->get().second); // Check pools in the first subnet. - const PoolCollection& pools1 = subnets->at(0)->getPools(Lease::TYPE_NA); + const PoolCollection& pools1 = (*subnet)->getPools(Lease::TYPE_NA); ASSERT_EQ(1, pools1.size()); EXPECT_EQ("2001:db8:1::", pools1.at(0)->getFirstAddress().toText()); EXPECT_EQ("2001:db8:1::ffff:ffff:ffff", pools1.at(0)->getLastAddress().toText()); @@ -639,11 +651,13 @@ TEST_F(JSONFileBackendTest, include) { ASSERT_EQ(1, subnets->size()); // Check subnet 1. - EXPECT_EQ("2001:db8:1::", subnets->at(0)->get().first.toText()); - EXPECT_EQ(64, subnets->at(0)->get().second); + auto subnet = subnets->begin(); + ASSERT_TRUE(subnet != subnets->end()); + EXPECT_EQ("2001:db8:1::", (*subnet)->get().first.toText()); + EXPECT_EQ(64, (*subnet)->get().second); // Check pools in the first subnet. - const PoolCollection& pools1 = subnets->at(0)->getPools(Lease::TYPE_NA); + const PoolCollection& pools1 = (*subnet)->getPools(Lease::TYPE_NA); ASSERT_EQ(1, pools1.size()); EXPECT_EQ("2001:db8:1::", pools1.at(0)->getFirstAddress().toText()); EXPECT_EQ("2001:db8:1::ffff:ffff:ffff", pools1.at(0)->getLastAddress().toText()); diff --git a/src/bin/dhcp6/tests/sarr_unittest.cc b/src/bin/dhcp6/tests/sarr_unittest.cc index 98be42566c..445c79a0cd 100644 --- a/src/bin/dhcp6/tests/sarr_unittest.cc +++ b/src/bin/dhcp6/tests/sarr_unittest.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2019 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2014-2020 Internet Systems Consortium, Inc. ("ISC") // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -263,7 +263,8 @@ TEST_F(SARRTest, directClientPrefixHint) { EXPECT_NE("2001:db8:3:33::", lease_client.addr_.toText()); EXPECT_NE("2001:db8:3:33::34", lease_client.addr_.toText()); // Check that the assigned prefix belongs to the pool. - (*subnets)[0]->inPool(Lease::TYPE_PD, lease_client.addr_); + ASSERT_TRUE(!subnets->empty()); + (*subnets->begin())->inPool(Lease::TYPE_PD, lease_client.addr_); EXPECT_EQ(64, lease_client.prefixlen_); EXPECT_EQ(3000, lease_client.preferred_lft_); EXPECT_EQ(4000, lease_client.valid_lft_); diff --git a/src/hooks/dhcp/mysql_cb/mysql_cb_dhcp4.cc b/src/hooks/dhcp/mysql_cb/mysql_cb_dhcp4.cc index ac3f24abd7..fc7cebc4a4 100644 --- a/src/hooks/dhcp/mysql_cb/mysql_cb_dhcp4.cc +++ b/src/hooks/dhcp/mysql_cb/mysql_cb_dhcp4.cc @@ -530,7 +530,7 @@ public: // server_tag at 64 // Subnet ready. Add it to the list. - auto ret = subnets.push_back(last_subnet); + auto ret = subnets.insert(last_subnet); // subnets is a multi index container with unique indexes // but these indexes are unique too in the database, @@ -618,7 +618,7 @@ public: // check if it has matching server tags and toss it if it // doesn't. We skip matching the server tags if we're asking // for ANY subnet. - auto& subnet_index = subnets.get(); + auto& subnet_index = subnets.get(); tossNonMatchingElements(server_selector, subnet_index); } diff --git a/src/hooks/dhcp/mysql_cb/mysql_cb_dhcp6.cc b/src/hooks/dhcp/mysql_cb/mysql_cb_dhcp6.cc index db5f56d89f..8cae812c6c 100644 --- a/src/hooks/dhcp/mysql_cb/mysql_cb_dhcp6.cc +++ b/src/hooks/dhcp/mysql_cb/mysql_cb_dhcp6.cc @@ -568,7 +568,7 @@ public: // server_tag (87 / last) // Subnet ready. Add it to the list. - auto ret = subnets.push_back(last_subnet); + auto ret = subnets.insert(last_subnet); // subnets is a multi index container with unique indexes // but these indexes are unique too in the database, @@ -724,7 +724,7 @@ public: // check if it has matching server tags and toss it if it // doesn't. We skip matching the server tags if we're asking // for ANY subnet. - auto& subnet_index = subnets.get(); + auto& subnet_index = subnets.get(); tossNonMatchingElements(server_selector, subnet_index); } diff --git a/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp4_unittest.cc b/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp4_unittest.cc index aa0705ae0d..84704ffe66 100644 --- a/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp4_unittest.cc +++ b/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp4_unittest.cc @@ -1479,11 +1479,12 @@ TEST_F(MySqlConfigBackendDHCPv4Test, getAllSubnets4) { ASSERT_EQ(test_subnets_.size() - 1, subnets.size()); // See if the subnets are returned ok. - for (auto i = 0; i < subnets.size(); ++i) { - ASSERT_EQ(1, subnets[i]->getServerTags().size()); - EXPECT_EQ("all", subnets[i]->getServerTags().begin()->get()); + auto subnet_it = subnets.begin(); + for (auto i = 0; i < subnets.size(); ++i, ++subnet_it) { + ASSERT_EQ(1, (*subnet_it)->getServerTags().size()); + EXPECT_EQ("all", (*subnet_it)->getServerTags().begin()->get()); EXPECT_EQ(test_subnets_[i + 1]->toElement()->str(), - subnets[i]->toElement()->str()); + (*subnet_it)->toElement()->str()); } // Attempt to remove the non existing subnet should return 0. @@ -1998,7 +1999,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, getSharedNetworkSubnets4) { // Returned subnet should match test subnet #1. EXPECT_TRUE(isEquivalent(test_subnets_[1]->toElement(), - subnets[0]->toElement())); + (*subnets.begin())->toElement())); // All subnets should also be returned for ANY server. subnets = cbptr_->getSharedNetworkSubnets4(ServerSelector::ANY(), "level1"); @@ -2006,11 +2007,11 @@ TEST_F(MySqlConfigBackendDHCPv4Test, getSharedNetworkSubnets4) { // Returned subnet should match test subnet #1. EXPECT_TRUE(isEquivalent(test_subnets_[1]->toElement(), - subnets[0]->toElement())); + (*subnets.begin())->toElement())); // Check server tag - ASSERT_EQ(1, subnets[0]->getServerTags().size()); - EXPECT_EQ("all", subnets[0]->getServerTags().begin()->get()); + ASSERT_EQ(1, (*subnets.begin())->getServerTags().size()); + EXPECT_EQ("all", (*subnets.begin())->getServerTags().begin()->get()); // Fetch all subnets belonging to shared network level2. subnets = cbptr_->getSharedNetworkSubnets4(ServerSelector::ALL(), "level2"); @@ -2021,8 +2022,9 @@ TEST_F(MySqlConfigBackendDHCPv4Test, getSharedNetworkSubnets4) { test_list->add(test_subnets_[3]->toElement()); ElementPtr returned_list = Element::createList(); - returned_list->add(subnets[0]->toElement()); - returned_list->add(subnets[1]->toElement()); + auto subnet = subnets.begin(); + returned_list->add((*subnet)->toElement()); + returned_list->add((*++subnet)->toElement()); EXPECT_TRUE(isEquivalent(returned_list, test_list)); @@ -2031,8 +2033,9 @@ TEST_F(MySqlConfigBackendDHCPv4Test, getSharedNetworkSubnets4) { ASSERT_EQ(2, subnets.size()); returned_list = Element::createList(); - returned_list->add(subnets[0]->toElement()); - returned_list->add(subnets[1]->toElement()); + subnet = subnets.begin(); + returned_list->add((*subnet)->toElement()); + returned_list->add((*++subnet)->toElement()); EXPECT_TRUE(isEquivalent(returned_list, test_list)); } diff --git a/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp6_unittest.cc b/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp6_unittest.cc index a6c05460d2..a3ffc69e0d 100644 --- a/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp6_unittest.cc +++ b/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp6_unittest.cc @@ -1508,11 +1508,12 @@ TEST_F(MySqlConfigBackendDHCPv6Test, getAllSubnets6) { ASSERT_EQ(test_subnets_.size() - 1, subnets.size()); // See if the subnets are returned ok. - for (auto i = 0; i < subnets.size(); ++i) { + auto subnet_it = subnets.begin(); + for (auto i = 0; i < subnets.size(); ++i, ++subnet_it) { EXPECT_EQ(test_subnets_[i + 1]->toElement()->str(), - subnets[i]->toElement()->str()); - ASSERT_EQ(1, subnets[i]->getServerTags().size()); - EXPECT_EQ("all", subnets[i]->getServerTags().begin()->get()); + (*subnet_it)->toElement()->str()); + ASSERT_EQ(1, (*subnet_it)->getServerTags().size()); + EXPECT_EQ("all", (*subnet_it)->getServerTags().begin()->get()); } // Attempt to remove the non existing subnet should return 0. @@ -2028,7 +2029,7 @@ TEST_F(MySqlConfigBackendDHCPv6Test, getSharedNetworkSubnets6) { // Returned subnet should match test subnet #1. EXPECT_TRUE(isEquivalent(test_subnets_[1]->toElement(), - subnets[0]->toElement())); + (*subnets.begin())->toElement())); // All subnets should also be returned for ANY server. subnets = cbptr_->getSharedNetworkSubnets6(ServerSelector::ANY(), "level1"); @@ -2036,7 +2037,7 @@ TEST_F(MySqlConfigBackendDHCPv6Test, getSharedNetworkSubnets6) { // Returned subnet should match test subnet #1. EXPECT_TRUE(isEquivalent(test_subnets_[1]->toElement(), - subnets[0]->toElement())); + (*subnets.begin())->toElement())); // Fetch all subnets belonging to shared network level2. subnets = cbptr_->getSharedNetworkSubnets6(ServerSelector::ALL(), "level2"); @@ -2047,8 +2048,9 @@ TEST_F(MySqlConfigBackendDHCPv6Test, getSharedNetworkSubnets6) { test_list->add(test_subnets_[3]->toElement()); ElementPtr returned_list = Element::createList(); - returned_list->add(subnets[0]->toElement()); - returned_list->add(subnets[1]->toElement()); + auto subnet = subnets.begin(); + returned_list->add((*subnet)->toElement()); + returned_list->add((*++subnet)->toElement()); EXPECT_TRUE(isEquivalent(returned_list, test_list)); @@ -2057,8 +2059,9 @@ TEST_F(MySqlConfigBackendDHCPv6Test, getSharedNetworkSubnets6) { ASSERT_EQ(2, subnets.size()); returned_list = Element::createList(); - returned_list->add(subnets[0]->toElement()); - returned_list->add(subnets[1]->toElement()); + subnet = subnets.begin(); + returned_list->add((*subnet)->toElement()); + returned_list->add((*++subnet)->toElement()); EXPECT_TRUE(isEquivalent(returned_list, test_list)); } diff --git a/src/hooks/dhcp/user_chk/subnet_select_co.cc b/src/hooks/dhcp/user_chk/subnet_select_co.cc index 433f4b3671..6559ddb0ab 100644 --- a/src/hooks/dhcp/user_chk/subnet_select_co.cc +++ b/src/hooks/dhcp/user_chk/subnet_select_co.cc @@ -73,7 +73,7 @@ int subnet4_select(CalloutHandle& handle) { // User is not in the registry, so assign them to the last subnet // in the collection. By convention we are assuming this is the // restricted subnet. - Subnet4Ptr subnet = subnets->back(); + Subnet4Ptr subnet = *subnets->rbegin(); handle.setArgument("subnet4", subnet); } } catch (const std::exception& ex) { @@ -133,7 +133,7 @@ int subnet6_select(CalloutHandle& handle) { // User is not in the registry, so assign them to the last subnet // in the collection. By convention we are assuming this is the // restricted subnet. - Subnet6Ptr subnet = subnets->back(); + Subnet6Ptr subnet = *subnets->rbegin(); handle.setArgument("subnet6", subnet); } } catch (const std::exception& ex) { diff --git a/src/lib/dhcpsrv/cfg_subnets4.cc b/src/lib/dhcpsrv/cfg_subnets4.cc index d2d26e2853..eda3bd2240 100644 --- a/src/lib/dhcpsrv/cfg_subnets4.cc +++ b/src/lib/dhcpsrv/cfg_subnets4.cc @@ -38,7 +38,7 @@ CfgSubnets4::add(const Subnet4Ptr& subnet) { LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE, DHCPSRV_CFGMGR_ADD_SUBNET4) .arg(subnet->toText()); - static_cast(subnets_.push_back(subnet)); + static_cast(subnets_.insert(subnet)); } Subnet4Ptr @@ -159,7 +159,7 @@ CfgSubnets4::merge(CfgOptionDefPtr cfg_def, CfgSharedNetworks4Ptr networks, } // Add the "other" subnet to the our collection of subnets. - static_cast(subnets_.push_back(*other_subnet)); + static_cast(subnets_.insert(*other_subnet)); // If it belongs to a shared network, find the network and // add the subnet to it diff --git a/src/lib/dhcpsrv/cfg_subnets6.cc b/src/lib/dhcpsrv/cfg_subnets6.cc index 91769cc654..0474269525 100644 --- a/src/lib/dhcpsrv/cfg_subnets6.cc +++ b/src/lib/dhcpsrv/cfg_subnets6.cc @@ -38,7 +38,7 @@ CfgSubnets6::add(const Subnet6Ptr& subnet) { LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE, DHCPSRV_CFGMGR_ADD_SUBNET6) .arg(subnet->toText()); - static_cast(subnets_.push_back(subnet)); + static_cast(subnets_.insert(subnet)); } Subnet6Ptr @@ -161,7 +161,7 @@ CfgSubnets6::merge(CfgOptionDefPtr cfg_def, CfgSharedNetworks6Ptr networks, } // Add the "other" subnet to the our collection of subnets. - static_cast(subnets_.push_back(*other_subnet)); + static_cast(subnets_.insert(*other_subnet)); // If it belongs to a shared network, find the network and // add the subnet to it diff --git a/src/lib/dhcpsrv/parsers/dhcp_parsers.cc b/src/lib/dhcpsrv/parsers/dhcp_parsers.cc index 923cedb107..bae6d42309 100644 --- a/src/lib/dhcpsrv/parsers/dhcp_parsers.cc +++ b/src/lib/dhcpsrv/parsers/dhcp_parsers.cc @@ -971,7 +971,7 @@ Subnets4ListConfigParser::parse(Subnet4Collection& subnets, Subnet4Ptr subnet = parser.parse(subnet_json); if (subnet) { try { - auto ret = subnets.push_back(subnet); + auto ret = subnets.insert(subnet); if (!ret.second) { isc_throw(Unexpected, "can't store subnet because of conflict"); @@ -1366,7 +1366,7 @@ Subnets6ListConfigParser::parse(Subnet6Collection& subnets, Subnet6Ptr subnet = parser.parse(subnet_json); if (subnet) { try { - auto ret = subnets.push_back(subnet); + auto ret = subnets.insert(subnet); if (!ret.second) { isc_throw(Unexpected, "can't store subnet because of conflict"); diff --git a/src/lib/dhcpsrv/shared_network.cc b/src/lib/dhcpsrv/shared_network.cc index a9b628da6d..cc495b4154 100644 --- a/src/lib/dhcpsrv/shared_network.cc +++ b/src/lib/dhcpsrv/shared_network.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2017-2019 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2017-2020 Internet Systems Consortium, Inc. ("ISC") // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -69,7 +69,7 @@ public: } // Add a subnet to the collection of subnets for this shared network. - static_cast(subnets.push_back(subnet)); + static_cast(subnets.insert(subnet)); } /// @brief Replaces IPv4 subnet in a shared network. @@ -246,17 +246,13 @@ public: // subnet must exist in this container, thus we throw if the iterator // is not found. const auto& index = subnets.template get(); - auto subnet_id_it = index.find(current_subnet); - if (subnet_id_it == index.cend()) { + auto subnet_it = index.find(current_subnet); + if (subnet_it == index.cend()) { isc_throw(BadValue, "no such subnet " << current_subnet << " within shared network"); } - // We need to transform this iterator (by subnet id) to a random access - // index iterator. Multi index container has a nice way of doing it. - auto subnet_it = subnets.template project(subnet_id_it); - - // Step to a next subnet within random access index. + // Step to a next subnet. if (++subnet_it == subnets.cend()) { // If we reached the end of the container, start over from the // beginning. diff --git a/src/lib/dhcpsrv/subnet.h b/src/lib/dhcpsrv/subnet.h index e2ac1b3648..c164e9b620 100644 --- a/src/lib/dhcpsrv/subnet.h +++ b/src/lib/dhcpsrv/subnet.h @@ -801,9 +801,6 @@ private: /// //@{ -/// @brief Tag for the random access index. -struct SubnetRandomAccessIndexTag { }; - /// @brief Tag for the index for searching by subnet identifier. struct SubnetSubnetIdIndexTag { }; @@ -844,30 +841,25 @@ typedef boost::multi_index_container< Subnet4Ptr, // The following holds all indexes. boost::multi_index::indexed_by< - // First is the random access index allowing for accessing - // objects just like we'd do with a vector. - boost::multi_index::random_access< - boost::multi_index::tag - >, - // Second index allows for searching using subnet identifier. + // First index allows for searching using subnet identifier. boost::multi_index::ordered_unique< boost::multi_index::tag, boost::multi_index::const_mem_fun >, - // Third index allows for searching using an output from toText function. + // Second index allows for searching using an output from toText function. boost::multi_index::ordered_unique< boost::multi_index::tag, boost::multi_index::const_mem_fun >, - // Fourth index allows for searching using an output from getServerId. + // Third index allows for searching using an output from getServerId. boost::multi_index::ordered_non_unique< boost::multi_index::tag, boost::multi_index::const_mem_fun >, - // Fifth index allows for searching using subnet modification time. + // Forth index allows for searching using subnet modification time. boost::multi_index::ordered_non_unique< boost::multi_index::tag, boost::multi_index::const_mem_fun - >, - // Second index allows for searching using subnet identifier. + // First index allows for searching using subnet identifier. boost::multi_index::ordered_unique< boost::multi_index::tag, boost::multi_index::const_mem_fun >, - // Third index allows for searching using an output from toText function. + // Second index allows for searching using an output from toText function. boost::multi_index::ordered_unique< boost::multi_index::tag, boost::multi_index::const_mem_fun >, - // Fourth index allows for searching using subnet modification time. + // Third index allows for searching using subnet modification time. boost::multi_index::ordered_non_unique< boost::multi_index::tag, boost::multi_index::const_mem_funsize()); - Subnet4Ptr returned = cfg.getAll()->at(1); + Subnet4Ptr returned = cfg.getSubnet(SubnetID(2)); ASSERT_TRUE(returned); EXPECT_TRUE(returned == subnet); @@ -189,7 +189,7 @@ TEST(CfgSubnets4Test, replaceSubnet) { ASSERT_TRUE(replaced); EXPECT_TRUE(replaced == subnet); ASSERT_EQ(3, cfg.getAll()->size()); - returned = cfg.getAll()->at(1); + returned = cfg.getSubnet(SubnetID(2)); ASSERT_TRUE(returned); EXPECT_TRUE(returned == subnet2); @@ -198,7 +198,7 @@ TEST(CfgSubnets4Test, replaceSubnet) { 26, 10, 20, 1000, SubnetID(2))); replaced = cfg.replace(subnet); EXPECT_FALSE(replaced); - returned = cfg.getAll()->at(1); + returned = cfg.getSubnet(SubnetID(2)); ASSERT_TRUE(returned); EXPECT_TRUE(returned == subnet2); @@ -208,7 +208,7 @@ TEST(CfgSubnets4Test, replaceSubnet) { replaced = cfg.replace(subnet); ASSERT_TRUE(replaced); EXPECT_TRUE(replaced == subnet2); - returned = cfg.getAll()->at(1); + returned = cfg.getSubnet(SubnetID(2)); ASSERT_TRUE(returned); EXPECT_TRUE(returned == subnet); } diff --git a/src/lib/dhcpsrv/tests/cfg_subnets6_unittest.cc b/src/lib/dhcpsrv/tests/cfg_subnets6_unittest.cc index bc2979a598..d2b50cf24a 100644 --- a/src/lib/dhcpsrv/tests/cfg_subnets6_unittest.cc +++ b/src/lib/dhcpsrv/tests/cfg_subnets6_unittest.cc @@ -183,7 +183,7 @@ TEST(CfgSubnets6Test, replaceSubnet) { ASSERT_TRUE(replaced); EXPECT_TRUE(replaced == subnet2); ASSERT_EQ(3, cfg.getAll()->size()); - Subnet6Ptr returned = cfg.getAll()->at(1); + Subnet6Ptr returned = cfg.getSubnet(SubnetID(2)); ASSERT_TRUE(returned); EXPECT_TRUE(returned == subnet); @@ -192,7 +192,7 @@ TEST(CfgSubnets6Test, replaceSubnet) { ASSERT_TRUE(replaced); EXPECT_TRUE(replaced == subnet); ASSERT_EQ(3, cfg.getAll()->size()); - returned = cfg.getAll()->at(1); + returned = cfg.getSubnet(SubnetID(2)); ASSERT_TRUE(returned); EXPECT_TRUE(returned == subnet2); @@ -201,7 +201,7 @@ TEST(CfgSubnets6Test, replaceSubnet) { 48, 10, 20, 30, 1000, SubnetID(2))); replaced = cfg.replace(subnet); EXPECT_FALSE(replaced); - returned = cfg.getAll()->at(1); + returned = cfg.getSubnet(SubnetID(2)); ASSERT_TRUE(returned); EXPECT_TRUE(returned == subnet2); @@ -211,7 +211,7 @@ TEST(CfgSubnets6Test, replaceSubnet) { replaced = cfg.replace(subnet); ASSERT_TRUE(replaced); EXPECT_TRUE(replaced == subnet2); - returned = cfg.getAll()->at(1); + returned = cfg.getSubnet(SubnetID(2)); ASSERT_TRUE(returned); EXPECT_TRUE(returned == subnet); } diff --git a/src/lib/dhcpsrv/tests/shared_network_unittest.cc b/src/lib/dhcpsrv/tests/shared_network_unittest.cc index ee83c601de..0464209d6d 100644 --- a/src/lib/dhcpsrv/tests/shared_network_unittest.cc +++ b/src/lib/dhcpsrv/tests/shared_network_unittest.cc @@ -128,7 +128,8 @@ TEST(SharedNetwork4Test, addSubnet4) { // Retrieve the subnet from the network and make sure it is returned // as expected. - Subnet4Ptr returned_subnet = network->getAllSubnets()->front(); + ASSERT_FALSE(network->getAllSubnets()->empty()); + Subnet4Ptr returned_subnet = *network->getAllSubnets()->begin(); ASSERT_TRUE(returned_subnet); EXPECT_EQ(subnet->getID(), returned_subnet->getID()); SharedNetwork4Ptr network1; @@ -184,16 +185,23 @@ TEST(SharedNetwork4Test, replaceSubnet4) { // Subnets did not changed. ASSERT_EQ(3, network->getAllSubnets()->size()); - Subnet4Ptr returned_subnet = network->getAllSubnets()->at(0); + auto returned_it = network->getAllSubnets()->begin(); + Subnet4Ptr returned_subnet = *returned_it; ASSERT_TRUE(returned_subnet); - EXPECT_EQ(15, returned_subnet->getID()); - returned_subnet = network->getAllSubnets()->at(2); + EXPECT_EQ(1, returned_subnet->getID()); + ++returned_it; + returned_subnet = *returned_it; ASSERT_TRUE(returned_subnet); EXPECT_EQ(10, returned_subnet->getID()); - // Finish by the second subnet. - returned_subnet = network->getAllSubnets()->at(1); + ++returned_it; + returned_subnet = *returned_it; ASSERT_TRUE(returned_subnet); - EXPECT_EQ(1, returned_subnet->getID()); + EXPECT_EQ(15, returned_subnet->getID()); + + // Reset the returned subnet to the subnet with subnet id 1. + returned_subnet = *network->getAllSubnets()->begin(); + ASSERT_TRUE(returned_subnet); + ASSERT_EQ(1, returned_subnet->getID()); // Create another subnet with the same ID than the second subnet. subnet.reset(new Subnet4(IOAddress("192.168.0.0"), 24, 100, 200, 300, @@ -209,7 +217,7 @@ TEST(SharedNetwork4Test, replaceSubnet4) { EXPECT_FALSE(network1); ASSERT_EQ(3, network->getAllSubnets()->size()); - returned_subnet = network->getAllSubnets()->at(1); + returned_subnet = *network->getAllSubnets()->begin(); ASSERT_TRUE(returned_subnet); ASSERT_EQ(1, returned_subnet->getID()); EXPECT_EQ(100, returned_subnet->getT1()); @@ -220,12 +228,13 @@ TEST(SharedNetwork4Test, replaceSubnet4) { EXPECT_TRUE(network == network1); // Other subnets did not changed. - returned_subnet = network->getAllSubnets()->at(0); - ASSERT_TRUE(returned_subnet); - EXPECT_EQ(15, returned_subnet->getID()); - returned_subnet = network->getAllSubnets()->at(2); + returned_it = network->getAllSubnets()->begin(); + returned_subnet = *++returned_it; ASSERT_TRUE(returned_subnet); EXPECT_EQ(10, returned_subnet->getID()); + returned_subnet = *++returned_it; + ASSERT_TRUE(returned_subnet); + EXPECT_EQ(15, returned_subnet->getID()); // Create another network and try to replace a subnet to it. It should fail // because the subnet is already associated with the first network. @@ -237,7 +246,7 @@ TEST(SharedNetwork4Test, replaceSubnet4) { SubnetID(1))); EXPECT_TRUE(network->replace(subnet)); ASSERT_EQ(3, network->getAllSubnets()->size()); - returned_subnet = network->getAllSubnets()->at(1); + returned_subnet = *network->getAllSubnets()->begin(); ASSERT_TRUE(returned_subnet); ASSERT_EQ(1, returned_subnet->getID()); EXPECT_EQ("192.168.10.0/24", returned_subnet->toText()); @@ -247,7 +256,7 @@ TEST(SharedNetwork4Test, replaceSubnet4) { SubnetID(1))); EXPECT_FALSE(network->replace(subnet)); ASSERT_EQ(3, network->getAllSubnets()->size()); - returned_subnet = network->getAllSubnets()->at(1); + returned_subnet = *network->getAllSubnets()->begin(); ASSERT_TRUE(returned_subnet); ASSERT_EQ(1, returned_subnet->getID()); EXPECT_EQ("192.168.10.0/24", returned_subnet->toText()); @@ -276,8 +285,7 @@ TEST(SharedNetwork4Test, delSubnet4) { ASSERT_NO_THROW(network->del(subnet1->getID())); // We should be left with only one subnet. ASSERT_EQ(1, network->getAllSubnets()->size()); - Subnet4Ptr subnet_returned = network->getAllSubnets()->front(); - ASSERT_TRUE(subnet_returned); + Subnet4Ptr subnet_returned = *network->getAllSubnets()->begin(); EXPECT_EQ(subnet2->getID(), subnet_returned->getID()); // Check that shared network has been cleared for the removed subnet. @@ -848,7 +856,7 @@ TEST(SharedNetwork6Test, addSubnet6) { // Retrieve the subnet from the network and make sure it is returned // as expected. - Subnet6Ptr returned_subnet = network->getAllSubnets()->front(); + Subnet6Ptr returned_subnet = *network->getAllSubnets()->begin(); ASSERT_TRUE(returned_subnet); EXPECT_EQ(subnet->getID(), returned_subnet->getID()); SharedNetwork6Ptr network1; @@ -904,16 +912,23 @@ TEST(SharedNetwork6Test, replaceSubnet6) { // Subnets did not changed. ASSERT_EQ(3, network->getAllSubnets()->size()); - Subnet6Ptr returned_subnet = network->getAllSubnets()->at(0); + auto returned_it = network->getAllSubnets()->begin(); + Subnet6Ptr returned_subnet = *returned_it; ASSERT_TRUE(returned_subnet); - EXPECT_EQ(15, returned_subnet->getID()); - returned_subnet = network->getAllSubnets()->at(2); + EXPECT_EQ(1, returned_subnet->getID()); + ++returned_it; + returned_subnet = *returned_it; ASSERT_TRUE(returned_subnet); EXPECT_EQ(10, returned_subnet->getID()); - // Finish by the second subnet. - returned_subnet = network->getAllSubnets()->at(1); + ++returned_it; + returned_subnet = *returned_it; ASSERT_TRUE(returned_subnet); - EXPECT_EQ(1, returned_subnet->getID()); + EXPECT_EQ(15, returned_subnet->getID()); + + // Reset the returned subnet to the subnet with subnet id 1. + returned_subnet = *network->getAllSubnets()->begin(); + ASSERT_TRUE(returned_subnet); + ASSERT_EQ(1, returned_subnet->getID()); // Create another subnet with the same ID than the second subnet. subnet.reset(new Subnet6(IOAddress("2001:db8:2::"), 64, 100, 200, 300, 400, @@ -930,7 +945,7 @@ TEST(SharedNetwork6Test, replaceSubnet6) { EXPECT_FALSE(network1); ASSERT_EQ(3, network->getAllSubnets()->size()); - returned_subnet = network->getAllSubnets()->at(1); + returned_subnet = *network->getAllSubnets()->begin(); ASSERT_TRUE(returned_subnet); ASSERT_EQ(1, returned_subnet->getID()); EXPECT_EQ(100, returned_subnet->getT1()); @@ -942,12 +957,13 @@ TEST(SharedNetwork6Test, replaceSubnet6) { EXPECT_TRUE(network == network1); // Other subnets did not changed. - returned_subnet = network->getAllSubnets()->at(0); - ASSERT_TRUE(returned_subnet); - EXPECT_EQ(15, returned_subnet->getID()); - returned_subnet = network->getAllSubnets()->at(2); + returned_it = network->getAllSubnets()->begin(); + returned_subnet = *++returned_it; ASSERT_TRUE(returned_subnet); EXPECT_EQ(10, returned_subnet->getID()); + returned_subnet = *++returned_it; + ASSERT_TRUE(returned_subnet); + EXPECT_EQ(15, returned_subnet->getID()); // Create another network and try to replace a subnet to it. It should fail // because the subnet is already associated with the first network. @@ -959,7 +975,7 @@ TEST(SharedNetwork6Test, replaceSubnet6) { 400, SubnetID(1))); EXPECT_TRUE(network->replace(subnet)); ASSERT_EQ(3, network->getAllSubnets()->size()); - returned_subnet = network->getAllSubnets()->at(1); + returned_subnet = *network->getAllSubnets()->begin(); ASSERT_TRUE(returned_subnet); ASSERT_EQ(1, returned_subnet->getID()); EXPECT_EQ("2001:db8:10::/64", returned_subnet->toText()); @@ -969,7 +985,7 @@ TEST(SharedNetwork6Test, replaceSubnet6) { SubnetID(1))); EXPECT_FALSE(network->replace(subnet)); ASSERT_EQ(3, network->getAllSubnets()->size()); - returned_subnet = network->getAllSubnets()->at(1); + returned_subnet = *network->getAllSubnets()->begin(); ASSERT_TRUE(returned_subnet); ASSERT_EQ(1, returned_subnet->getID()); EXPECT_EQ("2001:db8:10::/64", returned_subnet->toText()); @@ -998,7 +1014,7 @@ TEST(SharedNetwork6Test, delSubnet6) { ASSERT_NO_THROW(network->del(subnet1->getID())); // We should be left with only one subnet. ASSERT_EQ(1, network->getAllSubnets()->size()); - Subnet6Ptr subnet_returned = network->getAllSubnets()->front(); + Subnet6Ptr subnet_returned = *network->getAllSubnets()->begin(); ASSERT_TRUE(subnet_returned); EXPECT_EQ(subnet2->getID(), subnet_returned->getID()); diff --git a/src/lib/dhcpsrv/tests/srv_config_unittest.cc b/src/lib/dhcpsrv/tests/srv_config_unittest.cc index b2a5d7d9c8..8fa89046a0 100644 --- a/src/lib/dhcpsrv/tests/srv_config_unittest.cc +++ b/src/lib/dhcpsrv/tests/srv_config_unittest.cc @@ -59,7 +59,7 @@ public: Subnet4Ptr subnet(new Subnet4(IOAddress(0xC0000000 | (i << 2)), 24, def_triplet, def_triplet, 4000)); - test_subnets4_.push_back(subnet); + test_subnets4_.insert(subnet); } // Create IPv6 subnets. IOAddress prefix("2001:db8:1::"); @@ -72,7 +72,7 @@ public: ++prefix_bytes[5]; prefix = IOAddress::fromBytes(prefix.getFamily(), &prefix_bytes[0]); Subnet6Ptr subnet(new Subnet6(prefix, 64, 1000, 2000, 3000, 4000)); - test_subnets6_.push_back(subnet); + test_subnets6_.insert(subnet); } // Build our reference dictionary of client classes @@ -142,7 +142,12 @@ SrvConfigTest::addSubnet4(const unsigned int index) { FAIL() << "Subnet index " << index << "out of range (0.." << TEST_SUBNETS_NUM << "): " << "unable to add IPv4 subnet"; } - conf_.getCfgSubnets4()->add(test_subnets4_[index]); + // std::advance is not available for this iterator. + auto it = test_subnets4_.begin(); + for (unsigned int i = 0; i < index; ++i, ++it) { + ASSERT_FALSE(it == test_subnets4_.end()); + } + conf_.getCfgSubnets4()->add(*it); } void @@ -151,7 +156,12 @@ SrvConfigTest::addSubnet6(const unsigned int index) { FAIL() << "Subnet index " << index << "out of range (0.." << TEST_SUBNETS_NUM << "): " << "unable to add IPv6 subnet"; } - conf_.getCfgSubnets6()->add(test_subnets6_[index]); + // std::advance is not available for this iterator. + auto it = test_subnets6_.begin(); + for (unsigned int i = 0; i < index; ++i, ++it) { + ASSERT_FALSE(it == test_subnets6_.end()); + } + conf_.getCfgSubnets6()->add(*it); } void diff --git a/src/lib/dhcpsrv/tests/subnet_unittest.cc b/src/lib/dhcpsrv/tests/subnet_unittest.cc index 082493f03a..139f89e87e 100644 --- a/src/lib/dhcpsrv/tests/subnet_unittest.cc +++ b/src/lib/dhcpsrv/tests/subnet_unittest.cc @@ -1801,10 +1801,10 @@ TEST(SubnetFetcherTest, getSubnet4ById) { EXPECT_FALSE(subnet); subnet.reset(new Subnet4(IOAddress("192.0.2.0"), 24, 1, 2, 3, 1024)); - EXPECT_NO_THROW(collection.push_back(subnet)); + EXPECT_NO_THROW(collection.insert(subnet)); subnet.reset(new Subnet4(IOAddress("192.0.3.0"), 24, 1, 2, 3, 2048)); - EXPECT_NO_THROW(collection.push_back(subnet)); + EXPECT_NO_THROW(collection.insert(subnet)); subnet = SubnetFetcher4::get(collection, SubnetID(1024)); ASSERT_TRUE(subnet); @@ -1827,10 +1827,10 @@ TEST(SubnetFetcherTest, getSubnet6ById) { EXPECT_FALSE(subnet); subnet.reset(new Subnet6(IOAddress("2001:db8:1::"), 64, 1, 2, 3, 4, 1024)); - EXPECT_NO_THROW(collection.push_back(subnet)); + EXPECT_NO_THROW(collection.insert(subnet)); subnet.reset(new Subnet6(IOAddress("2001:db8:2::"), 64, 1, 2, 3, 4, 2048)); - EXPECT_NO_THROW(collection.push_back(subnet)); + EXPECT_NO_THROW(collection.insert(subnet)); subnet = SubnetFetcher6::get(collection, SubnetID(1024)); ASSERT_TRUE(subnet); diff --git a/src/lib/dhcpsrv/testutils/test_config_backend_dhcp4.cc b/src/lib/dhcpsrv/testutils/test_config_backend_dhcp4.cc index 0cbe3dd38c..d9a06e73c7 100644 --- a/src/lib/dhcpsrv/testutils/test_config_backend_dhcp4.cc +++ b/src/lib/dhcpsrv/testutils/test_config_backend_dhcp4.cc @@ -87,12 +87,12 @@ TestConfigBackendDHCPv4::getAllSubnets4(const db::ServerSelector& server_selecto Subnet4Collection subnets; for (auto subnet : subnets_) { if (server_selector.amAny()) { - subnets.push_back(subnet); + subnets.insert(subnet); continue; } if (server_selector.amUnassigned()) { if (subnet->getServerTags().empty()) { - subnets.push_back(subnet); + subnets.insert(subnet); } continue; } @@ -100,7 +100,7 @@ TestConfigBackendDHCPv4::getAllSubnets4(const db::ServerSelector& server_selecto auto tags = server_selector.getTags(); for (auto tag : tags) { if (subnet->hasServerTag(ServerTag(tag))) { - subnets.push_back(subnet); + subnets.insert(subnet); got = true; break; } @@ -109,7 +109,7 @@ TestConfigBackendDHCPv4::getAllSubnets4(const db::ServerSelector& server_selecto continue; } if (subnet->hasAllServerTag()) { - subnets.push_back(subnet); + subnets.insert(subnet); } } return (subnets); @@ -123,12 +123,12 @@ TestConfigBackendDHCPv4::getModifiedSubnets4(const db::ServerSelector& server_se auto lb = index.lower_bound(modification_time); for (auto subnet = lb; subnet != index.end(); ++subnet) { if (server_selector.amAny()) { - subnets.push_back(*subnet); + subnets.insert(*subnet); continue; } if (server_selector.amUnassigned()) { if ((*subnet)->getServerTags().empty()) { - subnets.push_back(*subnet); + subnets.insert(*subnet); } continue; } @@ -136,7 +136,7 @@ TestConfigBackendDHCPv4::getModifiedSubnets4(const db::ServerSelector& server_se auto tags = server_selector.getTags(); for (auto tag : tags) { if ((*subnet)->hasServerTag(ServerTag(tag))) { - subnets.push_back(*subnet); + subnets.insert(*subnet); got = true; break; } @@ -145,7 +145,7 @@ TestConfigBackendDHCPv4::getModifiedSubnets4(const db::ServerSelector& server_se continue; } if ((*subnet)->hasAllServerTag()) { - subnets.push_back(*subnet); + subnets.insert(*subnet); } } return (subnets); @@ -188,7 +188,7 @@ TestConfigBackendDHCPv4::getSharedNetworkSubnets4(const db::ServerSelector& serv subnet->getSharedNetwork(network); if (((network && (network->getName() == shared_network_name)) || (subnet->getSharedNetworkName() == shared_network_name))) { - subnets.push_back(subnet); + subnets.insert(subnet); } } return (subnets); @@ -890,8 +890,7 @@ uint64_t TestConfigBackendDHCPv4::deleteSharedNetworkSubnets4(const db::ServerSelector& server_selector, const std::string& shared_network_name) { uint64_t cnt = 0; - auto& index = subnets_.get(); - for (auto subnet = index.begin(); subnet != index.end(); ) { + for (auto subnet = subnets_.begin(); subnet != subnets_.end(); ) { // Skip subnets which do not match the server selector. if (server_selector.amUnassigned() && !(*subnet)->getServerTags().empty()) { @@ -921,7 +920,7 @@ TestConfigBackendDHCPv4::deleteSharedNetworkSubnets4(const db::ServerSelector& s if ((network && (network->getName() == shared_network_name)) || ((*subnet)->getSharedNetworkName() == shared_network_name)) { - subnet = index.erase(subnet); + subnet = subnets_.erase(subnet); ++cnt; } else { ++subnet; diff --git a/src/lib/dhcpsrv/testutils/test_config_backend_dhcp6.cc b/src/lib/dhcpsrv/testutils/test_config_backend_dhcp6.cc index 3cdf001334..cbc2075358 100644 --- a/src/lib/dhcpsrv/testutils/test_config_backend_dhcp6.cc +++ b/src/lib/dhcpsrv/testutils/test_config_backend_dhcp6.cc @@ -86,12 +86,12 @@ TestConfigBackendDHCPv6::getAllSubnets6(const db::ServerSelector& server_selecto Subnet6Collection subnets; for (auto subnet : subnets_) { if (server_selector.amAny()) { - subnets.push_back(subnet); + subnets.insert(subnet); continue; } if (server_selector.amUnassigned()) { if (subnet->getServerTags().empty()) { - subnets.push_back(subnet); + subnets.insert(subnet); } continue; } @@ -99,7 +99,7 @@ TestConfigBackendDHCPv6::getAllSubnets6(const db::ServerSelector& server_selecto auto tags = server_selector.getTags(); for (auto tag : tags) { if (subnet->hasServerTag(ServerTag(tag))) { - subnets.push_back(subnet); + subnets.insert(subnet); got = true; break; } @@ -108,7 +108,7 @@ TestConfigBackendDHCPv6::getAllSubnets6(const db::ServerSelector& server_selecto continue; } if (subnet->hasAllServerTag()) { - subnets.push_back(subnet); + subnets.insert(subnet); } } return (subnets); @@ -122,12 +122,12 @@ TestConfigBackendDHCPv6::getModifiedSubnets6(const db::ServerSelector& server_se auto lb = index.lower_bound(modification_time); for (auto subnet = lb; subnet != index.end(); ++subnet) { if (server_selector.amAny()) { - subnets.push_back(*subnet); + subnets.insert(*subnet); continue; } if (server_selector.amUnassigned()) { if ((*subnet)->getServerTags().empty()) { - subnets.push_back(*subnet); + subnets.insert(*subnet); } continue; } @@ -135,7 +135,7 @@ TestConfigBackendDHCPv6::getModifiedSubnets6(const db::ServerSelector& server_se auto tags = server_selector.getTags(); for (auto tag : tags) { if ((*subnet)->hasServerTag(ServerTag(tag))) { - subnets.push_back(*subnet); + subnets.insert(*subnet); got = true; break; } @@ -144,7 +144,7 @@ TestConfigBackendDHCPv6::getModifiedSubnets6(const db::ServerSelector& server_se continue; } if ((*subnet)->hasAllServerTag()) { - subnets.push_back(*subnet); + subnets.insert(*subnet); } } return (subnets); @@ -187,7 +187,7 @@ TestConfigBackendDHCPv6::getSharedNetworkSubnets6(const db::ServerSelector& serv subnet->getSharedNetwork(network); if (((network && (network->getName() == shared_network_name)) || (subnet->getSharedNetworkName() == shared_network_name))) { - subnets.push_back(subnet); + subnets.insert(subnet); } } return (subnets); @@ -943,8 +943,7 @@ uint64_t TestConfigBackendDHCPv6::deleteSharedNetworkSubnets6(const db::ServerSelector& server_selector, const std::string& shared_network_name) { uint64_t cnt = 0; - auto& index = subnets_.get(); - for (auto subnet = index.begin(); subnet != index.end(); ) { + for (auto subnet = subnets_.begin(); subnet != subnets_.end(); ) { // Skip subnets which do not match the server selector. if (server_selector.amUnassigned() && !(*subnet)->getServerTags().empty()) { @@ -974,7 +973,7 @@ TestConfigBackendDHCPv6::deleteSharedNetworkSubnets6(const db::ServerSelector& s if ((network && (network->getName() == shared_network_name)) || ((*subnet)->getSharedNetworkName() == shared_network_name)) { - subnet = index.erase(subnet); + subnet = subnets_.erase(subnet); ++cnt; } else { ++subnet;