46 int res = AST_TEST_PASS;
49 {
"10.255.255.254", 1 },
56 {
"1.2.3.4:5060", 1 },
57 {
"::ffff:5.6.7.8", 1 },
58 {
"fdf8:f53b:82e4::53", 1 },
59 {
"fe80::200:5aee:feaa:20a2", 1 },
61 {
"2001:0000:4136:e378:8000:63bf:3fff:fdd2", 1 },
62 {
"2001:0002:6c::430", 1 },
63 {
"2001:10:240:ab::a", 1 },
64 {
"2002:cb0a:3cdd:1::1", 1 },
65 {
"2001:db8:8:4::2", 1 },
66 {
"ff01:0:0:0:0:0:0:2", 1 },
67 {
"[fdf8:f53b:82e4::53]", 1 },
68 {
"[fe80::200:5aee:feaa:20a2]", 1 },
70 {
"[2001:0000:4136:e378:8000:63bf:3fff:fdd2]:5060", 1 },
71 {
"2001:0000:4136:e378:8000:63bf:3fff:fdd2:5060", 0 },
72 {
"fe80::200::abcd", 0 },
81 info->name =
"parsing";
82 info->category =
"/main/netsock2/";
83 info->summary =
"netsock2 parsing unit test";
85 "Test parsing of IPv4 and IPv6 network addresses";
86 return AST_TEST_NOT_RUN;
91 for (x = 0; x < ARRAY_LEN(test_vals); x++) {
92 memset(&addr, 0,
sizeof(addr));
93 if ((parse_result =
ast_sockaddr_parse(&addr, test_vals[x].address, 0)) != test_vals[x].expected_result) {
94 ast_test_status_update(
test,
"On '%s' expected %d but got %d\n", test_vals[x].address, test_vals[x].expected_result, parse_result);
102 memset(&tmp_addr, 0,
sizeof(tmp_addr));
107 ast_test_status_update(
test,
"Re-parsed stringification of '%s' did not match: '%s' vs '%s'\n", test_vals[x].address, buf,
ast_sockaddr_stringify(&tmp_addr));
118 int res = AST_TEST_PASS;
119 char *host, *port, buf[128];
123 info->name =
"split_hostport";
124 info->category =
"/main/netsock2/";
125 info->summary =
"netsock2 ast_sockaddr_split_hostport() unit test";
127 "Test splitting of IPv4 and IPv6 host:port strings";
128 return AST_TEST_NOT_RUN;
134 #define TEST_SPLIT_HOSTPORT(str, flags, expected_host, expected_port, expected_result) { \
136 ast_copy_string(buf, str, sizeof(buf)); \
137 if ((__res = ast_sockaddr_split_hostport(buf, &host, &port, flags)) != expected_result || ( \
138 expected_result && ( \
139 strcmp(host, expected_host) || ( \
140 ast_strlen_zero(expected_port) ? !ast_strlen_zero(port) : (!ast_strlen_zero(port) && strcmp(port, expected_port)) \
145 res = AST_TEST_FAIL; \
146 if (__res != expected_result) { \
147 ast_test_status_update(test, "Expected %d, got %d\n", expected_result, __res); \
149 ast_test_status_update(test, "Failed parsing '%s' into expected host '%s' (got '%s') and port '%s' (got '%s')\n", \
150 str, S_OR(expected_host, ""), host, expected_port, S_OR(port, "")); \
156 TEST_SPLIT_HOSTPORT(
"192.168.1.1", 0,
"192.168.1.1",
"", 1);
157 TEST_SPLIT_HOSTPORT(
"192.168.1.1:5060", 0,
"192.168.1.1",
"5060", 1);
158 TEST_SPLIT_HOSTPORT(
"::ffff:5.6.7.8", 0,
"::ffff:5.6.7.8",
"", 1);
159 TEST_SPLIT_HOSTPORT(
"[::ffff:5.6.7.8]:5060", 0,
"::ffff:5.6.7.8",
"5060", 1);
160 TEST_SPLIT_HOSTPORT(
"fdf8:f53b:82e4::53", 0,
"fdf8:f53b:82e4::53",
"", 1);
161 TEST_SPLIT_HOSTPORT(
"fe80::200:5aee:feaa:20a2", 0,
"fe80::200:5aee:feaa:20a2",
"", 1);
162 TEST_SPLIT_HOSTPORT(
"[fdf8:f53b:82e4::53]", 0,
"fdf8:f53b:82e4::53",
"", 1);
163 TEST_SPLIT_HOSTPORT(
"[fe80::200:5aee:feaa:20a2]:5060", 0,
"fe80::200:5aee:feaa:20a2",
"5060", 1);
164 TEST_SPLIT_HOSTPORT(
"host:port", 0,
"host",
"port", 1);
165 TEST_SPLIT_HOSTPORT(
"host", 0,
"host",
"", 1);
168 TEST_SPLIT_HOSTPORT(
"192.168.1.1:5060", PARSE_PORT_IGNORE,
"192.168.1.1",
"", 1);
169 TEST_SPLIT_HOSTPORT(
"192.168.1.1:5060", PARSE_PORT_REQUIRE,
"192.168.1.1",
"5060", 1);
170 TEST_SPLIT_HOSTPORT(
"192.168.1.1", PARSE_PORT_FORBID,
"192.168.1.1",
"", 1);
171 TEST_SPLIT_HOSTPORT(
"[::ffff:5.6.7.8]:5060", PARSE_PORT_IGNORE,
"::ffff:5.6.7.8",
"", 1);
172 TEST_SPLIT_HOSTPORT(
"[::ffff:5.6.7.8]:5060", PARSE_PORT_REQUIRE,
"::ffff:5.6.7.8",
"5060", 1);
173 TEST_SPLIT_HOSTPORT(
"::ffff:5.6.7.8", PARSE_PORT_FORBID,
"::ffff:5.6.7.8",
"", 1);
176 TEST_SPLIT_HOSTPORT(
"192.168.1.1", PARSE_PORT_REQUIRE,
"<undefined>",
"<undefined>", 0);
177 TEST_SPLIT_HOSTPORT(
"192.168.1.1:5060", PARSE_PORT_FORBID,
"<undefined>",
"<undefined>", 0);
178 TEST_SPLIT_HOSTPORT(
"::ffff:5.6.7.8", PARSE_PORT_REQUIRE,
"<undefined>",
"<undefined>", 0);
179 TEST_SPLIT_HOSTPORT(
"[::ffff:5.6.7.8]:5060", PARSE_PORT_FORBID,
"<undefined>",
"<undefined>", 0);
184 static int unload_module(
void)
186 AST_TEST_UNREGISTER(parsing);
187 AST_TEST_UNREGISTER(split_hostport);
191 static int load_module(
void)
193 AST_TEST_REGISTER(parsing);
194 AST_TEST_REGISTER(split_hostport);
Asterisk main include file. File version handling, generic pbx functions.
int ast_sockaddr_parse(struct ast_sockaddr *addr, const char *str, int flags)
Parse an IPv4 or IPv6 address string.
Socket address structure.
int ast_sockaddr_cmp_addr(const struct ast_sockaddr *a, const struct ast_sockaddr *b)
Compares the addresses of two ast_sockaddr structures.
Configuration File Parser.
static char * ast_sockaddr_stringify(const struct ast_sockaddr *addr)
Wrapper around ast_sockaddr_stringify_fmt() with default format.
Support for logging to various files, console and syslog Configuration in file logger.conf.
void ast_copy_string(char *dst, const char *src, size_t size)
Size-limited null-terminating string copy.
#define AST_TEST_DEFINE(hdr)
#define ASTERISK_GPL_KEY
The text the key() function should return.
Asterisk module definitions.