aboutsummaryrefslogtreecommitdiffstats
path: root/tests/utils
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2020-08-28 18:31:32 +0200
committerpespin <pespin@sysmocom.de>2020-08-31 08:50:42 +0000
commit1a3d24e8a583e0fac171e026bee32fa3ef403a2e (patch)
treef44d96791ade41675b88b57bd73d443af75233ad /tests/utils
parent4f463c5ccce7527c6a3fd98c7f4a32c68638888a (diff)
socket: Add support for AF_INET6 in osmo_sockaddr_to_str_and_uint()
Diffstat (limited to 'tests/utils')
-rw-r--r--tests/utils/utils_test.c102
-rw-r--r--tests/utils/utils_test.ok24
2 files changed, 110 insertions, 16 deletions
diff --git a/tests/utils/utils_test.c b/tests/utils/utils_test.c
index e15cf5f6..9ff023bf 100644
--- a/tests/utils/utils_test.c
+++ b/tests/utils/utils_test.c
@@ -775,6 +775,7 @@ struct osmo_sockaddr_to_str_and_uint_test_case {
bool omit_port;
const char *addr;
unsigned int addr_len;
+ int address_family; /* AF_INET / AF_INET6 */
bool omit_addr;
unsigned int expect_rc;
const char *expect_returned_addr;
@@ -785,24 +786,28 @@ struct osmo_sockaddr_to_str_and_uint_test_case osmo_sockaddr_to_str_and_uint_tes
.port = 0,
.addr = "0.0.0.0",
.addr_len = 20,
+ .address_family = AF_INET,
.expect_rc = 7,
},
{
.port = 65535,
.addr = "255.255.255.255",
.addr_len = 20,
+ .address_family = AF_INET,
.expect_rc = 15,
},
{
.port = 1234,
.addr = "234.23.42.123",
.addr_len = 20,
+ .address_family = AF_INET,
.expect_rc = 13,
},
{
.port = 1234,
.addr = "234.23.42.123",
.addr_len = 10,
+ .address_family = AF_INET,
.expect_rc = 13,
.expect_returned_addr = "234.23.42",
},
@@ -811,11 +816,13 @@ struct osmo_sockaddr_to_str_and_uint_test_case osmo_sockaddr_to_str_and_uint_tes
.omit_port = true,
.addr = "234.23.42.123",
.addr_len = 20,
+ .address_family = AF_INET,
.expect_rc = 13,
},
{
.port = 1234,
.addr = "234.23.42.123",
+ .address_family = AF_INET,
.omit_addr = true,
.expect_rc = 0,
.expect_returned_addr = "",
@@ -824,17 +831,83 @@ struct osmo_sockaddr_to_str_and_uint_test_case osmo_sockaddr_to_str_and_uint_tes
.port = 1234,
.addr = "234.23.42.123",
.addr_len = 0,
+ .address_family = AF_INET,
.expect_rc = 13,
.expect_returned_addr = "",
},
{
.port = 1234,
.addr = "234.23.42.123",
+ .address_family = AF_INET,
.omit_port = true,
.omit_addr = true,
.expect_rc = 0,
.expect_returned_addr = "",
},
+ {
+ .port = 1234,
+ .addr = "::",
+ .addr_len = 20,
+ .address_family = AF_INET6,
+ .expect_rc = 2,
+ },
+ {
+ .port = 1234,
+ .addr = "::1",
+ .addr_len = 20,
+ .address_family = AF_INET6,
+ .expect_rc = 3,
+ },
+ {
+ .port = 1234,
+ .addr = "::1",
+ .addr_len = 20,
+ .address_family = AF_INET6,
+ .omit_port = true,
+ .omit_addr = false,
+ .expect_rc = 3,
+ },
+ {
+ .port = 1234,
+ .addr = "::1",
+ .addr_len = 20,
+ .address_family = AF_INET6,
+ .omit_port = false,
+ .omit_addr = true,
+ .expect_rc = 0,
+ .expect_returned_addr = "",
+ },
+ {
+ .port = 1234,
+ .addr = "fd02:db8:1::1",
+ .addr_len = 20,
+ .address_family = AF_INET6,
+ .expect_rc = 13,
+ },
+ {
+ .port = 1234,
+ .addr = "2001:db8:1::ab9:C0A8:102",
+ .addr_len = 40,
+ .address_family = AF_INET6,
+ .expect_rc = 24,
+ .expect_returned_addr = "2001:db8:1::ab9:c0a8:102",
+ },
+ {
+ .port = 1234,
+ .addr = "2001:0db8:0001:0000:0000:0ab9:C0A8:0102",
+ .addr_len = 32,
+ .address_family = AF_INET6,
+ .expect_rc = 24,
+ .expect_returned_addr = "2001:db8:1::ab9:c0a8:102",
+ },
+ {
+ .port = 1234,
+ .addr = "::ffff:192.168.20.34",
+ .addr_len = 32,
+ .address_family = AF_INET6,
+ .expect_rc = 20,
+ .expect_returned_addr = "::ffff:192.168.20.34",
+ }
};
static void osmo_sockaddr_to_str_and_uint_test(void)
@@ -846,22 +919,35 @@ static void osmo_sockaddr_to_str_and_uint_test(void)
struct osmo_sockaddr_to_str_and_uint_test_case *t =
&osmo_sockaddr_to_str_and_uint_test_data[i];
- struct sockaddr_in sin = {
- .sin_family = AF_INET,
- .sin_port = htons(t->port),
- };
- inet_aton(t->addr, &sin.sin_addr);
+ struct sockaddr_storage sa;
+ struct sockaddr_in *sin;
+ struct sockaddr_in6 *sin6;
+ sa.ss_family = t->address_family;
+ switch (t->address_family) {
+ case AF_INET:
+ sin = (struct sockaddr_in *)&sa;
+ OSMO_ASSERT(inet_pton(t->address_family, t->addr, &sin->sin_addr) == 1);
+ sin->sin_port = htons(t->port);
+ break;
+ case AF_INET6:
+ sin6 = (struct sockaddr_in6 *)&sa;
+ OSMO_ASSERT(inet_pton(t->address_family, t->addr, &sin6->sin6_addr) == 1);
+ sin6->sin6_port = htons(t->port);
+ break;
+ default:
+ OSMO_ASSERT(0);
+ }
- char addr[20] = {};
+ char addr[INET6_ADDRSTRLEN] = {};
uint16_t port = 0;
unsigned int rc;
rc = osmo_sockaddr_to_str_and_uint(
t->omit_addr? NULL : addr, t->addr_len,
t->omit_port? NULL : &port,
- (const struct sockaddr*)&sin);
+ (const struct sockaddr *)&sa);
- printf("[%d] %s:%u%s%s addr_len=%u --> %s:%u rc=%u\n",
+ printf("[%d] [%s]:%u%s%s addr_len=%u --> [%s]:%u rc=%u\n",
i,
t->addr ? : "-",
t->port,
diff --git a/tests/utils/utils_test.ok b/tests/utils/utils_test.ok
index cbab72a9..f1b07fa8 100644
--- a/tests/utils/utils_test.ok
+++ b/tests/utils/utils_test.ok
@@ -355,14 +355,22 @@ strcmp("NULL", osmo_quote_cstr_c(ctx, NULL, -1)) == 0
Testing integer square-root
osmo_sockaddr_to_str_and_uint_test
-[0] 0.0.0.0:0 addr_len=20 --> 0.0.0.0:0 rc=7
-[1] 255.255.255.255:65535 addr_len=20 --> 255.255.255.255:65535 rc=15
-[2] 234.23.42.123:1234 addr_len=20 --> 234.23.42.123:1234 rc=13
-[3] 234.23.42.123:1234 addr_len=10 --> 234.23.42:1234 rc=13
-[4] 234.23.42.123:1234 (omit port) addr_len=20 --> 234.23.42.123:0 rc=13
-[5] 234.23.42.123:1234 (omit addr) addr_len=0 --> :1234 rc=0
-[6] 234.23.42.123:1234 addr_len=0 --> :1234 rc=13
-[7] 234.23.42.123:1234 (omit addr) (omit port) addr_len=0 --> :0 rc=0
+[0] [0.0.0.0]:0 addr_len=20 --> [0.0.0.0]:0 rc=7
+[1] [255.255.255.255]:65535 addr_len=20 --> [255.255.255.255]:65535 rc=15
+[2] [234.23.42.123]:1234 addr_len=20 --> [234.23.42.123]:1234 rc=13
+[3] [234.23.42.123]:1234 addr_len=10 --> [234.23.42]:1234 rc=13
+[4] [234.23.42.123]:1234 (omit port) addr_len=20 --> [234.23.42.123]:0 rc=13
+[5] [234.23.42.123]:1234 (omit addr) addr_len=0 --> []:1234 rc=0
+[6] [234.23.42.123]:1234 addr_len=0 --> []:1234 rc=13
+[7] [234.23.42.123]:1234 (omit addr) (omit port) addr_len=0 --> []:0 rc=0
+[8] [::]:1234 addr_len=20 --> [::]:1234 rc=2
+[9] [::1]:1234 addr_len=20 --> [::1]:1234 rc=3
+[10] [::1]:1234 (omit port) addr_len=20 --> [::1]:0 rc=3
+[11] [::1]:1234 (omit addr) addr_len=20 --> []:1234 rc=0
+[12] [fd02:db8:1::1]:1234 addr_len=20 --> [fd02:db8:1::1]:1234 rc=13
+[13] [2001:db8:1::ab9:C0A8:102]:1234 addr_len=40 --> [2001:db8:1::ab9:c0a8:102]:1234 rc=24
+[14] [2001:0db8:0001:0000:0000:0ab9:C0A8:0102]:1234 addr_len=32 --> [2001:db8:1::ab9:c0a8:102]:1234 rc=24
+[15] [::ffff:192.168.20.34]:1234 addr_len=32 --> [::ffff:192.168.20.34]:1234 rc=20
osmo_str_tolowupper_test
osmo_str_tolower("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()")