Author: akhaldi
Date: Mon Apr 6 20:27:41 2015
New Revision: 67079
URL:
http://svn.reactos.org/svn/reactos?rev=67079&view=rev
Log:
[NTDLL_WINETEST] Add tests for RtlIpv6AddressToString(Ex) by Mark Jansen.
Modified:
trunk/rostests/winetests/ntdll/rtl.c
Modified: trunk/rostests/winetests/ntdll/rtl.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/ntdll/rtl.c?rev…
==============================================================================
--- trunk/rostests/winetests/ntdll/rtl.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/ntdll/rtl.c [iso-8859-1] Mon Apr 6 20:27:41 2015
@@ -93,6 +93,8 @@
static NTSTATUS (WINAPI *pRtlIpv4AddressToStringExA)(const IN_ADDR *, USHORT, LPSTR,
PULONG);
static NTSTATUS (WINAPI *pRtlIpv4StringToAddressA)(PCSTR, BOOLEAN, PCSTR *, IN_ADDR *);
static NTSTATUS (WINAPI *pRtlIpv4StringToAddressExA)(PCSTR, BOOLEAN, IN_ADDR *,
PUSHORT);
+static CHAR * (WINAPI *pRtlIpv6AddressToStringA)(struct in6_addr *, PSTR);
+static NTSTATUS (WINAPI *pRtlIpv6AddressToStringExA)(struct in6_addr *, ULONG, USHORT,
PCHAR, PULONG);
static NTSTATUS (WINAPI *pRtlIpv6StringToAddressA)(PCSTR, PCSTR *, struct in6_addr *);
static NTSTATUS (WINAPI *pRtlIpv6StringToAddressW)(PCWSTR, PCWSTR *, struct in6_addr
*);
static NTSTATUS (WINAPI *pRtlIpv6StringToAddressExA)(PCSTR, struct in6_addr *, PULONG,
PUSHORT);
@@ -152,6 +154,8 @@
pRtlIpv4AddressToStringExA = (void *)GetProcAddress(hntdll,
"RtlIpv4AddressToStringExA");
pRtlIpv4StringToAddressA = (void *)GetProcAddress(hntdll,
"RtlIpv4StringToAddressA");
pRtlIpv4StringToAddressExA = (void *)GetProcAddress(hntdll,
"RtlIpv4StringToAddressExA");
+ pRtlIpv6AddressToStringA = (void *)GetProcAddress(hntdll,
"RtlIpv6AddressToStringA");
+ pRtlIpv6AddressToStringExA = (void *)GetProcAddress(hntdll,
"RtlIpv6AddressToStringExA");
pRtlIpv6StringToAddressA = (void *)GetProcAddress(hntdll,
"RtlIpv6StringToAddressA");
pRtlIpv6StringToAddressW = (void *)GetProcAddress(hntdll,
"RtlIpv6StringToAddressW");
pRtlIpv6StringToAddressExA = (void *)GetProcAddress(hntdll,
"RtlIpv6StringToAddressExA");
@@ -1968,6 +1972,246 @@
}
}
+static void test_RtlIpv6AddressToString(void)
+{
+ CHAR buffer[50];
+ LPCSTR result;
+ IN6_ADDR ip;
+ DWORD_PTR len;
+ struct
+ {
+ PCSTR address;
+ int ip[8];
+ } tests[] =
+ {
+ /* ipv4 addresses & ISATAP addresses */
+ { "::13.1.68.3", { 0, 0, 0, 0, 0, 0,
0x10d, 0x344 } },
+ { "::ffff:13.1.68.3", { 0, 0, 0, 0, 0,
0xffff, 0x10d, 0x344 } },
+ { "::feff:d01:4403", { 0, 0, 0, 0, 0,
0xfffe, 0x10d, 0x344 } },
+ { "::fffe:d01:4403", { 0, 0, 0, 0, 0,
0xfeff, 0x10d, 0x344 } },
+ { "::100:d01:4403", { 0, 0, 0, 0, 0, 1,
0x10d, 0x344 } },
+ { "::1:d01:4403", { 0, 0, 0, 0, 0, 0x100,
0x10d, 0x344 } },
+ { "::ffff:0:4403", { 0, 0, 0, 0, 0,
0xffff, 0, 0x344 } },
+ { "::ffff:13.1.0.0", { 0, 0, 0, 0, 0,
0xffff, 0x10d, 0 } },
+ { "::ffff:0:0", { 0, 0, 0, 0, 0,
0xffff, 0, 0 } },
+ { "::ffff:0:13.1.68.3", { 0, 0, 0, 0, 0xffff,
0, 0x10d, 0x344 } },
+ { "::ffff:ffff:d01:4403", { 0, 0, 0, 0, 0xffff,
0xffff, 0x10d, 0x344 } },
+ { "::ffff:0:0:d01:4403", { 0, 0, 0, 0xffff, 0,
0, 0x10d, 0x344 } },
+ { "::ffff:255.255.255.255", { 0, 0, 0, 0, 0,
0xffff, 0xffff, 0xffff } },
+ { "::ffff:129.144.52.38", { 0, 0, 0, 0, 0,
0xffff, 0x9081, 0x2634 } },
+ { "::5efe:129.144.52.38", { 0, 0, 0, 0, 0,
0xfe5e, 0x9081, 0x2634 } },
+ { "1111:2222:3333:4444:0:5efe:129.144.52.38", { 0x1111, 0x2222,
0x3333, 0x4444, 0, 0xfe5e, 0x9081, 0x2634 } },
+ { "1111:2222:3333::5efe:129.144.52.38", { 0x1111, 0x2222,
0x3333, 0, 0, 0xfe5e, 0x9081, 0x2634 } },
+ { "1111:2222::5efe:129.144.52.38", { 0x1111, 0x2222, 0, 0,
0, 0xfe5e, 0x9081, 0x2634 } },
+ { "1111::5efe:129.144.52.38", { 0x1111, 0, 0, 0, 0,
0xfe5e, 0x9081, 0x2634 } },
+ { "::200:5efe:129.144.52.38", { 0, 0, 0, 0, 2,
0xfe5e, 0x9081, 0x2634 } },
+ { "::100:5efe:8190:3426", { 0, 0, 0, 0, 1,
0xfe5e, 0x9081, 0x2634 } },
+ /* 'normal' addresses */
+ { "::1", { 0, 0, 0, 0, 0, 0, 0,
0x100 } },
+ { "0:1:2:3:4:5:6:7", { 0, 0x100, 0x200,
0x300, 0x400, 0x500, 0x600, 0x700 } },
+ { "1080::8:800:200c:417a", { 0x8010, 0, 0, 0,
0x800, 0x8, 0x0c20, 0x7a41 } },
+ { "1111:2222:3333:4444:5555:6666:7b7b:7b7b", { 0x1111, 0x2222,
0x3333, 0x4444, 0x5555, 0x6666, 0x7b7b, 0x7b7b } },
+ { "1111:2222:3333:4444:5555:6666:7777:8888", { 0x1111, 0x2222,
0x3333, 0x4444, 0x5555, 0x6666, 0x7777, 0x8888 } },
+ { "1111:2222:3333:4444:5555:6666::", { 0x1111, 0x2222,
0x3333, 0x4444, 0x5555, 0x6666, 0, 0 } },
+ { "1111:2222:3333:4444:5555:6666:0:8888", { 0x1111, 0x2222,
0x3333, 0x4444, 0x5555, 0x6666, 0, 0x8888 } },
+ { "1111:2222:3333:4444:5555::", { 0x1111, 0x2222,
0x3333, 0x4444, 0x5555, 0, 0, 0 } },
+ { "1111:2222:3333:4444:5555:0:7b7b:7b7b", { 0x1111, 0x2222,
0x3333, 0x4444, 0x5555, 0, 0x7b7b, 0x7b7b } },
+ { "1111:2222:3333:4444:5555:0:7777:8888", { 0x1111, 0x2222,
0x3333, 0x4444, 0x5555, 0, 0x7777, 0x8888 } },
+ { "1111:2222:3333:4444:5555::8888", { 0x1111, 0x2222,
0x3333, 0x4444, 0x5555, 0, 0, 0x8888 } },
+ { "1111::", { 0x1111, 0, 0, 0, 0,
0, 0, 0 } },
+ { "1111::7b7b:7b7b", { 0x1111, 0, 0, 0, 0,
0, 0x7b7b, 0x7b7b } },
+ { "1111:0:3333:4444:5555:6666:7b7b:7b7b", { 0x1111, 0, 0x3333,
0x4444, 0x5555, 0x6666, 0x7b7b, 0x7b7b } },
+ { "1111:0:3333:4444:5555:6666:7777:8888", { 0x1111, 0, 0x3333,
0x4444, 0x5555, 0x6666, 0x7777, 0x8888 } },
+ { "1111::4444:5555:6666:7b7b:7b7b", { 0x1111, 0, 0, 0x4444,
0x5555, 0x6666, 0x7b7b, 0x7b7b } },
+ { "1111::4444:5555:6666:7777:8888", { 0x1111, 0, 0, 0x4444,
0x5555, 0x6666, 0x7777, 0x8888 } },
+ { "1111::5555:6666:7b7b:7b7b", { 0x1111, 0, 0, 0,
0x5555, 0x6666, 0x7b7b, 0x7b7b } },
+ { "1111::5555:6666:7777:8888", { 0x1111, 0, 0, 0,
0x5555, 0x6666, 0x7777, 0x8888 } },
+ { "1111::6666:7b7b:7b7b", { 0x1111, 0, 0, 0, 0,
0x6666, 0x7b7b, 0x7b7b } },
+ { "1111::6666:7777:8888", { 0x1111, 0, 0, 0, 0,
0x6666, 0x7777, 0x8888 } },
+ { "1111::7777:8888", { 0x1111, 0, 0, 0, 0,
0, 0x7777, 0x8888 } },
+ { "1111::8888", { 0x1111, 0, 0, 0, 0,
0, 0, 0x8888 } },
+ { "1:2:3:4:5:6:102:304", { 0x100, 0x200, 0x300,
0x400, 0x500, 0x600, 0x201, 0x403 } },
+ { "1:2:3:4:5:6:7:8", { 0x100, 0x200, 0x300,
0x400, 0x500, 0x600, 0x700, 0x800 } },
+ { "1:2:3:4:5:6::", { 0x100, 0x200, 0x300,
0x400, 0x500, 0x600, 0, 0 } },
+ { "1:2:3:4:5:6:0:8", { 0x100, 0x200, 0x300,
0x400, 0x500, 0x600, 0, 0x800 } },
+ { "2001:0:1234::c1c0:abcd:876", { 0x120, 0, 0x3412, 0,
0, 0xc0c1, 0xcdab, 0x7608 } },
+ { "2001:0:4136:e378:8000:63bf:3fff:fdd2", { 0x120, 0, 0x3641,
0x78e3, 0x80, 0xbf63, 0xff3f, 0xd2fd } },
+ { "2001:db8::1428:57ab", { 0x120, 0xb80d, 0, 0,
0, 0, 0x2814, 0xab57 } },
+ { "2001:db8:1234:ffff:ffff:ffff:ffff:ffff", { 0x120, 0xb80d,
0x3412, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff } },
+ { "2001:0:ce49:7601:2cad:dfff:7c94:fffe", { 0x120, 0, 0x49ce,
0x176, 0xad2c, 0xffdf, 0x947c, 0xfeff } },
+ { "2001:db8:85a3::8a2e:370:7334", { 0x120, 0xb80d,
0xa385, 0, 0, 0x2e8a, 0x7003, 0x3473 } },
+ { "3ffe:b00::1:0:0:a", { 0xfe3f, 0xb, 0, 0,
0x100, 0, 0, 0xa00 } },
+ { "::a:b:c:d:e", { 0, 0, 0, 0xa00,
0xb00, 0xc00, 0xd00, 0xe00 } },
+ { "::123.123.123.123", { 0, 0, 0, 0, 0, 0,
0x7b7b, 0x7b7b } },
+ { "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", { 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff } },
+ { "1111:2222:3333:4444:5555:6666:7777:1", { 0x1111, 0x2222,
0x3333, 0x4444, 0x5555, 0x6666, 0x7777, 0x100 } },
+ { "1111:2222:3333:4444:5555:6666:7777:8888", { 0x1111, 0x2222,
0x3333, 0x4444, 0x5555, 0x6666, 0x7777, 0x8888 } },
+ { "1111:2222::", { 0x1111, 0x2222, 0, 0,
0, 0, 0, 0 } },
+ { "1111::3333:4444:5555:6666:7777", { 0x1111, 0, 0, 0x3333,
0x4444, 0x5555, 0x6666, 0x7777 } },
+ { "1111:2222::", { 0x1111, 0x2222, 0, 0,
0, 0, 0, 0 } },
+ { "1111::3333", { 0x1111, 0, 0, 0, 0,
0, 0, 0x3333 } },
+ { "2001:0:1234::c1c0:abcd:876", { 0x120, 0, 0x3412, 0,
0, 0xc0c1, 0xcdab, 0x7608 } },
+ { "2001::ffd3", { 0x120, 0, 0, 0, 0, 0,
0, 0xd3ff } },
+ };
+ const size_t testcount = sizeof(tests) / sizeof(tests[0]);
+ unsigned int i;
+
+ if (!pRtlIpv6AddressToStringA)
+ {
+ skip("RtlIpv6AddressToStringA not available\n");
+ return;
+ }
+
+ memset(buffer, '#', sizeof(buffer));
+ buffer[sizeof(buffer)-1] = 0;
+ memset(&ip, 0, sizeof(ip));
+ result = pRtlIpv6AddressToStringA(&ip, buffer);
+
+ len = strlen(buffer);
+ ok(result == (buffer + len) && !strcmp(buffer, "::"),
+ "got %p with '%s' (expected %p with '::')\n", result,
buffer, buffer + len);
+
+ result = pRtlIpv6AddressToStringA(&ip, NULL);
+ ok(result == (LPCSTR)~0 || broken(result == (LPCSTR)len) /* WinXP / Win2k3 */,
+ "got %p, expected %p\n", result, (LPCSTR)~0);
+
+ for (i = 0; i < testcount; i++)
+ {
+ init_ip6(&ip, tests[i].ip);
+ memset(buffer, '#', sizeof(buffer));
+ buffer[sizeof(buffer)-1] = 0;
+
+ result = pRtlIpv6AddressToStringA(&ip, buffer);
+ len = strlen(buffer);
+ ok(result == (buffer + len) && !strcmp(buffer, tests[i].address),
+ "got %p with '%s' (expected %p with '%s')\n",
result, buffer, buffer + len, tests[i].address);
+
+ ok(buffer[45] == 0 || broken(buffer[45] != 0) /* WinXP / Win2k3 */,
+ "expected data at buffer[45] to always be NULL\n");
+ ok(buffer[46] == '#', "expected data at buffer[46] not to
change\n");
+ }
+}
+
+static void test_RtlIpv6AddressToStringEx(void)
+{
+ CHAR buffer[70];
+ NTSTATUS res;
+ IN6_ADDR ip;
+ ULONG len;
+ struct
+ {
+ PCSTR address;
+ ULONG scopeid;
+ USHORT port;
+ int ip[8];
+ } tests[] =
+ {
+ /* ipv4 addresses & ISATAP addresses */
+ { "::13.1.68.3", 0,
0, { 0, 0, 0, 0, 0, 0, 0x10d, 0x344 } },
+ { "::13.1.68.3%1", 1,
0, { 0, 0, 0, 0, 0, 0, 0x10d, 0x344 } },
+ { "::13.1.68.3%4294949819",
0xffffbbbb, 0, { 0, 0, 0, 0, 0, 0, 0x10d, 0x344 } },
+ { "[::13.1.68.3%4294949819]:65518",
0xffffbbbb, 0xeeff, { 0, 0, 0, 0, 0, 0, 0x10d, 0x344 } },
+ { "[::13.1.68.3%4294949819]:256",
0xffffbbbb, 1, { 0, 0, 0, 0, 0, 0, 0x10d, 0x344 } },
+ { "[::13.1.68.3]:256", 0,
1, { 0, 0, 0, 0, 0, 0, 0x10d, 0x344 } },
+
+ { "::1:d01:4403", 0,
0, { 0, 0, 0, 0, 0, 0x100, 0x10d, 0x344 } },
+ { "::1:d01:4403%1", 1,
0, { 0, 0, 0, 0, 0, 0x100, 0x10d, 0x344 } },
+ { "::1:d01:4403%4294949819",
0xffffbbbb, 0, { 0, 0, 0, 0, 0, 0x100, 0x10d, 0x344 } },
+ { "[::1:d01:4403%4294949819]:65518",
0xffffbbbb, 0xeeff, { 0, 0, 0, 0, 0, 0x100, 0x10d, 0x344 } },
+ { "[::1:d01:4403%4294949819]:256",
0xffffbbbb, 1, { 0, 0, 0, 0, 0, 0x100, 0x10d, 0x344 } },
+ { "[::1:d01:4403]:256", 0,
1, { 0, 0, 0, 0, 0, 0x100, 0x10d, 0x344 } },
+
+ { "1111:2222:3333:4444:0:5efe:129.144.52.38", 0,
0, { 0x1111, 0x2222, 0x3333, 0x4444, 0, 0xfe5e, 0x9081, 0x2634 } },
+ { "1111:2222:3333:4444:0:5efe:129.144.52.38%1", 1,
0, { 0x1111, 0x2222, 0x3333, 0x4444, 0, 0xfe5e, 0x9081, 0x2634 } },
+ { "1111:2222:3333:4444:0:5efe:129.144.52.38%4294949819",
0xffffbbbb, 0, { 0x1111, 0x2222, 0x3333, 0x4444, 0, 0xfe5e, 0x9081, 0x2634 } },
+ {
"[1111:2222:3333:4444:0:5efe:129.144.52.38%4294949819]:65518",0xffffbbbb,
0xeeff, { 0x1111, 0x2222, 0x3333, 0x4444, 0, 0xfe5e, 0x9081, 0x2634 } },
+ { "[1111:2222:3333:4444:0:5efe:129.144.52.38%4294949819]:256",
0xffffbbbb, 1, { 0x1111, 0x2222, 0x3333, 0x4444, 0, 0xfe5e, 0x9081, 0x2634 } },
+ { "[1111:2222:3333:4444:0:5efe:129.144.52.38]:256", 0,
1, { 0x1111, 0x2222, 0x3333, 0x4444, 0, 0xfe5e, 0x9081, 0x2634 } },
+
+ { "::1", 0,
0, { 0, 0, 0, 0, 0, 0, 0, 0x100 } },
+ { "::1%1", 1,
0, { 0, 0, 0, 0, 0, 0, 0, 0x100 } },
+ { "::1%4294949819",
0xffffbbbb, 0, { 0, 0, 0, 0, 0, 0, 0, 0x100 } },
+ { "[::1%4294949819]:65518",
0xffffbbbb, 0xeeff, { 0, 0, 0, 0, 0, 0, 0, 0x100 } },
+ { "[::1%4294949819]:256",
0xffffbbbb, 1, { 0, 0, 0, 0, 0, 0, 0, 0x100 } },
+ { "[::1]:256", 0,
1, { 0, 0, 0, 0, 0, 0, 0, 0x100 } },
+
+ { "1111:2222:3333:4444:5555:6666:7b7b:7b7b", 0,
0, { 0x1111, 0x2222, 0x3333, 0x4444, 0x5555, 0x6666, 0x7b7b, 0x7b7b } },
+ { "1111:2222:3333:4444:5555:6666:7b7b:7b7b%1", 1,
0, { 0x1111, 0x2222, 0x3333, 0x4444, 0x5555, 0x6666, 0x7b7b, 0x7b7b } },
+ { "1111:2222:3333:4444:5555:6666:7b7b:7b7b%4294949819",
0xffffbbbb, 0, { 0x1111, 0x2222, 0x3333, 0x4444, 0x5555, 0x6666, 0x7b7b, 0x7b7b } },
+ { "[1111:2222:3333:4444:5555:6666:7b7b:7b7b%4294949819]:65518",
0xffffbbbb, 0xeeff, { 0x1111, 0x2222, 0x3333, 0x4444, 0x5555, 0x6666, 0x7b7b, 0x7b7b } },
+ { "[1111:2222:3333:4444:5555:6666:7b7b:7b7b%4294949819]:256",
0xffffbbbb, 1, { 0x1111, 0x2222, 0x3333, 0x4444, 0x5555, 0x6666, 0x7b7b, 0x7b7b } },
+ { "[1111:2222:3333:4444:5555:6666:7b7b:7b7b]:256", 0,
1, { 0x1111, 0x2222, 0x3333, 0x4444, 0x5555, 0x6666, 0x7b7b, 0x7b7b } },
+
+ { "1111::", 0,
0, { 0x1111, 0, 0, 0, 0, 0, 0, 0 } },
+ { "1111::%1", 1,
0, { 0x1111, 0, 0, 0, 0, 0, 0, 0 } },
+ { "1111::%4294949819",
0xffffbbbb, 0, { 0x1111, 0, 0, 0, 0, 0, 0, 0 } },
+ { "[1111::%4294949819]:65518",
0xffffbbbb, 0xeeff, { 0x1111, 0, 0, 0, 0, 0, 0, 0 } },
+ { "[1111::%4294949819]:256",
0xffffbbbb, 1, { 0x1111, 0, 0, 0, 0, 0, 0, 0 } },
+ { "[1111::]:256", 0,
1, { 0x1111, 0, 0, 0, 0, 0, 0, 0 } },
+
+ { "2001::ffd3", 0,
0, { 0x120, 0, 0, 0, 0, 0, 0, 0xd3ff } },
+ { "2001::ffd3%1", 1,
0, { 0x120, 0, 0, 0, 0, 0, 0, 0xd3ff } },
+ { "2001::ffd3%4294949819",
0xffffbbbb, 0, { 0x120, 0, 0, 0, 0, 0, 0, 0xd3ff } },
+ { "[2001::ffd3%4294949819]:65518",
0xffffbbbb, 0xeeff, { 0x120, 0, 0, 0, 0, 0, 0, 0xd3ff } },
+ { "[2001::ffd3%4294949819]:256",
0xffffbbbb, 1, { 0x120, 0, 0, 0, 0, 0, 0, 0xd3ff } },
+ { "[2001::ffd3]:256", 0,
1, { 0x120, 0, 0, 0, 0, 0, 0, 0xd3ff } },
+ };
+ const size_t testcount = sizeof(tests) / sizeof(tests[0]);
+ unsigned int i;
+
+ if (!pRtlIpv6AddressToStringExA)
+ {
+ skip("RtlIpv6AddressToStringExA not available\n");
+ return;
+ }
+
+ memset(buffer, '#', sizeof(buffer));
+ buffer[sizeof(buffer)-1] = 0;
+ memset(&ip, 0, sizeof(ip));
+ len = sizeof(buffer);
+ res = pRtlIpv6AddressToStringExA(&ip, 0, 0, buffer, &len);
+
+ ok(res == STATUS_SUCCESS, "[validate] res = 0x%08x, expected
STATUS_SUCCESS\n", res);
+ ok(len == 3 && !strcmp(buffer, "::"),
+ "got len %d with '%s' (expected 3 with '::')\n", len,
buffer);
+
+ memset(buffer, '#', sizeof(buffer));
+ buffer[sizeof(buffer)-1] = 0;
+
+ len = sizeof(buffer);
+ res = pRtlIpv6AddressToStringExA(NULL, 0, 0, buffer, &len);
+ ok(res == STATUS_INVALID_PARAMETER, "[null ip] res = 0x%08x, expected
STATUS_INVALID_PARAMETER\n", res);
+
+ len = sizeof(buffer);
+ res = pRtlIpv6AddressToStringExA(&ip, 0, 0, NULL, &len);
+ ok(res == STATUS_INVALID_PARAMETER, "[null buffer] res = 0x%08x, expected
STATUS_INVALID_PARAMETER\n", res);
+
+ res = pRtlIpv6AddressToStringExA(&ip, 0, 0, buffer, NULL);
+ ok(res == STATUS_INVALID_PARAMETER, "[null length] res = 0x%08x, expected
STATUS_INVALID_PARAMETER\n", res);
+
+ len = 2;
+ memset(buffer, '#', sizeof(buffer));
+ buffer[sizeof(buffer)-1] = 0;
+ res = pRtlIpv6AddressToStringExA(&ip, 0, 0, buffer, &len);
+ ok(res == STATUS_INVALID_PARAMETER, "[null length] res = 0x%08x, expected
STATUS_INVALID_PARAMETER\n", res);
+ ok(buffer[0] == '#', "got first char %c (expected '#')\n",
buffer[0]);
+ ok(len == 3, "got len %d (expected len 3)\n", len);
+
+ for (i = 0; i < testcount; i++)
+ {
+ init_ip6(&ip, tests[i].ip);
+ len = sizeof(buffer);
+ memset(buffer, '#', sizeof(buffer));
+ buffer[sizeof(buffer)-1] = 0;
+
+ res = pRtlIpv6AddressToStringExA(&ip, tests[i].scopeid, tests[i].port,
buffer, &len);
+
+ ok(res == STATUS_SUCCESS, "[validate] res = 0x%08x, expected
STATUS_SUCCESS\n", res);
+ ok(len == (strlen(tests[i].address) + 1) && !strcmp(buffer,
tests[i].address),
+ "got len %d with '%s' (expected %d with '%s')\n",
len, buffer, strlen(tests[i].address), tests[i].address);
+ }
+}
+
static void compare_RtlIpv6StringToAddressW(PCSTR name_a, int terminator_offset_a,
const struct in6_addr *addr_a, NTSTATUS
res_a)
{
@@ -3223,6 +3467,8 @@
test_RtlIpv4AddressToStringEx();
test_RtlIpv4StringToAddress();
test_RtlIpv4StringToAddressEx();
+ test_RtlIpv6AddressToString();
+ test_RtlIpv6AddressToStringEx();
test_RtlIpv6StringToAddress();
test_RtlIpv6StringToAddressEx();
test_LdrAddRefDll();