From: Marcin Siodelski Date: Wed, 18 Feb 2015 12:08:43 +0000 (+0100) Subject: [master] Merge branch 'trac3711' X-Git-Tag: trac3723_base~18 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=cb5533a1bf1023faf61c1b8ade6ac8fa425f46c2;p=thirdparty%2Fkea.git [master] Merge branch 'trac3711' Conflicts: src/lib/asiolink/io_address.h src/lib/asiolink/tests/io_address_unittest.cc --- cb5533a1bf1023faf61c1b8ade6ac8fa425f46c2 diff --cc src/lib/asiolink/tests/io_address_unittest.cc index b7af7260b0,0fb5d033c2..4cd8d4926a --- a/src/lib/asiolink/tests/io_address_unittest.cc +++ b/src/lib/asiolink/tests/io_address_unittest.cc @@@ -218,8 -219,76 +219,82 @@@ TEST(IOAddressTest, accessClassificatio EXPECT_TRUE (addr5.isV6Multicast()); } +TEST(IOAddressTest, staticAddresses) { + EXPECT_EQ(IOAddress("0.0.0.0"), IOAddress::IPV4_ZERO_ADDRESS()); + EXPECT_EQ(IOAddress("255.255.255.255"), IOAddress::IPV4_BCAST_ADDRESS()); + EXPECT_EQ(IOAddress("::"), IOAddress::IPV6_ZERO_ADDRESS()); +} ++ + // Tests whether address subtraction works correctly. + TEST(IOAddressTest, subtract) { + IOAddress addr1("192.0.2.12"); + IOAddress addr2("192.0.2.5"); + IOAddress addr3("192.0.2.0"); + IOAddress addr4("0.0.2.1"); + IOAddress any4("0.0.0.0"); + IOAddress bcast("255.255.255.255"); + + EXPECT_EQ("0.0.0.7", IOAddress::subtract(addr1, addr2).toText()); + EXPECT_EQ("0.0.0.12", IOAddress::subtract(addr1, addr3).toText()); + + // Subtracting 0.0.0.0 is like subtracting 0. + EXPECT_EQ("192.0.2.12", IOAddress::subtract(addr1, any4).toText()); + EXPECT_EQ("192.0.2.13", IOAddress::subtract(addr1, bcast).toText()); + EXPECT_EQ("191.255.255.255", IOAddress::subtract(addr3, addr4).toText()); + + // Let's check if we can subtract greater address from smaller. + // This will check if we can "loop" + EXPECT_EQ("255.255.255.251", IOAddress::subtract(addr3, addr2).toText()); + + IOAddress addr6("fe80::abcd"); + IOAddress addr7("fe80::"); + IOAddress addr8("fe80::1234"); + IOAddress addr9("2001:db8::face"); + IOAddress addr10("2001:db8::ffff:ffff:ffff:ffff"); + IOAddress addr11("::1"); + IOAddress any6("::"); + + EXPECT_EQ("::abcd", IOAddress::subtract(addr6, addr7).toText()); + EXPECT_EQ("::9999", IOAddress::subtract(addr6, addr8).toText()); + EXPECT_EQ("::ffff:ffff:ffff:531", IOAddress::subtract(addr10, addr9).toText()); + + // Subtract with borrow, extreme edition. Need to borrow one bit + // 112 times. + EXPECT_EQ("fe7f:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + IOAddress::subtract(addr7, addr11).toText()); + + // Now check if we can loop beyond :: (:: - ::1 is a lot of F's) + EXPECT_EQ("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + IOAddress::subtract(any6, addr11).toText()); + + // Subtracting :: is like subtracting 0. + EXPECT_EQ("2001:db8::face", IOAddress::subtract(addr9, any6).toText()); + + // Let's check if we can subtract greater address from smaller. + // This will check if we can "loop" + EXPECT_EQ("ffff:ffff:ffff:ffff:ffff:ffff:ffff:edcc", + IOAddress::subtract(addr7, addr8).toText()); + + // Inter-family relations are not allowed. + EXPECT_THROW(IOAddress::subtract(addr1, addr6), isc::BadValue); + EXPECT_THROW(IOAddress::subtract(addr6, addr1), isc::BadValue); + } + + // Test checks whether an address can be increased. + TEST(IOAddressTest, increaseAddr) { + IOAddress addr1("192.0.2.12"); + IOAddress any4("0.0.0.0"); + IOAddress bcast("255.255.255.255"); + IOAddress addr6("2001:db8::ffff:ffff:ffff:ffff"); + IOAddress addr11("::1"); + IOAddress any6("::"); + IOAddress the_last_one("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"); + + EXPECT_EQ("192.0.2.13", IOAddress::increase(addr1).toText()); + EXPECT_EQ("0.0.0.1", IOAddress::increase(any4).toText()); + EXPECT_EQ("0.0.0.0", IOAddress::increase(bcast).toText()); + EXPECT_EQ("2001:db8:0:1::", IOAddress::increase(addr6).toText()); + EXPECT_EQ("::2", IOAddress::increase(addr11).toText()); + EXPECT_EQ("::1", IOAddress::increase(any6).toText()); + EXPECT_EQ("::", IOAddress::increase(the_last_one).toText()); + }