void
HostMgrTest::testAdd(BaseHostDataSource& data_source1,
BaseHostDataSource& data_source2) {
+ bool is_first_source_primary = isPrimaryDataSource(data_source1);
+ bool is_second_source_primary = isPrimaryDataSource(data_source2);
+ bool has_alternate_source = !is_first_source_primary || !is_second_source_primary;
// Initially, no reservations should be present.
ConstHostCollection hosts4 = HostMgr::instance().getAll4(SubnetID(1));
ConstHostCollection hosts6 = HostMgr::instance().getAll6(SubnetID(1));
ASSERT_TRUE(hosts6.empty());
// Add hosts using the implicit operation target.
- HostMgr::instance().add(HostPtr(new Host(
+ auto host = HostPtr(new Host(
hwaddrs_[0]->toText(false), "hw-address",
SubnetID(1), SUBNET_ID_UNUSED,
IOAddress("192.0.2.5")
- )));
+ ));
+ if (has_alternate_source) {
+ EXPECT_NO_THROW(HostMgr::instance().add(host));
+ } else {
+ EXPECT_THROW(HostMgr::instance().add(host), NoHostDataSourceManager);
+ }
- HostMgr::instance().add(HostPtr(new Host(
+ host = HostPtr(new Host(
hwaddrs_[1]->toText(false), "hw-address",
SUBNET_ID_UNUSED, SubnetID(1),
- IOAddress("2001:db8:1::5")
- )));
+ IOAddress::IPV4_ZERO_ADDRESS()
+ ));
+ host->addReservation(IPv6Resrv(IPv6Resrv::TYPE_NA,
+ IOAddress("2001:db8:1::5"), 128));
+ if (has_alternate_source) {
+ EXPECT_NO_THROW(HostMgr::instance().add(host));
+ } else {
+ EXPECT_THROW(HostMgr::instance().add(host), NoHostDataSourceManager);
+ }
// Add hosts using the explicit operation target - all data sources.
- HostMgr::instance().add(HostPtr(new Host(
- hwaddrs_[0]->toText(false), "hw-address",
+ host = HostPtr(new Host(
+ hwaddrs_[2]->toText(false), "hw-address",
SubnetID(1), SUBNET_ID_UNUSED,
IOAddress("192.0.2.6")
- )), HostMgrOperationTarget::ALL_SOURCES);
+ ));
+ HostMgr::instance().add(host, HostMgrOperationTarget::ALL_SOURCES);
- HostMgr::instance().add(HostPtr(new Host(
- hwaddrs_[1]->toText(false), "hw-address",
+ host = HostPtr(new Host(
+ hwaddrs_[3]->toText(false), "hw-address",
SUBNET_ID_UNUSED, SubnetID(1),
- IOAddress("2001:db8:1::6")
- )), HostMgrOperationTarget::ALL_SOURCES);
+ IOAddress::IPV4_ZERO_ADDRESS()
+ ));
+ host->addReservation(IPv6Resrv(IPv6Resrv::TYPE_NA,
+ IOAddress("2001:db8:1::6"), 128));
+ HostMgr::instance().add(host, HostMgrOperationTarget::ALL_SOURCES);
// Add hosts using the explicit operation target - primary data source.
- HostMgr::instance().add(HostPtr(new Host(
- hwaddrs_[0]->toText(false), "hw-address",
+ host = HostPtr(new Host(
+ hwaddrs_[4]->toText(false), "hw-address",
SubnetID(1), SUBNET_ID_UNUSED,
IOAddress("192.0.2.7")
- )), HostMgrOperationTarget::PRIMARY_SOURCE);
+ ));
+ HostMgr::instance().add(host, HostMgrOperationTarget::PRIMARY_SOURCE);
- HostMgr::instance().add(HostPtr(new Host(
- hwaddrs_[1]->toText(false), "hw-address",
+ host = HostPtr(new Host(
+ hwaddrs_[5]->toText(false), "hw-address",
SUBNET_ID_UNUSED, SubnetID(1),
- IOAddress("2001:db8:1::7")
- )), HostMgrOperationTarget::PRIMARY_SOURCE);
+ IOAddress::IPV4_ZERO_ADDRESS()
+ ));
+ host->addReservation(IPv6Resrv(IPv6Resrv::TYPE_NA,
+ IOAddress("2001:db8:1::7"), 128));
+ HostMgr::instance().add(host, HostMgrOperationTarget::PRIMARY_SOURCE);
// Add hosts using the explicit operation target - alternate data sources.
- HostMgr::instance().add(HostPtr(new Host(
- hwaddrs_[0]->toText(false), "hw-address",
+ host = HostPtr(new Host(
+ hwaddrs_[6]->toText(false), "hw-address",
SubnetID(1), SUBNET_ID_UNUSED,
IOAddress("192.0.2.8")
- )), HostMgrOperationTarget::ALTERNATE_SOURCES);
+ ));
+ if (has_alternate_source) {
+ EXPECT_NO_THROW(HostMgr::instance().add(host, HostMgrOperationTarget::ALTERNATE_SOURCES));
+ } else {
+ EXPECT_THROW(HostMgr::instance().add(host, HostMgrOperationTarget::ALTERNATE_SOURCES), NoHostDataSourceManager);
+ }
- HostMgr::instance().add(HostPtr(new Host(
- hwaddrs_[1]->toText(false), "hw-address",
+ host = HostPtr(new Host(
+ hwaddrs_[7]->toText(false), "hw-address",
SUBNET_ID_UNUSED, SubnetID(1),
- IOAddress("2001:db8:1::8")
- )), HostMgrOperationTarget::ALTERNATE_SOURCES);
+ IOAddress::IPV4_ZERO_ADDRESS()
+ ));
+ host->addReservation(IPv6Resrv(IPv6Resrv::TYPE_NA,
+ IOAddress("2001:db8:1::8"), 128));
+ if (has_alternate_source) {
+ EXPECT_NO_THROW(HostMgr::instance().add(host, HostMgrOperationTarget::ALTERNATE_SOURCES));
+ } else {
+ EXPECT_THROW(HostMgr::instance().add(host, HostMgrOperationTarget::ALTERNATE_SOURCES), NoHostDataSourceManager);
+ }
// Add hosts using the explicit operation target - unspecified data source.
- HostMgr::instance().add(HostPtr(new Host(
- hwaddrs_[0]->toText(false), "hw-address",
+ host = HostPtr(new Host(
+ hwaddrs_[8]->toText(false), "hw-address",
SubnetID(1), SUBNET_ID_UNUSED,
IOAddress("192.0.2.9")
- )), HostMgrOperationTarget::UNSPECIFIED_SOURCE);
+ ));
+ HostMgr::instance().add(host, HostMgrOperationTarget::UNSPECIFIED_SOURCE);
- HostMgr::instance().add(HostPtr(new Host(
- hwaddrs_[1]->toText(false), "hw-address",
+ host = HostPtr(new Host(
+ hwaddrs_[9]->toText(false), "hw-address",
SUBNET_ID_UNUSED, SubnetID(1),
- IOAddress("2001:db8:1::9")
- )), HostMgrOperationTarget::UNSPECIFIED_SOURCE);
+ IOAddress::IPV4_ZERO_ADDRESS()
+ ));
+ host->addReservation(IPv6Resrv(IPv6Resrv::TYPE_NA,
+ IOAddress("2001:db8:1::9"), 128));
+ HostMgr::instance().add(host, HostMgrOperationTarget::UNSPECIFIED_SOURCE);
// Verify the hosts were added.
- bool is_first_source_primary = isPrimaryDataSource(data_source1);
- bool is_second_source_primary = isPrimaryDataSource(data_source2);
// ALL_SOURCES + PRIMARY_SOURCE targets for IPv4 and IPv6.
- size_t hosts_in_primary_source = 2 * 2 * (is_first_source_primary + is_second_source_primary);
+ size_t hosts_in_primary_source = 2 * 2 * (is_first_source_primary || is_second_source_primary);
// Default + ALL_SOURCES + ALTERNATE_SOURCES targets for IPv4 and IPv6.
- size_t hosts_in_alternate_sources = 3 * 2 * (is_first_source_primary + is_second_source_primary);
+ size_t hosts_in_alternate_sources = 3 * 2 * (!is_first_source_primary || !is_second_source_primary);
// Verify primary sources.
hosts4 = HostMgr::instance().getAll4(SubnetID(1), HostMgrOperationTarget::PRIMARY_SOURCE);