|
@@ -26,7 +26,67 @@ using namespace std;
|
|
|
using namespace isc::dhcp;
|
|
|
using namespace isc::asiolink;
|
|
|
|
|
|
-TEST(Pool6Test, lastAddrInPrefix) {
|
|
|
+// This test verifies that lastAddrInPrefix is able to handle IPv4 operations.
|
|
|
+TEST(AddrUtilitiesTest, lastAddrInPrefix4) {
|
|
|
+ IOAddress addr1("192.0.2.1");
|
|
|
+
|
|
|
+ // Prefixes rounded to addresses are easy...
|
|
|
+ EXPECT_EQ("192.255.255.255", lastAddrInPrefix(addr1, 8).toText());
|
|
|
+ EXPECT_EQ("192.0.255.255", lastAddrInPrefix(addr1, 16).toText());
|
|
|
+ EXPECT_EQ("192.0.2.255", lastAddrInPrefix(addr1, 24).toText());
|
|
|
+
|
|
|
+ // these are trickier
|
|
|
+ EXPECT_EQ("192.0.2.127", lastAddrInPrefix(addr1, 25).toText());
|
|
|
+ EXPECT_EQ("192.0.2.63", lastAddrInPrefix(addr1, 26).toText());
|
|
|
+ EXPECT_EQ("192.0.2.31", lastAddrInPrefix(addr1, 27).toText());
|
|
|
+ EXPECT_EQ("192.0.2.15", lastAddrInPrefix(addr1, 28).toText());
|
|
|
+ EXPECT_EQ("192.0.2.7", lastAddrInPrefix(addr1, 29).toText());
|
|
|
+ EXPECT_EQ("192.0.2.3", lastAddrInPrefix(addr1, 30).toText());
|
|
|
+
|
|
|
+ // that doesn't make much sense as /31 subnet consists of network address
|
|
|
+ // and a broadcast address, with 0 usable addresses.
|
|
|
+ EXPECT_EQ("192.0.2.1", lastAddrInPrefix(addr1, 31).toText());
|
|
|
+ EXPECT_EQ("192.0.2.1", lastAddrInPrefix(addr1, 32).toText());
|
|
|
+
|
|
|
+ // Let's check extreme cases
|
|
|
+ IOAddress anyAddr("0.0.0.0");
|
|
|
+ EXPECT_EQ("127.255.255.255", lastAddrInPrefix(anyAddr, 1).toText());
|
|
|
+ EXPECT_EQ("255.255.255.255", lastAddrInPrefix(anyAddr, 0).toText());
|
|
|
+ EXPECT_EQ("0.0.0.0", lastAddrInPrefix(anyAddr, 32).toText());
|
|
|
+}
|
|
|
+
|
|
|
+// This test checks if firstAddrInPrefix is able to handle IPv4 operations.
|
|
|
+TEST(AddrUtilitiesTest, firstAddrInPrefix4) {
|
|
|
+ IOAddress addr1("192.223.2.255");
|
|
|
+
|
|
|
+ // Prefixes rounded to addresses are easy...
|
|
|
+ EXPECT_EQ("192.0.0.0", firstAddrInPrefix(addr1, 8).toText());
|
|
|
+ EXPECT_EQ("192.223.0.0", firstAddrInPrefix(addr1, 16).toText());
|
|
|
+ EXPECT_EQ("192.223.2.0", firstAddrInPrefix(addr1, 24).toText());
|
|
|
+
|
|
|
+ // these are trickier
|
|
|
+ EXPECT_EQ("192.223.2.128", firstAddrInPrefix(addr1, 25).toText());
|
|
|
+ EXPECT_EQ("192.223.2.192", firstAddrInPrefix(addr1, 26).toText());
|
|
|
+ EXPECT_EQ("192.223.2.224", firstAddrInPrefix(addr1, 27).toText());
|
|
|
+ EXPECT_EQ("192.223.2.240", firstAddrInPrefix(addr1, 28).toText());
|
|
|
+ EXPECT_EQ("192.223.2.248", firstAddrInPrefix(addr1, 29).toText());
|
|
|
+ EXPECT_EQ("192.223.2.252", firstAddrInPrefix(addr1, 30).toText());
|
|
|
+
|
|
|
+ // that doesn't make much sense as /31 subnet consists of network address
|
|
|
+ // and a broadcast address, with 0 usable addresses.
|
|
|
+ EXPECT_EQ("192.223.2.254", firstAddrInPrefix(addr1, 31).toText());
|
|
|
+ EXPECT_EQ("192.223.2.255", firstAddrInPrefix(addr1, 32).toText());
|
|
|
+
|
|
|
+ // Let's check extreme cases.
|
|
|
+ IOAddress bcast("255.255.255.255");
|
|
|
+ EXPECT_EQ("128.0.0.0", firstAddrInPrefix(bcast, 1).toText());
|
|
|
+ EXPECT_EQ("0.0.0.0", firstAddrInPrefix(bcast, 0).toText());
|
|
|
+ EXPECT_EQ("255.255.255.255", firstAddrInPrefix(bcast, 32).toText());
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+/// This test checks if lastAddrInPrefix properly supports IPv6 operations
|
|
|
+TEST(AddrUtilitiesTest, lastAddrInPrefix6) {
|
|
|
IOAddress addr1("2001:db8:1:1234:5678:abcd:1234:beef");
|
|
|
|
|
|
// Prefixes rounded to nibbles are easy...
|
|
@@ -63,7 +123,8 @@ TEST(Pool6Test, lastAddrInPrefix) {
|
|
|
EXPECT_EQ("::", lastAddrInPrefix(anyAddr, 128).toText());
|
|
|
}
|
|
|
|
|
|
-TEST(Pool6Test, firstAddrInPrefix) {
|
|
|
+/// This test checks if firstAddrInPrefix properly supports IPv6 operations
|
|
|
+TEST(AddrUtilitiesTest, firstAddrInPrefix6) {
|
|
|
IOAddress addr1("2001:db8:1:1234:5678:1234:abcd:beef");
|
|
|
|
|
|
// Prefixes rounded to nibbles are easy...
|