/*
- * Copyright 2014 Facebook, Inc.
+ * Copyright 2015 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* limitations under the License.
*/
-#include "IPAddressTest.h"
+#include <folly/test/IPAddressTest.h>
#include <gtest/gtest.h>
// tests code example
TEST(IPAddress, CodeExample) {
EXPECT_EQ(4, sizeof(IPAddressV4));
- EXPECT_EQ(16, sizeof(IPAddressV6));
- EXPECT_EQ(20, sizeof(IPAddress));
+ EXPECT_EQ(20, sizeof(IPAddressV6));
+ EXPECT_EQ(24, sizeof(IPAddress));
IPAddress uninitaddr;
IPAddress v4addr("192.0.2.129");
IPAddress v6map("::ffff:192.0.2.129");
EXPECT_TRUE(IPAddress::createIPv6(v4addr) == v6map.asV6());
}
+TEST(IPAddress, Scope) {
+ // Test that link-local scope is saved
+ auto str = "fe80::62eb:69ff:fe9b:ba60%eth0";
+ IPAddressV6 a2(str);
+ EXPECT_EQ(str, a2.str());
+
+ sockaddr_in6 sock = a2.toSockAddr();
+ EXPECT_NE(0, sock.sin6_scope_id);
+
+ IPAddress a1(str);
+ EXPECT_EQ(str, a1.str());
+
+ a2.setScopeId(0);
+ EXPECT_NE(a1, a2);
+
+ EXPECT_TRUE(a2 < a1);
+}
+
TEST(IPAddress, Ordering) {
IPAddress a1("0.1.1.1");
IPAddress a2("1.1.1.0");
{
// setup
sockaddr_in6 addr;
+ memset(&addr, 0, sizeof(addr));
in6_addr sin_addr;
ByteArray16 sec{{
// 2620:0:1cfe:face:b00c::3
EXPECT_EQ("0000:0000:0000:0000:0000:0000:0000:0001", ip.toFullyQualified())
<< ip;
}
+TEST(IPAddress, ToFullyQualifiedSize) {
+ auto actual = IPAddressV6::kToFullyQualifiedSize;
+ auto expected = IPAddress("::").toFullyQualified().size();
+ EXPECT_EQ(expected, actual);
+}
// test v4-v6 mapped addresses
TEST_P(IPAddressMappedTest, MappedEqual) {
};
TEST(IPAddress, InvalidMask) {
for (auto& tc : invalidMasks) {
- uint8_t mask = tc.second;
auto ip = IPAddress(tc.first);
EXPECT_THROW(ip.mask(tc.second), IPAddressFormatException);
}
TEST_P(IPAddressFlagTest, IsLinkLocal) {
AddressFlags param = GetParam();
- if (param.version != 6) {
- return;
- }
- IPAddressV6 addr(param.address);
+ IPAddress addr(param.address);
EXPECT_EQ(param.isLinkLocal(), addr.isLinkLocal()) << addr;
}
TEST_P(IPAddressByteAccessorTest, CheckBytes) {
auto addrData = GetParam();
IPAddress ip(addrData.address);
- auto i = 0;
+ size_t i = 0;
for (auto byitr = addrData.bytes.begin(); i < ip.byteCount(); ++i, ++byitr) {
EXPECT_EQ(*byitr, ip.getNthMSByte(i));
EXPECT_EQ(*byitr, ip.isV4() ?
//We will traverse the IPAddress bits from 0 to bitCount -1
auto bitr = folly::makeBitIterator(littleEndianAddrData.begin());
IPAddress ip(addrData.address);
- for (auto i = 0; i < ip.bitCount(); ++i) {
+ for (size_t i = 0; i < ip.bitCount(); ++i) {
auto msbIndex = ip.bitCount() - i - 1;
EXPECT_EQ(*bitr, ip.getNthMSBit(msbIndex));
EXPECT_EQ(*bitr, ip.isV4() ? ip.asV4().getNthMSBit(msbIndex) :
EXPECT_THROW(asV6.getNthLSBit(-1), std::invalid_argument);
}
+TEST(IPAddress, StringFormat) {
+ in6_addr a6;
+ for (int i = 0; i < 8; ++i) {
+ a6.s6_addr16[i] = htons(0x0123 + ((i%4) * 0x4444));
+ }
+ EXPECT_EQ("0123:4567:89ab:cdef:0123:4567:89ab:cdef",
+ detail::fastIpv6ToString(a6));
+
+ in_addr a4;
+ a4.s_addr = htonl(0x01020304);
+ EXPECT_EQ("1.2.3.4", detail::fastIpv4ToString(a4));
+}
+
TEST(IPAddress, LongestCommonPrefix) {
IPAddress ip10("10.0.0.0");
IPAddress ip11("11.0.0.0");
AddressFlags("127.0.0.1", 4, IS_LOCAL | IS_PVT_NONROUTE),
AddressFlags("::1", 6, IS_LOCAL | IS_PVT_NONROUTE),
+ // link-local v4
+ AddressFlags("169.254.0.1", 4, IS_LINK_LOCAL | IS_PVT_NONROUTE),
+
// private v4
AddressFlags("10.0.0.0", 4, IS_PVT_NONROUTE),
AddressFlags("10.11.12.13", 4, IS_PVT_NONROUTE),
AddressFlags("10.255.255.255", 4, IS_PVT_NONROUTE),
- AddressFlags("127.128.129.200", 4, IS_PVT_NONROUTE),
- AddressFlags("127.255.255.255", 4, IS_PVT_NONROUTE),
- AddressFlags("169.254.0.0", 4, IS_PVT_NONROUTE),
+ AddressFlags("127.128.129.200", 4, IS_LOCAL | IS_PVT_NONROUTE),
+ AddressFlags("127.255.255.255", 4, IS_LOCAL | IS_PVT_NONROUTE),
+ AddressFlags("169.254.0.0", 4, IS_LINK_LOCAL | IS_PVT_NONROUTE),
AddressFlags("192.168.0.0", 4, IS_PVT_NONROUTE),
AddressFlags("192.168.200.255", 4, IS_PVT_NONROUTE),
AddressFlags("192.168.255.255", 4, IS_PVT_NONROUTE),