diff options
| author | Garrett D'Amore <garrett@damore.org> | 2024-04-21 12:23:07 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-21 12:23:07 -0700 |
| commit | 56507ab5c4db009be5251bde832f594fe5ed3d5e (patch) | |
| tree | c70e7d669c3548a5c58ab27c0fc6118a96580863 /src/core/sockaddr_test.c | |
| parent | 3593eba5272bf627b99a2521b3f025141a49bcad (diff) | |
| download | nng-56507ab5c4db009be5251bde832f594fe5ed3d5e.tar.gz nng-56507ab5c4db009be5251bde832f594fe5ed3d5e.tar.bz2 nng-56507ab5c4db009be5251bde832f594fe5ed3d5e.zip | |
Logging improvements (#1816)
* Add nng_str_sockaddr to get string representation of socket address.
* Added nng_log_get_level() is meant to allow users to obtain the
current level and avoid some possibly expensive operations just
to collect debugging information when debugging is not in effect.
We use a custom logger for NUTS, and this fits within the NUTS
test framework well, so that if -v is supplied we get more content.
All tests now get this by default.
Diffstat (limited to 'src/core/sockaddr_test.c')
| -rw-r--r-- | src/core/sockaddr_test.c | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/src/core/sockaddr_test.c b/src/core/sockaddr_test.c new file mode 100644 index 00000000..0e05fc79 --- /dev/null +++ b/src/core/sockaddr_test.c @@ -0,0 +1,176 @@ +// +// Copyright 2024 Staysail Systems, Inc. <info@staysail.tech> +// +// This software is supplied under the terms of the MIT License, a +// copy of which should be located in the distribution where this +// file was obtained (LICENSE.txt). A copy of the license may also be +// found online at https://opensource.org/licenses/MIT. +// + +#include <stdio.h> +#include <string.h> + +#include "nuts.h" +#include <nng/nng.h> + +#ifndef _WIN32 +#include <arpa/inet.h> // for endianness functions +#endif + +void +test_sa_ipc(void) +{ + nng_sockaddr sa; + char addr[NNG_MAXADDRSTRLEN]; + sa.s_ipc.sa_family = NNG_AF_IPC; + snprintf(sa.s_ipc.sa_path, sizeof(sa.s_ipc.sa_path), "/tmp/something"); + NUTS_ASSERT(strcmp(nng_str_sockaddr(&sa, addr, sizeof(addr)), + "/tmp/something") == 0); +} + +void +test_sa_abstract(void) +{ + nng_sockaddr sa; + char addr[NNG_MAXADDRSTRLEN]; + sa.s_abstract.sa_family = NNG_AF_ABSTRACT; + snprintf((char *) sa.s_abstract.sa_name, sizeof(sa.s_abstract.sa_name), + "something"); + NUTS_ASSERT(strcmp(nng_str_sockaddr(&sa, addr, sizeof(addr)), + "abstract[something]") == 0); +} + +void +test_sa_inproc(void) +{ + nng_sockaddr sa; + char addr[NNG_MAXADDRSTRLEN]; + sa.s_inproc.sa_family = NNG_AF_INPROC; + snprintf((char *) sa.s_inproc.sa_name, sizeof(sa.s_inproc.sa_name), + "something"); + nng_str_sockaddr(&sa, addr, sizeof(addr)); + nng_log_debug(NULL, "address is %s", addr); + NUTS_ASSERT(strcmp(addr, "inproc[something]") == 0); +} + +void +test_sa_inet(void) +{ + nng_sockaddr sa; + char addr[NNG_MAXADDRSTRLEN]; + sa.s_in.sa_family = NNG_AF_INET; + sa.s_in.sa_addr = htonl(0x7F000001); + sa.s_in.sa_port = htons(80); + NUTS_ASSERT(strcmp(nng_str_sockaddr(&sa, addr, sizeof(addr)), + "127.0.0.1:80") == 0); +} + +void +test_sa_inet6(void) +{ + nng_sockaddr sa; + char addr[NNG_MAXADDRSTRLEN]; + sa.s_in.sa_family = NNG_AF_INET6; + memset(sa.s_in6.sa_addr, 0, sizeof(sa.s_in6.sa_addr)); + sa.s_in6.sa_addr[15] = 1; // loopback + sa.s_in6.sa_scope = 0; + sa.s_in6.sa_port = htons(80); + nng_str_sockaddr(&sa, addr, sizeof(addr)); + nng_log_debug(NULL, "address is %s", addr); + NUTS_ASSERT(strcmp(addr, "[::1]:80") == 0); +} + +void +test_sa_inet6_v4_mapped(void) +{ + nng_sockaddr sa; + char addr[NNG_MAXADDRSTRLEN]; + sa.s_in.sa_family = NNG_AF_INET6; + memset(sa.s_in6.sa_addr, 0, sizeof(sa.s_in6.sa_addr)); + sa.s_in6.sa_addr[10] = 0xff; + sa.s_in6.sa_addr[11] = 0xff; + sa.s_in6.sa_addr[12] = 192; + sa.s_in6.sa_addr[13] = 168; + sa.s_in6.sa_addr[14] = 1; + sa.s_in6.sa_addr[15] = 100; + sa.s_in6.sa_scope = 0; + sa.s_in6.sa_port = htons(80); + nng_str_sockaddr(&sa, addr, sizeof(addr)); + nng_log_debug(NULL, "address is %s", addr); + NUTS_ASSERT(strcmp(addr, "[::ffff:192.168.1.100]:80") == 0); +} + +void +test_sa_inet6_ll(void) +{ + nng_sockaddr sa; + char addr[NNG_MAXADDRSTRLEN]; + sa.s_in.sa_family = NNG_AF_INET6; + memset(sa.s_in6.sa_addr, 0, sizeof(sa.s_in6.sa_addr)); + sa.s_in6.sa_addr[0] = 0xfe; + sa.s_in6.sa_addr[1] = 0x80; + sa.s_in6.sa_addr[15] = 4; + sa.s_in6.sa_scope = 0; + sa.s_in6.sa_port = htons(80); + sa.s_in6.sa_scope = 2; // link local addresses have a non-zero scope + nng_str_sockaddr(&sa, addr, sizeof(addr)); + nng_log_debug(NULL, "address is %s", addr); + NUTS_ASSERT(strcmp(addr, "[fe80::4%2]:80") == 0); +} + +void +test_sa_inet6_zero(void) +{ + nng_sockaddr sa; + char addr[NNG_MAXADDRSTRLEN]; + sa.s_in6.sa_family = NNG_AF_INET6; + memset(sa.s_in6.sa_addr, 0, sizeof(sa.s_in6.sa_addr)); + sa.s_in6.sa_port = htons(80); + sa.s_in6.sa_scope = 0; + nng_str_sockaddr(&sa, addr, sizeof(addr)); + nng_log_debug(NULL, "address is %s", addr); + NUTS_ASSERT(strcmp(addr, "[::]:80") == 0); +} + +void +test_sa_inet6_net(void) +{ + nng_sockaddr sa; + char addr[NNG_MAXADDRSTRLEN]; + sa.s_in6.sa_family = NNG_AF_INET6; + memset(sa.s_in6.sa_addr, 0, sizeof(sa.s_in6.sa_addr)); + sa.s_in6.sa_port = htons(80); + sa.s_in6.sa_addr[0] = 0xfc; + sa.s_in6.sa_scope = 0; + nng_str_sockaddr(&sa, addr, sizeof(addr)); + nng_log_debug(NULL, "address is %s", addr); + NUTS_ASSERT(strcmp(addr, "[fc00::]:80") == 0); +} + +void +test_sa_zt(void) +{ + nng_sockaddr sa; + char addr[NNG_MAXADDRSTRLEN]; + sa.s_zt.sa_family = NNG_AF_ZT; + sa.s_zt.sa_nodeid = 0xa; + sa.s_zt.sa_nwid = 0xb; + sa.s_zt.sa_port = 1 << 20; + nng_str_sockaddr(&sa, addr, sizeof(addr)); + nng_log_debug(NULL, "address is %s", addr); + NUTS_ASSERT(strcmp(addr, "ZT[a:b:1048576]") == 0); +} + +TEST_LIST = { + { "nng_sockaddr_ipc", test_sa_ipc }, + { "nng_sockaddr_abstract", test_sa_abstract }, + { "nng_sockaddr_inproc", test_sa_inproc }, + { "nng_sockaddr_in", test_sa_inet }, + { "nng_sockaddr_in6", test_sa_inet6 }, + { "nng_sockaddr_in6 v4 mapped", test_sa_inet6_v4_mapped }, + { "nng_sockaddr_in6 link local", test_sa_inet6_ll }, + { "nng_sockaddr_in6 zero", test_sa_inet6_zero }, + { "nng_sockaddr_in6 subnet", test_sa_inet6_net }, + { "nng_sockaddr_zt", test_sa_zt }, + { NULL, NULL }, +}; |
