summaryrefslogtreecommitdiff
path: root/test/cctest
diff options
context:
space:
mode:
authorJames M Snell <jasnell@gmail.com>2020-03-03 11:18:45 -0800
committerJames M Snell <jasnell@gmail.com>2020-03-05 12:07:34 -0800
commitba462c2e1ef1edff3af03d079c8a9bed22d09e80 (patch)
treeac8e782396adf7b7c52b4b4703a92357192cffc7 /test/cctest
parentb023d61716ddc9cd97cc148bb8d237ec8d894d2b (diff)
downloadnode-new-ba462c2e1ef1edff3af03d079c8a9bed22d09e80.tar.gz
src: introduce node_sockaddr
Introduce the SocketAddress utility class. The QUIC implementation makes extensive use of this for handling of socket addresses. It was separated out to make it generically reusable throughout core Signed-off-by: James M Snell <jasnell@gmail.com> PR-URL: https://github.com/nodejs/node/pull/32070 Reviewed-By: David Carlier <devnexen@gmail.com> Reviewed-By: Richard Lau <riclau@uk.ibm.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Denys Otrishko <shishugi@gmail.com>
Diffstat (limited to 'test/cctest')
-rw-r--r--test/cctest/test_sockaddr.cc57
1 files changed, 57 insertions, 0 deletions
diff --git a/test/cctest/test_sockaddr.cc b/test/cctest/test_sockaddr.cc
new file mode 100644
index 0000000000..8c23463f11
--- /dev/null
+++ b/test/cctest/test_sockaddr.cc
@@ -0,0 +1,57 @@
+#include "node_sockaddr-inl.h"
+#include "gtest/gtest.h"
+
+using node::SocketAddress;
+
+TEST(SocketAddress, SocketAddress) {
+ CHECK(SocketAddress::is_numeric_host("123.123.123.123"));
+ CHECK(!SocketAddress::is_numeric_host("localhost"));
+
+ sockaddr_storage storage;
+ sockaddr_storage storage2;
+ SocketAddress::ToSockAddr(AF_INET, "123.123.123.123", 443, &storage);
+ SocketAddress::ToSockAddr(AF_INET, "1.1.1.1", 80, &storage2);
+
+ SocketAddress addr(reinterpret_cast<const sockaddr*>(&storage));
+ SocketAddress addr2(reinterpret_cast<const sockaddr*>(&storage2));
+
+ CHECK_EQ(addr.length(), sizeof(sockaddr_in));
+ CHECK_EQ(addr.family(), AF_INET);
+ CHECK_EQ(addr.address(), "123.123.123.123");
+ CHECK_EQ(addr.port(), 443);
+
+ addr.set_flow_label(12345);
+ CHECK_EQ(addr.flow_label(), 0);
+
+ CHECK_NE(addr, addr2);
+ CHECK_EQ(addr, addr);
+
+ CHECK_EQ(SocketAddress::Hash()(addr), SocketAddress::Hash()(addr));
+ CHECK_NE(SocketAddress::Hash()(addr), SocketAddress::Hash()(addr2));
+
+ addr.Update(reinterpret_cast<uint8_t*>(&storage2), sizeof(sockaddr_in));
+ CHECK_EQ(addr.length(), sizeof(sockaddr_in));
+ CHECK_EQ(addr.family(), AF_INET);
+ CHECK_EQ(addr.address(), "1.1.1.1");
+ CHECK_EQ(addr.port(), 80);
+
+ SocketAddress::Map<size_t> map;
+ map[addr]++;
+ map[addr]++;
+ CHECK_EQ(map[addr], 2);
+}
+
+TEST(SocketAddress, SocketAddressIPv6) {
+ sockaddr_storage storage;
+ SocketAddress::ToSockAddr(AF_INET6, "::1", 443, &storage);
+
+ SocketAddress addr(reinterpret_cast<const sockaddr*>(&storage));
+
+ CHECK_EQ(addr.length(), sizeof(sockaddr_in6));
+ CHECK_EQ(addr.family(), AF_INET6);
+ CHECK_EQ(addr.address(), "::1");
+ CHECK_EQ(addr.port(), 443);
+
+ addr.set_flow_label(12345);
+ CHECK_EQ(addr.flow_label(), 12345);
+}