#include <dhcpsrv/subnet_id.h>
#include <boost/enable_shared_from_this.hpp>
#include <boost/shared_ptr.hpp>
+#include <string>
namespace isc {
namespace dhcp {
/// Shared networks provide similar interface like subnets, thus they both
/// derive from the @ref Network class.
class SharedNetwork : public AssignableNetwork {
+protected:
+
+ /// @brief Constructor.
+ ///
+ /// Sets name of the shared network.
+ explicit SharedNetwork(const std::string& name)
+ : name_(name) {
+ }
+
+public:
+
+ /// @brief Returns a name of the shared network.
+ std::string getName() const {
+ return (name_);
+ }
+
+ /// @brief Sets new name for the shared network.
+ ///
+ /// @param name New name for the shared network.
+ void setName(const std::string& name) {
+ name_ = name;
+ }
+
protected:
/// @brief Adds a subnet to a shared network.
return (*subnet_it);
}
+protected:
+
+ /// @brief Holds a name of a shared network.
+ std::string name_;
+
};
/// @brief Shared network holding IPv4 subnets.
public boost::enable_shared_from_this<SharedNetwork4> {
public:
+ /// @brief Constructor.
+ ///
+ /// Sets name of the shared network.
+ explicit SharedNetwork4(const std::string& name)
+ : SharedNetwork(name) {
+ }
+
/// @brief Returns shared pointer to this network.
///
/// This method is required by the parent @ref AssignableNetwork class.
public boost::enable_shared_from_this<SharedNetwork6> {
public:
+ /// @brief Constructor.
+ ///
+ /// Sets name of the shared network.
+ explicit SharedNetwork6(const std::string& name)
+ : SharedNetwork(name) {
+ }
+
/// @brief Returns shared pointer to this network.
///
/// This method is required by the parent @ref AssignableNetwork class.
namespace {
+// This test verifies that shared network can be given a name and that
+// this name can be retrieved.
+TEST(SharedNetwork4Test, getName) {
+ // Create shared network with an initial name "dog".
+ SharedNetwork4Ptr network(new SharedNetwork4("frog"));
+ EXPECT_EQ("frog", network->getName());
+
+ // Override the name.
+ network->setName("dog");
+ EXPECT_EQ("dog", network->getName());
+}
+
// This test verifies that an IPv4 subnet can be added to a shared network.
// It also verifies that two subnets with the same ID can't be added to
// a shared network and that a single subnet can't be added to two different
// shared subnets.
TEST(SharedNetwork4Test, addSubnet4) {
// First, create a network.
- SharedNetwork4Ptr network(new SharedNetwork4());
+ SharedNetwork4Ptr network(new SharedNetwork4("frog"));
// Try to add null pointer. It should throw.
Subnet4Ptr subnet;
// Create another network and try to add a subnet to it. It should fail
// because the subnet is already associated with the first network.
- SharedNetwork4Ptr network2(new SharedNetwork4());
+ SharedNetwork4Ptr network2(new SharedNetwork4("dog"));
ASSERT_THROW(network2->add(subnet), InvalidOperation);
}
Subnet4Ptr subnet2(new Subnet4(IOAddress("192.0.2.0"), 24, 10, 20, 30,
SubnetID(2)));
- SharedNetwork4Ptr network(new SharedNetwork4());
+ SharedNetwork4Ptr network(new SharedNetwork4("frog"));
ASSERT_NO_THROW(network->add(subnet1));
ASSERT_NO_THROW(network->add(subnet2));
// This test verifies that it is possible to iterate over the subnets
// associated with a particular shared network.
TEST(SharedNetwork4Test, getNextSubnet) {
- SharedNetwork4Ptr network(new SharedNetwork4());
+ SharedNetwork4Ptr network(new SharedNetwork4("frog"));
// Create three subnets.
Subnet4Ptr subnet1(new Subnet4(IOAddress("10.0.0.0"), 8, 10, 20, 30,
}
}
+// This test verifies that shared network can be given a name and that
+// this name can be retrieved.
+TEST(SharedNetwork6Test, getName) {
+ // Create shared network with an initial name "dog".
+ SharedNetwork6Ptr network(new SharedNetwork6("frog"));
+ EXPECT_EQ("frog", network->getName());
+
+ // Override the name.
+ network->setName("dog");
+ EXPECT_EQ("dog", network->getName());
+}
+
// This test verifies that an IPv6 subnet can be added to a shared network.
// It also verifies that two subnets with the same ID can't be added to
// a shared network and that a single subnet can't be added to two different
// shared subnets.
TEST(SharedNetwork6Test, addSubnet6) {
// First, create a network.
- SharedNetwork6Ptr network(new SharedNetwork6());
+ SharedNetwork6Ptr network(new SharedNetwork6("frog"));
// Try to add null pointer. It should throw.
Subnet6Ptr subnet;
// Create another network and try to add a subnet to it. It should fail
// because the subnet is already associated with the first network.
- SharedNetwork6Ptr network2(new SharedNetwork6());
+ SharedNetwork6Ptr network2(new SharedNetwork6("dog"));
ASSERT_THROW(network2->add(subnet), InvalidOperation);
}
Subnet6Ptr subnet2(new Subnet6(IOAddress("3000::"), 16, 10, 20, 30, 40,
SubnetID(2)));
- SharedNetwork6Ptr network(new SharedNetwork6());
+ SharedNetwork6Ptr network(new SharedNetwork6("frog"));
ASSERT_NO_THROW(network->add(subnet1));
ASSERT_NO_THROW(network->add(subnet2));
// This test verifies that it is possible to iterate over the subnets
// associated with a particular shared network.
TEST(SharedNetwork6Test, getNextSubnet) {
- SharedNetwork6Ptr network(new SharedNetwork6());
+ SharedNetwork6Ptr network(new SharedNetwork6("frog"));
// Create three subnets.
Subnet6Ptr subnet1(new Subnet6(IOAddress("2001:db8:1::"), 64, 10, 20, 30,