diff options
author | Max <msuraev@sysmocom.de> | 2022-08-07 00:40:48 +0700 |
---|---|---|
committer | Max <msuraev@sysmocom.de> | 2022-08-14 12:21:12 +0700 |
commit | e145e28a91eeca65d34d7b82caa2190fa89492b4 (patch) | |
tree | d90cae03b92eb4c5cca073075e6ca9e0914c9401 /tests | |
parent | 18c6a8183f92915e77368ecffb1cbf7f555453a3 (diff) |
Add osmo_sockaddr_strs_to_str()
This will come in handy for working with multihomes sockets like SCTP.
Related: OS#5581
Change-Id: Ic0d7c08f669994e37a2314555ecac85d28c42c89
Diffstat (limited to 'tests')
-rw-r--r-- | tests/sockaddr_str/sockaddr_str_test.c | 59 | ||||
-rw-r--r-- | tests/sockaddr_str/sockaddr_str_test.ok | 6 |
2 files changed, 63 insertions, 2 deletions
diff --git a/tests/sockaddr_str/sockaddr_str_test.c b/tests/sockaddr_str/sockaddr_str_test.c index 0d0674b6..8077b9a6 100644 --- a/tests/sockaddr_str/sockaddr_str_test.c +++ b/tests/sockaddr_str/sockaddr_str_test.c @@ -24,7 +24,10 @@ #include <errno.h> #include <string.h> #include <osmocom/core/sockaddr_str.h> +#include <osmocom/core/application.h> +#include <osmocom/core/logging.h> #include <osmocom/core/utils.h> +#include <osmocom/core/socket.h> #include <netinet/in.h> struct osmo_sockaddr_str oip_data[] = { @@ -259,10 +262,62 @@ static void test_osmo_sockaddr_str_cmp() } } +static int test_sockaddr_strs_dump(void *ctx, struct osmo_sockaddr_str *xdata, size_t count) +{ + char buf[OSMO_SOCK_NAME_MAXLEN * OSMO_SOCK_MAX_ADDRS * 2]; + struct osmo_sockaddr_str *sa_strs[OSMO_SOCK_MAX_ADDRS]; + int i, j, rc; + + for (i = 0, j = 0; j < count && i < OSMO_SOCK_MAX_ADDRS; j++) {//ARRAY_SIZE(oip_data) + sa_strs[i] = talloc_zero(ctx, struct osmo_sockaddr_str); + struct sockaddr_storage tmp; + if (osmo_sockaddr_str_to_sockaddr(&xdata[j], &tmp) == 0) {//&oip_data[j] + rc = osmo_sockaddr_str_from_sockaddr(sa_strs[i], &tmp); + if (rc < 0) { + printf("osmo_sockaddr_str_from_sockaddr(%d) failed on ", i); + dump_oip(&xdata[j]);//&oip_data[j] + return rc; + } + i++; + } + } + rc = osmo_sockaddr_strs_to_str(buf, sizeof(buf), (const struct osmo_sockaddr_str **)sa_strs, i); + printf("\nTest data [%d == %ld]: %s\n", rc, strlen(buf), buf); + return rc; +} + +const struct log_info_cat default_categories[] = { +}; + +static struct log_info info = { + .cat = default_categories, + .num_cat = ARRAY_SIZE(default_categories), +}; + int main(int argc, char **argv) { + int rc; + void *ctx = talloc_named_const(NULL, 0, "sockaddr_str__test"); + osmo_init_logging2(ctx, &info); + log_set_use_color(osmo_stderr_target, 0); + log_set_print_filename2(osmo_stderr_target, LOG_FILENAME_NONE); + log_set_print_category(osmo_stderr_target, 0); + log_set_print_category_hex(osmo_stderr_target, 0); + sockaddr_str_test_conversions(); test_osmo_sockaddr_str_cmp(); - return 0; -} + rc = test_sockaddr_strs_dump(ctx, oip_data, ARRAY_SIZE(oip_data)); + if (rc < 0) + return EXIT_FAILURE; + + rc = test_sockaddr_strs_dump(ctx, oip_data, 1); + if (rc < 0) + return EXIT_FAILURE; + + rc = test_sockaddr_strs_dump(ctx, oip_data, 0); + if (rc < 0) + return EXIT_FAILURE; + + return EXIT_SUCCESS; +} diff --git a/tests/sockaddr_str/sockaddr_str_test.ok b/tests/sockaddr_str/sockaddr_str_test.ok index 910e9195..504231c4 100644 --- a/tests/sockaddr_str/sockaddr_str_test.ok +++ b/tests/sockaddr_str/sockaddr_str_test.ok @@ -937,3 +937,9 @@ test_osmo_sockaddr_str_cmp osmo_sockaddr_str_cmp(): [0::]:5(zero) > 0.0.0.0:5(zero) osmo_sockaddr_str_cmp(): [0::]:5(zero) == [::]:5(zero) osmo_sockaddr_str_cmp(): [0::]:5(zero) == [0::]:5(zero) + +Test data [179 == 179]: (1.2.3.4|0.0.0.0|255.255.255.255|[1:2:3::4]|[::]|[::1]|[ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]|[ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]|1.2.3.4|[::1:a09:807]|0.0.0.0|[::]|[::]) + +Test data [7 == 7]: 1.2.3.4 + +Test data [2 == 2]: () |