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 BOOL WINAPI
DnsFlushResolverCacheEntry_A(PCSTR
);
35 DNS_NAME_FORMAT format
;
37 DNS_STATUS status_broken
;
41 { "", DnsNameDomain
, ERROR_INVALID_NAME
},
42 { ".", DnsNameDomain
, ERROR_SUCCESS
},
43 { "..", DnsNameDomain
, ERROR_INVALID_NAME
},
44 { ".a", DnsNameDomain
, ERROR_INVALID_NAME
},
45 { "a.", DnsNameDomain
, ERROR_SUCCESS
},
46 { "a..", DnsNameDomain
, ERROR_INVALID_NAME
},
47 { "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", DnsNameDomain
, ERROR_INVALID_NAME
},
48 { "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", DnsNameDomain
, ERROR_INVALID_NAME
},
49 { "a.?", DnsNameDomain
, DNS_ERROR_INVALID_NAME_CHAR
},
50 { "a.*", DnsNameDomain
, DNS_ERROR_INVALID_NAME_CHAR
},
51 { "a ", DnsNameDomain
, DNS_ERROR_INVALID_NAME_CHAR
},
52 { "a._b", DnsNameDomain
, DNS_ERROR_NON_RFC_NAME
},
53 { "123", DnsNameDomain
, ERROR_SUCCESS
, DNS_ERROR_NUMERIC_NAME
},
54 { "123.456", DnsNameDomain
, ERROR_SUCCESS
, DNS_ERROR_NUMERIC_NAME
},
55 { "a.b", DnsNameDomain
, ERROR_SUCCESS
},
57 { "", DnsNameDomainLabel
, ERROR_INVALID_NAME
},
58 { ".", DnsNameDomainLabel
, ERROR_INVALID_NAME
},
59 { "..", DnsNameDomainLabel
, ERROR_INVALID_NAME
},
60 { ".c", DnsNameDomainLabel
, ERROR_INVALID_NAME
},
61 { "c.", DnsNameDomainLabel
, ERROR_INVALID_NAME
},
62 { "c..", DnsNameDomainLabel
, ERROR_INVALID_NAME
},
63 { "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", DnsNameDomainLabel
, ERROR_INVALID_NAME
},
64 { "?", DnsNameDomainLabel
, DNS_ERROR_INVALID_NAME_CHAR
},
65 { "*", DnsNameDomainLabel
, DNS_ERROR_INVALID_NAME_CHAR
},
66 { "c ", DnsNameDomainLabel
, DNS_ERROR_INVALID_NAME_CHAR
},
67 { "_c", DnsNameDomainLabel
, DNS_ERROR_NON_RFC_NAME
},
68 { "456", DnsNameDomainLabel
, ERROR_SUCCESS
},
69 { "456.789", DnsNameDomainLabel
, ERROR_INVALID_NAME
},
70 { "c.d", DnsNameDomainLabel
, ERROR_INVALID_NAME
},
72 { "", DnsNameHostnameFull
, ERROR_INVALID_NAME
},
73 { ".", DnsNameHostnameFull
, ERROR_SUCCESS
},
74 { "..", DnsNameHostnameFull
, ERROR_INVALID_NAME
},
75 { ".e", DnsNameHostnameFull
, ERROR_INVALID_NAME
},
76 { "e.", DnsNameHostnameFull
, ERROR_SUCCESS
},
77 { "e..", DnsNameHostnameFull
, ERROR_INVALID_NAME
},
78 { "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", DnsNameDomain
, ERROR_INVALID_NAME
},
79 { "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee.eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee.eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee.eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", DnsNameHostnameFull
, ERROR_INVALID_NAME
},
80 { "?", DnsNameHostnameLabel
, DNS_ERROR_INVALID_NAME_CHAR
},
81 { "e.?", DnsNameHostnameFull
, DNS_ERROR_INVALID_NAME_CHAR
},
82 { "e.*", DnsNameHostnameFull
, DNS_ERROR_INVALID_NAME_CHAR
},
83 { "e ", DnsNameHostnameFull
, DNS_ERROR_INVALID_NAME_CHAR
},
84 { "e._f", DnsNameHostnameFull
, DNS_ERROR_NON_RFC_NAME
},
85 { "789", DnsNameHostnameFull
, ERROR_SUCCESS
, DNS_ERROR_NUMERIC_NAME
},
86 { "789.456", DnsNameHostnameFull
, ERROR_SUCCESS
, DNS_ERROR_NUMERIC_NAME
},
87 { "e.f", DnsNameHostnameFull
, ERROR_SUCCESS
},
89 { "", DnsNameHostnameLabel
, ERROR_INVALID_NAME
},
90 { ".", DnsNameHostnameLabel
, ERROR_INVALID_NAME
},
91 { "..", DnsNameHostnameLabel
, ERROR_INVALID_NAME
},
92 { ".g", DnsNameHostnameLabel
, ERROR_INVALID_NAME
},
93 { "g.", DnsNameHostnameLabel
, ERROR_INVALID_NAME
},
94 { "g..", DnsNameHostnameLabel
, ERROR_INVALID_NAME
},
95 { "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg", DnsNameHostnameLabel
, ERROR_INVALID_NAME
},
96 { "*", DnsNameHostnameLabel
, DNS_ERROR_INVALID_NAME_CHAR
},
97 { "g ", DnsNameHostnameLabel
, DNS_ERROR_INVALID_NAME_CHAR
},
98 { "_g", DnsNameHostnameLabel
, DNS_ERROR_NON_RFC_NAME
},
99 { "123", DnsNameHostnameLabel
, ERROR_SUCCESS
, DNS_ERROR_NUMERIC_NAME
},
100 { "123.456", DnsNameHostnameLabel
, ERROR_INVALID_NAME
},
101 { "g.h", DnsNameHostnameLabel
, ERROR_INVALID_NAME
},
103 { "", DnsNameWildcard
, ERROR_INVALID_NAME
},
104 { ".", DnsNameWildcard
, ERROR_INVALID_NAME
},
105 { "..", DnsNameWildcard
, ERROR_INVALID_NAME
},
106 { ".j", DnsNameWildcard
, ERROR_INVALID_NAME
},
107 { "j.", DnsNameWildcard
, ERROR_INVALID_NAME
},
108 { "j..", DnsNameWildcard
, ERROR_INVALID_NAME
},
109 { "jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj", DnsNameWildcard
, ERROR_INVALID_NAME
},
110 { "jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj.jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj.jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj.jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj", DnsNameWildcard
, ERROR_INVALID_NAME
},
111 { "?", DnsNameWildcard
, ERROR_INVALID_NAME
},
112 { "i ", DnsNameWildcard
, ERROR_INVALID_NAME
},
113 { "_i", DnsNameWildcard
, ERROR_INVALID_NAME
},
114 { "123", DnsNameWildcard
, ERROR_INVALID_NAME
},
115 { "123.456", DnsNameWildcard
, ERROR_INVALID_NAME
},
116 { "i.j", DnsNameWildcard
, ERROR_INVALID_NAME
},
117 { "*", DnsNameWildcard
, ERROR_SUCCESS
},
118 { "*j", DnsNameWildcard
, DNS_ERROR_INVALID_NAME_CHAR
},
119 { "*.j", DnsNameWildcard
, ERROR_SUCCESS
},
120 { "i.*", DnsNameWildcard
, ERROR_INVALID_NAME
},
122 { "", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
123 { ".", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
124 { "..", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
125 { ".k", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
126 { "k.", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
127 { "k..", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
128 { "kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
129 { "kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk.kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk.kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk.kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
130 { "?", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
131 { "k ", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
132 { "_k", DnsNameSrvRecord
, ERROR_SUCCESS
},
133 { "123", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
134 { "123.456", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
135 { "k.l", DnsNameSrvRecord
, ERROR_INVALID_NAME
},
136 { "_", DnsNameSrvRecord
, DNS_ERROR_NON_RFC_NAME
},
137 { "_k.l", DnsNameSrvRecord
, ERROR_SUCCESS
},
138 { "k._l", DnsNameSrvRecord
, ERROR_INVALID_NAME
}
141 static void test_DnsValidateName_A( void )
146 status
= DnsValidateName_A( NULL
, DnsNameDomain
);
147 ok( status
== ERROR_INVALID_NAME
, "succeeded unexpectedly\n" );
149 for (i
= 0; i
< ARRAY_SIZE(test_data
); i
++)
151 status
= DnsValidateName_A( test_data
[i
].name
, test_data
[i
].format
);
152 ok( status
== test_data
[i
].status
|| broken(status
== test_data
[i
].status_broken
),
153 "%d: \'%s\': got %d, expected %d\n", i
, test_data
[i
].name
, status
, test_data
[i
].status
);
157 static void test_DnsNameCompare_A( void )
159 static const CHAR empty
[] = "",
169 a_dot_b_dot
[] = "a.b.",
170 a_dot_b_dotdot
[] = "a.b..",
173 b_dot_a_dot
[] = "b.a.",
174 b_dot_a_dotdot
[] = "b.a..";
176 ok( DnsNameCompare_A( NULL
, NULL
) == TRUE
, "failed unexpectedly\n" );
178 ok( DnsNameCompare_A( empty
, empty
) == TRUE
, "failed unexpectedly\n" );
179 ok( DnsNameCompare_A( dot
, empty
) == TRUE
, "failed unexpectedly\n" );
180 ok( DnsNameCompare_A( empty
, dot
) == TRUE
, "failed unexpectedly\n" );
181 ok( DnsNameCompare_A( dot
, dotdot
) == TRUE
, "failed unexpectedly\n" );
182 ok( DnsNameCompare_A( dotdot
, dot
) == TRUE
, "failed unexpectedly\n" );
183 ok( DnsNameCompare_A( a
, a
) == TRUE
, "failed unexpectedly\n" );
184 ok( DnsNameCompare_A( a
, A
) == TRUE
, "failed unexpectedly\n" );
185 ok( DnsNameCompare_A( A
, a
) == TRUE
, "failed unexpectedly\n" );
186 ok( DnsNameCompare_A( a_dot_b
, A_dot_B
) == TRUE
, "failed unexpectedly\n" );
187 ok( DnsNameCompare_A( a_dot_b
, a_dot_b
) == TRUE
, "failed unexpectedly\n" );
188 ok( DnsNameCompare_A( a_dot_b_dot
, a_dot_b_dot
) == TRUE
, "failed unexpectedly\n" );
189 ok( DnsNameCompare_A( a_dot_b_dotdot
, a_dot_b_dotdot
) == TRUE
, "failed unexpectedly\n" );
191 ok( DnsNameCompare_A( empty
, NULL
) == FALSE
, "succeeded unexpectedly\n" );
192 ok( DnsNameCompare_A( NULL
, empty
) == FALSE
, "succeeded unexpectedly\n" );
194 ok( DnsNameCompare_A( a
, b
) == FALSE
, "succeeded unexpectedly\n" );
195 ok( DnsNameCompare_A( a
, B
) == FALSE
, "succeeded unexpectedly\n" );
196 ok( DnsNameCompare_A( A
, b
) == FALSE
, "succeeded unexpectedly\n" );
197 ok( DnsNameCompare_A( a_dot_b
, B_dot_A
) == FALSE
, "succeeded unexpectedly\n" );
198 ok( DnsNameCompare_A( a_dot_b_dot
, b_dot_a_dot
) == FALSE
, "succeeded unexpectedly\n" );
199 ok( DnsNameCompare_A( a_dot_b
, a_dot_a
) == FALSE
, "succeeded unexpectedly\n" );
200 ok( DnsNameCompare_A( a_dot_b_dotdot
, b_dot_a_dotdot
) == FALSE
, "succeeded unexpectedly\n" );
201 ok( DnsNameCompare_A( a_dot_b_dot
, b_dot_a_dotdot
) == FALSE
, "succeeded unexpectedly\n" );
202 ok( DnsNameCompare_A( a_dot_b_dotdot
, b_dot_a_dot
) == FALSE
, "succeeded unexpectedly\n" );
203 ok( DnsNameCompare_A( a_dot_b_dot
, b_dot_a
) == FALSE
, "succeeded unexpectedly\n" );
204 ok( DnsNameCompare_A( a_dot_b
, b_dot_a_dot
) == FALSE
, "succeeded unexpectedly\n" );
207 static void test_DnsFlushResolverCacheEntry_A(void)
212 SetLastError( 0xdeadbeef );
213 ret
= DnsFlushResolverCacheEntry_A( NULL
);
214 err
= GetLastError();
215 ok( !ret
, "got %d\n", ret
);
216 ok( err
== 0xdeadbeef, "got %u\n", err
);
218 ret
= DnsFlushResolverCacheEntry_A( "localhost" );
219 ok( ret
, "got %d\n", ret
);
221 ret
= DnsFlushResolverCacheEntry_A( "nxdomain.test.winehq.org" );
222 ok( ret
, "got %d\n", ret
);
227 test_DnsValidateName_A();
228 test_DnsNameCompare_A();
229 test_DnsFlushResolverCacheEntry_A();