2 * Tests for name handling functions
4 * Copyright 2006 Hans Leidekker
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
28 #include "wine/test.h"
30 static HMODULE dnsapi
;
32 static BOOL (WINAPI
*pDnsNameCompare_A
)(LPSTR
,LPSTR
);
33 static DNS_STATUS (WINAPI
*pDnsValidateName_A
)(LPCSTR
,DNS_NAME_FORMAT
);
35 #define GETFUNCPTR(func) p##func = (void *)GetProcAddress( dnsapi, #func ); \
36 if (!p##func) return FALSE;
38 static BOOL
init_function_ptrs( void )
40 GETFUNCPTR( DnsNameCompare_A
)
41 GETFUNCPTR( DnsValidateName_A
)
48 DNS_NAME_FORMAT format
;
53 { "", DnsNameDomain
, ERROR_INVALID_NAME
},
54 { ".", DnsNameDomain
, ERROR_SUCCESS
},
55 { "..", DnsNameDomain
, ERROR_INVALID_NAME
},
56 { ".a", DnsNameDomain
, ERROR_INVALID_NAME
},
57 { "a.", DnsNameDomain
, ERROR_SUCCESS
},
58 { "a..", DnsNameDomain
, ERROR_INVALID_NAME
},
59 { "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", DnsNameDomain
, ERROR_INVALID_NAME
},
60 { "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", DnsNameDomain
, ERROR_INVALID_NAME
},
61 { "a.?", DnsNameDomain
, DNS_ERROR_INVALID_NAME_CHAR
},
62 { "a.*", DnsNameDomain
, DNS_ERROR_INVALID_NAME_CHAR
},
63 { "a ", DnsNameDomain
, DNS_ERROR_INVALID_NAME_CHAR
},
64 { "a._b", DnsNameDomain
, DNS_ERROR_NON_RFC_NAME
},
65 { "123", DnsNameDomain
, DNS_ERROR_NUMERIC_NAME
},
66 { "123.456", DnsNameDomain
, DNS_ERROR_NUMERIC_NAME
},
67 { "a.b", DnsNameDomain
, ERROR_SUCCESS
},
69 { "", DnsNameDomainLabel
, ERROR_INVALID_NAME
},
70 { ".", DnsNameDomainLabel
, ERROR_INVALID_NAME
},
71 { "..", DnsNameDomainLabel
, ERROR_INVALID_NAME
},
72 { ".c", DnsNameDomainLabel
, ERROR_INVALID_NAME
},
73 { "c.", DnsNameDomainLabel
, ERROR_INVALID_NAME
},
74 { "c..", DnsNameDomainLabel
, ERROR_INVALID_NAME
},
75 { "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", DnsNameDomainLabel
, ERROR_INVALID_NAME
},
76 { "?", DnsNameDomainLabel
, DNS_ERROR_INVALID_NAME_CHAR
},
77 { "*", DnsNameDomainLabel
, DNS_ERROR_INVALID_NAME_CHAR
},
78 { "c ", DnsNameDomainLabel
, DNS_ERROR_INVALID_NAME_CHAR
},
79 { "_c", DnsNameDomainLabel
, DNS_ERROR_NON_RFC_NAME
},
80 { "456", DnsNameDomainLabel
, ERROR_SUCCESS
},
81 { "456.789", DnsNameDomainLabel
, ERROR_INVALID_NAME
},
82 { "c.d", DnsNameDomainLabel
, ERROR_INVALID_NAME
},
84 { "", DnsNameHostnameFull
, ERROR_INVALID_NAME
},
85 { ".", DnsNameHostnameFull
, ERROR_SUCCESS
},
86 { "..", DnsNameHostnameFull
, ERROR_INVALID_NAME
},
87 { ".e", DnsNameHostnameFull
, ERROR_INVALID_NAME
},
88 { "e.", DnsNameHostnameFull
, ERROR_SUCCESS
},
89 { "e..", DnsNameHostnameFull
, ERROR_INVALID_NAME
},
90 { "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", DnsNameDomain
, ERROR_INVALID_NAME
},
91 { "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee.eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee.eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee.eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", DnsNameHostnameFull
, ERROR_INVALID_NAME
},
92 { "?", DnsNameHostnameLabel
, DNS_ERROR_INVALID_NAME_CHAR
},
93 { "e.?", DnsNameHostnameFull
, DNS_ERROR_INVALID_NAME_CHAR
},
94 { "e.*", DnsNameHostnameFull
, DNS_ERROR_INVALID_NAME_CHAR
},
95 { "e ", DnsNameHostnameFull
, DNS_ERROR_INVALID_NAME_CHAR
},
96 { "e._f", DnsNameHostnameFull
, DNS_ERROR_NON_RFC_NAME
},
97 { "789", DnsNameHostnameFull
, DNS_ERROR_NUMERIC_NAME
},
98 { "789.456", DnsNameHostnameFull
, DNS_ERROR_NUMERIC_NAME
},
99 { "e.f", DnsNameHostnameFull
, ERROR_SUCCESS
},
101 { "", DnsNameHostnameLabel
, ERROR_INVALID_NAME
},
102 { ".", DnsNameHostnameLabel
, ERROR_INVALID_NAME
},
103 { "..", DnsNameHostnameLabel
, ERROR_INVALID_NAME
},
104 { ".g", DnsNameHostnameLabel
, ERROR_INVALID_NAME
},
105 { "g.", DnsNameHostnameLabel
, ERROR_INVALID_NAME
},
106 { "g..", DnsNameHostnameLabel
, ERROR_INVALID_NAME
},
107 { "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg", DnsNameHostnameLabel
, ERROR_INVALID_NAME
},
108 { "*", DnsNameHostnameLabel
, DNS_ERROR_INVALID_NAME_CHAR
},
109 { "g ", DnsNameHostnameLabel
, DNS_ERROR_INVALID_NAME_CHAR
},
110 { "_g", DnsNameHostnameLabel
, DNS_ERROR_NON_RFC_NAME
},
111 { "123", DnsNameHostnameLabel
, DNS_ERROR_NUMERIC_NAME
},
112 { "123.456", DnsNameHostnameLabel
, ERROR_INVALID_NAME
},
113 { "g.h", DnsNameHostnameLabel
, ERROR_INVALID_NAME
},
115 { "", DnsNameWildcard
, ERROR_INVALID_NAME
},
116 { ".", DnsNameWildcard
, ERROR_INVALID_NAME
},
117 { "..", DnsNameWildcard
, ERROR_INVALID_NAME
},
118 { ".j", DnsNameWildcard
, ERROR_INVALID_NAME
},
119 { "j.", DnsNameWildcard
, ERROR_INVALID_NAME
},
120 { "j..", DnsNameWildcard
, ERROR_INVALID_NAME
},
121 { "jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj", DnsNameWildcard
, ERROR_INVALID_NAME
},
122 { "jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj.jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj.jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj.jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj", DnsNameWildcard
, ERROR_INVALID_NAME
},
123 { "?", DnsNameWildcard
, ERROR_INVALID_NAME
},
124 { "i ", DnsNameWildcard
, ERROR_INVALID_NAME
},
125 { "_i", DnsNameWildcard
, ERROR_INVALID_NAME
},
126 { "123", DnsNameWildcard
, ERROR_INVALID_NAME
},
127 { "123.456", DnsNameWildcard
, ERROR_INVALID_NAME
},
128 { "i.j", DnsNameWildcard
, ERROR_INVALID_NAME
},
129 { "*", DnsNameWildcard
, ERROR_SUCCESS
},
130 { "*j", DnsNameWildcard
, DNS_ERROR_INVALID_NAME_CHAR
},
131 { "*.j", DnsNameWildcard
, ERROR_SUCCESS
},
132 { "i.*", DnsNameWildcard
, ERROR_INVALID_NAME
},
134 { "", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
135 { ".", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
136 { "..", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
137 { ".k", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
138 { "k.", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
139 { "k..", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
140 { "kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
141 { "kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk.kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk.kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk.kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
142 { "?", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
143 { "k ", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
144 { "_k", DnsNameSrvRecord
, ERROR_SUCCESS
},
145 { "123", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
146 { "123.456", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
147 { "k.l", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
148 { "_", DnsNameSrvRecord
, DNS_ERROR_NON_RFC_NAME
},
149 { "_k.l", DnsNameSrvRecord
, ERROR_SUCCESS
},
150 { "k._l", DnsNameSrvRecord
, ERROR_INVALID_NAME
}
153 static void test_DnsValidateName_A( void )
158 status
= pDnsValidateName_A( NULL
, DnsNameDomain
);
159 ok( status
== ERROR_INVALID_NAME
, "succeeded unexpectedly\n" );
161 for (i
= 0; i
< sizeof(test_data
) / sizeof(test_data
[0]); i
++)
163 status
= pDnsValidateName_A( test_data
[i
].name
, test_data
[i
].format
);
164 ok( status
== test_data
[i
].status
, "%d: \'%s\': got %d, expected %d\n",
165 i
, test_data
[i
].name
, status
, test_data
[i
].status
);
169 static void test_DnsNameCompare_A( void )
171 static CHAR empty
[] = "",
181 a_dot_b_dot
[] = "a.b.",
182 a_dot_b_dotdot
[] = "a.b..",
185 b_dot_a_dot
[] = "b.a.",
186 b_dot_a_dotdot
[] = "b.a..";
188 ok( pDnsNameCompare_A( NULL
, NULL
) == TRUE
, "failed unexpectedly\n" );
190 ok( pDnsNameCompare_A( empty
, empty
) == TRUE
, "failed unexpectedly\n" );
191 ok( pDnsNameCompare_A( dot
, empty
) == TRUE
, "failed unexpectedly\n" );
192 ok( pDnsNameCompare_A( empty
, dot
) == TRUE
, "failed unexpectedly\n" );
193 ok( pDnsNameCompare_A( dot
, dotdot
) == TRUE
, "failed unexpectedly\n" );
194 ok( pDnsNameCompare_A( dotdot
, dot
) == TRUE
, "failed unexpectedly\n" );
195 ok( pDnsNameCompare_A( a
, a
) == TRUE
, "failed unexpectedly\n" );
196 ok( pDnsNameCompare_A( a
, A
) == TRUE
, "failed unexpectedly\n" );
197 ok( pDnsNameCompare_A( A
, a
) == TRUE
, "failed unexpectedly\n" );
198 ok( pDnsNameCompare_A( a_dot_b
, A_dot_B
) == TRUE
, "failed unexpectedly\n" );
199 ok( pDnsNameCompare_A( a_dot_b
, a_dot_b
) == TRUE
, "failed unexpectedly\n" );
200 ok( pDnsNameCompare_A( a_dot_b_dot
, a_dot_b_dot
) == TRUE
, "failed unexpectedly\n" );
201 ok( pDnsNameCompare_A( a_dot_b_dotdot
, a_dot_b_dotdot
) == TRUE
, "failed unexpectedly\n" );
203 ok( pDnsNameCompare_A( empty
, NULL
) == FALSE
, "succeeded unexpectedly\n" );
204 ok( pDnsNameCompare_A( NULL
, empty
) == FALSE
, "succeeded unexpectedly\n" );
206 ok( pDnsNameCompare_A( a
, b
) == FALSE
, "succeeded unexpectedly\n" );
207 ok( pDnsNameCompare_A( a
, B
) == FALSE
, "succeeded unexpectedly\n" );
208 ok( pDnsNameCompare_A( A
, b
) == FALSE
, "succeeded unexpectedly\n" );
209 ok( pDnsNameCompare_A( a_dot_b
, B_dot_A
) == FALSE
, "succeeded unexpectedly\n" );
210 ok( pDnsNameCompare_A( a_dot_b_dot
, b_dot_a_dot
) == FALSE
, "succeeded unexpectedly\n" );
211 ok( pDnsNameCompare_A( a_dot_b
, a_dot_a
) == FALSE
, "succeeded unexpectedly\n" );
212 ok( pDnsNameCompare_A( a_dot_b_dotdot
, b_dot_a_dotdot
) == FALSE
, "succeeded unexpectedly\n" );
213 ok( pDnsNameCompare_A( a_dot_b_dot
, b_dot_a_dotdot
) == FALSE
, "succeeded unexpectedly\n" );
214 ok( pDnsNameCompare_A( a_dot_b_dotdot
, b_dot_a_dot
) == FALSE
, "succeeded unexpectedly\n" );
215 ok( pDnsNameCompare_A( a_dot_b_dot
, b_dot_a
) == FALSE
, "succeeded unexpectedly\n" );
216 ok( pDnsNameCompare_A( a_dot_b
, b_dot_a_dot
) == FALSE
, "succeeded unexpectedly\n" );
221 dnsapi
= LoadLibraryA( "dnsapi.dll" );
224 /* Doesn't exist before W2K */
225 skip("dnsapi.dll cannot be loaded\n");
229 if (!init_function_ptrs())
231 skip("Needed functions are not available\n");
232 FreeLibrary( dnsapi
);
236 test_DnsValidateName_A();
237 test_DnsNameCompare_A();
239 FreeLibrary( dnsapi
);