/*
- * 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.
#include <gtest/gtest.h>
#include <iostream>
#include <sstream>
+#include <folly/test/SocketAddressTestHelper.h>
using namespace boost;
using std::string;
using std::cerr;
using std::endl;
using folly::SocketAddress;
+using folly::SocketAddressTestHelper;
TEST(SocketAddress, Size) {
SocketAddress addr;
}
}
+TEST(SocketAddress, SetFromIpAddressPort) {
+ SocketAddress addr;
+ folly::IPAddress ipAddr("123.234.0.23");
+ addr.setFromIpAddrPort(ipAddr, 8888);
+ EXPECT_EQ(addr.getFamily(), AF_INET);
+ EXPECT_EQ(addr.getAddressStr(), "123.234.0.23");
+ EXPECT_EQ(addr.getIPAddress(), ipAddr);
+ EXPECT_EQ(addr.getPort(), 8888);
+
+ folly::IPAddress ip6Addr("2620:0:1cfe:face:b00c::3");
+ SocketAddress addr6(ip6Addr, 8888);
+ EXPECT_EQ(addr6.getFamily(), AF_INET6);
+ EXPECT_EQ(addr6.getAddressStr(), "2620:0:1cfe:face:b00c::3");
+ EXPECT_EQ(addr6.getIPAddress(), ip6Addr);
+ EXPECT_EQ(addr6.getPort(), 8888);
+}
+
TEST(SocketAddress, SetFromIpv4) {
SocketAddress addr;
addr.setFromIpPort("255.254.253.252", 8888);
EXPECT_EQ(addr.getPort(), 80);
// Call setFromLocalIpPort() with an IP and port.
- addr.setFromLocalIpPort("127.0.0.1:4321");
- EXPECT_EQ(addr.getAddressStr(), "127.0.0.1");
- EXPECT_EQ(addr.getPort(), 4321);
+ if (SocketAddressTestHelper::isIPv4Enabled()) {
+ addr.setFromLocalIpPort("127.0.0.1:4321");
+ EXPECT_EQ(addr.getAddressStr(), "127.0.0.1");
+ EXPECT_EQ(addr.getPort(), 4321);
+ }
+ if (SocketAddressTestHelper::isIPv6Enabled()) {
+ addr.setFromLocalIpPort("::1:4321");
+ EXPECT_EQ(addr.getAddressStr(), "::1");
+ EXPECT_EQ(addr.getPort(), 4321);
+ }
// setFromIpPort() without an address should fail
EXPECT_THROW(addr.setFromIpPort("4321"), std::invalid_argument);
EXPECT_EQ(addr.getFamily(), AF_INET);
EXPECT_EQ(addr.getAddressStr(), "1.2.3.4");
EXPECT_EQ(addr.getPort(), 9999);
+
+ // Call setFromIpPort() with a bracketed IPv6
+ addr.setFromIpPort("[::]:1234");
+ EXPECT_EQ(addr.getFamily(), AF_INET6);
+ EXPECT_EQ(addr.getAddressStr(), "::");
+ EXPECT_EQ(addr.getPort(), 1234);
+
+ // Call setFromIpPort() with a bracketed IPv6
+ addr.setFromIpPort("[9:8::2]:1234");
+ EXPECT_EQ(addr.getFamily(), AF_INET6);
+ EXPECT_EQ(addr.getAddressStr(), "9:8::2");
+ EXPECT_EQ(addr.getPort(), 1234);
+
+ // Call setFromIpPort() with a bracketed IPv6 and no port
+ EXPECT_THROW(addr.setFromIpPort("[::]"), std::system_error);
}
TEST(SocketAddress, EqualityAndHash) {
sockaddr_storage acceptAddr;
socklen_t acceptAddrLen = sizeof(acceptAddr);
- int serverSock = accept(listenSock, reinterpret_cast<sockaddr*>(&acceptAddr), &acceptAddrLen);
+ int serverSock = accept(listenSock,
+ reinterpret_cast<sockaddr*>(&acceptAddr), &acceptAddrLen);
REQUIRE_ERRNO(serverSock > 0, "failed to accept");
- acceptAddrRet->setFromSockaddr(reinterpret_cast<sockaddr*>(&acceptAddr), acceptAddrLen);
+ acceptAddrRet->setFromSockaddr(
+ reinterpret_cast<sockaddr*>(&acceptAddr), acceptAddrLen);
serverAddrRet->setFromLocalAddress(serverSock);
serverPeerAddrRet->setFromPeerAddress(serverSock);
EXPECT_EQ(clientAddr.getPath(), "");
EXPECT_EQ(acceptAddr.getPath(), "");
}
+
+TEST(SocketAddress, ResetUnixAddress) {
+ SocketAddress addy;
+ addy.setFromPath("/foo");
+
+ addy.reset();
+ EXPECT_EQ(addy.getFamily(), AF_UNSPEC);
+}