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);
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
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.
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();
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.
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
// 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
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]
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());
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<int64_t>(0));
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();
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();
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);
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);
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);
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);
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());
" \"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"
" \"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"
" \"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"
" \"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"
" \"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"
" \"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"
" \"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"
" \"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"
// 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);
}
// 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_);
// 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);
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());
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());
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());
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());
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());
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);
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);
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);
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
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.
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)
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
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
// 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
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]
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]
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
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
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.
-// 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
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.
-// 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
// 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;
}
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);
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());
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);
" \"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"
" \"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"
" \"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"
" \"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"
" \"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"
// 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);
}
// 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_);
// 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);
// 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());
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());
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());
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());
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());
-// 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
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_);
// 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,
// 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<SubnetRandomAccessIndexTag>();
+ auto& subnet_index = subnets.get<SubnetSubnetIdIndexTag>();
tossNonMatchingElements(server_selector, subnet_index);
}
// 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,
// 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<SubnetRandomAccessIndexTag>();
+ auto& subnet_index = subnets.get<SubnetSubnetIdIndexTag>();
tossNonMatchingElements(server_selector, subnet_index);
}
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.
// 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");
// 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");
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));
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));
}
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.
// 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");
// 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");
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));
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));
}
// 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) {
// 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) {
LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE, DHCPSRV_CFGMGR_ADD_SUBNET4)
.arg(subnet->toText());
- static_cast<void>(subnets_.push_back(subnet));
+ static_cast<void>(subnets_.insert(subnet));
}
Subnet4Ptr
}
// Add the "other" subnet to the our collection of subnets.
- static_cast<void>(subnets_.push_back(*other_subnet));
+ static_cast<void>(subnets_.insert(*other_subnet));
// If it belongs to a shared network, find the network and
// add the subnet to it
LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE, DHCPSRV_CFGMGR_ADD_SUBNET6)
.arg(subnet->toText());
- static_cast<void>(subnets_.push_back(subnet));
+ static_cast<void>(subnets_.insert(subnet));
}
Subnet6Ptr
}
// Add the "other" subnet to the our collection of subnets.
- static_cast<void>(subnets_.push_back(*other_subnet));
+ static_cast<void>(subnets_.insert(*other_subnet));
// If it belongs to a shared network, find the network and
// add the subnet to it
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");
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");
-// 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
}
// Add a subnet to the collection of subnets for this shared network.
- static_cast<void>(subnets.push_back(subnet));
+ static_cast<void>(subnets.insert(subnet));
}
/// @brief Replaces IPv4 subnet in a shared network.
// subnet must exist in this container, thus we throw if the iterator
// is not found.
const auto& index = subnets.template get<SubnetSubnetIdIndexTag>();
- 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<SubnetRandomAccessIndexTag>(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.
///
//@{
-/// @brief Tag for the random access index.
-struct SubnetRandomAccessIndexTag { };
-
/// @brief Tag for the index for searching by subnet identifier.
struct SubnetSubnetIdIndexTag { };
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<SubnetRandomAccessIndexTag>
- >,
- // 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<SubnetSubnetIdIndexTag>,
boost::multi_index::const_mem_fun<Subnet, SubnetID, &Subnet::getID>
>,
- // 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<SubnetPrefixIndexTag>,
boost::multi_index::const_mem_fun<Subnet, std::string, &Subnet::toText>
>,
- // 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<SubnetServerIdIndexTag>,
boost::multi_index::const_mem_fun<Network4, asiolink::IOAddress,
&Network4::getServerId>
>,
- // 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<SubnetModificationTimeIndexTag>,
boost::multi_index::const_mem_fun<data::BaseStampedElement,
Subnet6Ptr,
// 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<SubnetRandomAccessIndexTag>
- >,
- // 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<SubnetSubnetIdIndexTag>,
boost::multi_index::const_mem_fun<Subnet, SubnetID, &Subnet::getID>
>,
- // 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<SubnetPrefixIndexTag>,
boost::multi_index::const_mem_fun<Subnet, std::string, &Subnet::toText>
>,
- // 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<SubnetModificationTimeIndexTag>,
boost::multi_index::const_mem_fun<data::BaseStampedElement,
ASSERT_TRUE(replaced);
EXPECT_TRUE(replaced == subnet2);
ASSERT_EQ(3, cfg.getAll()->size());
- Subnet4Ptr returned = cfg.getAll()->at(1);
+ Subnet4Ptr returned = cfg.getSubnet(SubnetID(2));
ASSERT_TRUE(returned);
EXPECT_TRUE(returned == subnet);
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);
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);
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);
}
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);
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);
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);
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);
}
// 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;
// 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,
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());
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.
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());
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());
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.
// 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;
// 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,
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());
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.
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());
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());
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());
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::");
++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
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
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
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);
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);
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;
}
auto tags = server_selector.getTags();
for (auto tag : tags) {
if (subnet->hasServerTag(ServerTag(tag))) {
- subnets.push_back(subnet);
+ subnets.insert(subnet);
got = true;
break;
}
continue;
}
if (subnet->hasAllServerTag()) {
- subnets.push_back(subnet);
+ subnets.insert(subnet);
}
}
return (subnets);
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;
}
auto tags = server_selector.getTags();
for (auto tag : tags) {
if ((*subnet)->hasServerTag(ServerTag(tag))) {
- subnets.push_back(*subnet);
+ subnets.insert(*subnet);
got = true;
break;
}
continue;
}
if ((*subnet)->hasAllServerTag()) {
- subnets.push_back(*subnet);
+ subnets.insert(*subnet);
}
}
return (subnets);
subnet->getSharedNetwork(network);
if (((network && (network->getName() == shared_network_name)) ||
(subnet->getSharedNetworkName() == shared_network_name))) {
- subnets.push_back(subnet);
+ subnets.insert(subnet);
}
}
return (subnets);
TestConfigBackendDHCPv4::deleteSharedNetworkSubnets4(const db::ServerSelector& server_selector,
const std::string& shared_network_name) {
uint64_t cnt = 0;
- auto& index = subnets_.get<SubnetRandomAccessIndexTag>();
- 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()) {
if ((network && (network->getName() == shared_network_name)) ||
((*subnet)->getSharedNetworkName() == shared_network_name)) {
- subnet = index.erase(subnet);
+ subnet = subnets_.erase(subnet);
++cnt;
} else {
++subnet;
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;
}
auto tags = server_selector.getTags();
for (auto tag : tags) {
if (subnet->hasServerTag(ServerTag(tag))) {
- subnets.push_back(subnet);
+ subnets.insert(subnet);
got = true;
break;
}
continue;
}
if (subnet->hasAllServerTag()) {
- subnets.push_back(subnet);
+ subnets.insert(subnet);
}
}
return (subnets);
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;
}
auto tags = server_selector.getTags();
for (auto tag : tags) {
if ((*subnet)->hasServerTag(ServerTag(tag))) {
- subnets.push_back(*subnet);
+ subnets.insert(*subnet);
got = true;
break;
}
continue;
}
if ((*subnet)->hasAllServerTag()) {
- subnets.push_back(*subnet);
+ subnets.insert(*subnet);
}
}
return (subnets);
subnet->getSharedNetwork(network);
if (((network && (network->getName() == shared_network_name)) ||
(subnet->getSharedNetworkName() == shared_network_name))) {
- subnets.push_back(subnet);
+ subnets.insert(subnet);
}
}
return (subnets);
TestConfigBackendDHCPv6::deleteSharedNetworkSubnets6(const db::ServerSelector& server_selector,
const std::string& shared_network_name) {
uint64_t cnt = 0;
- auto& index = subnets_.get<SubnetRandomAccessIndexTag>();
- 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()) {
if ((network && (network->getName() == shared_network_name)) ||
((*subnet)->getSharedNetworkName() == shared_network_name)) {
- subnet = index.erase(subnet);
+ subnet = subnets_.erase(subnet);
++cnt;
} else {
++subnet;