1 /* 2 * Tests for record handling functions 3 * 4 * Copyright 2006 Hans Leidekker 5 * 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. 10 * 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. 15 * 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 19 */ 20 21 #include <stdarg.h> 22 #include <stdio.h> 23 24 #include "windef.h" 25 #include "winbase.h" 26 #include "winnls.h" 27 #ifdef __REACTOS__ 28 #define UNICODE 29 #endif 30 #include "windns.h" 31 32 #include "wine/test.h" 33 34 static WCHAR name1[] = {'l','o','c','a','l','h','o','s','t',0}; 35 static WCHAR name2[] = {'L','O','C','A','L','H','O','S','T',0}; 36 37 static DNS_RECORDW r1 = { NULL, name1, DNS_TYPE_A, sizeof(DNS_A_DATA), { 0 }, 1200, 0, { { 0xffffffff } } }; 38 static DNS_RECORDW r2 = { NULL, name1, DNS_TYPE_A, sizeof(DNS_A_DATA), { 0 }, 1200, 0, { { 0xffffffff } } }; 39 static DNS_RECORDW r3 = { NULL, name1, DNS_TYPE_A, sizeof(DNS_A_DATA), { 0 }, 1200, 0, { { 0xffffffff } } }; 40 41 static void test_DnsRecordCompare( void ) 42 { 43 ok( DnsRecordCompare( &r1, &r1 ) == TRUE, "failed unexpectedly\n" ); 44 45 r2.pName = name2; 46 ok( DnsRecordCompare( &r1, &r2 ) == TRUE, "failed unexpectedly\n" ); 47 48 r2.Flags.S.CharSet = DnsCharSetUnicode; 49 ok( DnsRecordCompare( &r1, &r2 ) == TRUE, "failed unexpectedly\n" ); 50 51 r2.Flags.S.CharSet = DnsCharSetAnsi; 52 ok( DnsRecordCompare( &r1, &r2 ) == TRUE, "failed unexpectedly\n" ); 53 54 r1.Flags.S.CharSet = DnsCharSetAnsi; 55 ok( DnsRecordCompare( &r1, &r2 ) == TRUE, "failed unexpectedly\n" ); 56 57 r1.dwTtl = 0; 58 ok( DnsRecordCompare( &r1, &r2 ) == TRUE, "failed unexpectedly\n" ); 59 60 r2.Data.A.IpAddress = 0; 61 ok( DnsRecordCompare( &r1, &r2 ) == FALSE, "succeeded unexpectedly\n" ); 62 } 63 64 static void test_DnsRecordSetCompare( void ) 65 { 66 DNS_RECORDW *diff1; 67 DNS_RECORDW *diff2; 68 DNS_RRSET rr1, rr2; 69 70 r1.Flags.DW = 0x2019; 71 r2.Flags.DW = 0x2019; 72 r2.Data.A.IpAddress = 0xffffffff; 73 74 DNS_RRSET_INIT( rr1 ); 75 DNS_RRSET_INIT( rr2 ); 76 77 DNS_RRSET_ADD( rr1, &r1 ); 78 DNS_RRSET_ADD( rr2, &r2 ); 79 80 DNS_RRSET_TERMINATE( rr1 ); 81 DNS_RRSET_TERMINATE( rr2 ); 82 83 ok( DnsRecordSetCompare( NULL, NULL, NULL, NULL ) == FALSE, "succeeded unexpectedly\n" ); 84 ok( DnsRecordSetCompare( rr1.pFirstRR, NULL, NULL, NULL ) == FALSE, "succeeded unexpectedly\n" ); 85 ok( DnsRecordSetCompare( NULL, rr2.pFirstRR, NULL, NULL ) == FALSE, "succeeded unexpectedly\n" ); 86 87 diff1 = NULL; 88 diff2 = NULL; 89 90 ok( DnsRecordSetCompare( NULL, NULL, &diff1, &diff2 ) == FALSE, "succeeded unexpectedly\n" ); 91 ok( diff1 == NULL && diff2 == NULL, "unexpected result: %p, %p\n", diff1, diff2 ); 92 93 ok( DnsRecordSetCompare( rr1.pFirstRR, NULL, &diff1, &diff2 ) == FALSE, "succeeded unexpectedly\n" ); 94 ok( diff1 != NULL && diff2 == NULL, "unexpected result: %p, %p\n", diff1, diff2 ); 95 DnsRecordListFree( diff1, DnsFreeRecordList ); 96 97 ok( DnsRecordSetCompare( NULL, rr2.pFirstRR, &diff1, &diff2 ) == FALSE, "succeeded unexpectedly\n" ); 98 ok( diff1 == NULL && diff2 != NULL, "unexpected result: %p, %p\n", diff1, diff2 ); 99 DnsRecordListFree( diff2, DnsFreeRecordList ); 100 101 ok( DnsRecordSetCompare( rr1.pFirstRR, rr2.pFirstRR, NULL, &diff2 ) == TRUE, "failed unexpectedly\n" ); 102 ok( diff2 == NULL, "unexpected result: %p\n", diff2 ); 103 104 ok( DnsRecordSetCompare( rr1.pFirstRR, rr2.pFirstRR, &diff1, NULL ) == TRUE, "failed unexpectedly\n" ); 105 ok( diff1 == NULL, "unexpected result: %p\n", diff1 ); 106 107 ok( DnsRecordSetCompare( rr1.pFirstRR, rr2.pFirstRR, &diff1, &diff2 ) == TRUE, "failed unexpectedly\n" ); 108 ok( diff1 == NULL && diff2 == NULL, "unexpected result: %p, %p\n", diff1, diff2 ); 109 110 r2.Data.A.IpAddress = 0; 111 112 ok( DnsRecordSetCompare( rr1.pFirstRR, rr2.pFirstRR, NULL, &diff2 ) == FALSE, "succeeded unexpectedly\n" ); 113 DnsRecordListFree( diff2, DnsFreeRecordList ); 114 115 ok( DnsRecordSetCompare( rr1.pFirstRR, rr2.pFirstRR, &diff1, NULL ) == FALSE, "succeeded unexpectedly\n" ); 116 DnsRecordListFree( diff1, DnsFreeRecordList ); 117 118 ok( DnsRecordSetCompare( rr1.pFirstRR, rr2.pFirstRR, &diff1, &diff2 ) == FALSE, "succeeded unexpectedly\n" ); 119 DnsRecordListFree( diff1, DnsFreeRecordList ); 120 DnsRecordListFree( diff2, DnsFreeRecordList ); 121 } 122 123 static void test_DnsRecordSetDetach( void ) 124 { 125 DNS_RRSET rr; 126 DNS_RECORDW *r, *s; 127 128 DNS_RRSET_INIT( rr ); 129 DNS_RRSET_ADD( rr, &r1 ); 130 DNS_RRSET_ADD( rr, &r2 ); 131 DNS_RRSET_ADD( rr, &r3 ); 132 DNS_RRSET_TERMINATE( rr ); 133 134 ok( !DnsRecordSetDetach( NULL ), "succeeded unexpectedly\n" ); 135 136 r = rr.pFirstRR; 137 s = DnsRecordSetDetach( r ); 138 139 ok( s == &r3, "failed unexpectedly: got %p, expected %p\n", s, &r3 ); 140 ok( r == &r1, "failed unexpectedly: got %p, expected %p\n", r, &r1 ); 141 ok( !r2.pNext, "failed unexpectedly\n" ); 142 } 143 144 START_TEST(record) 145 { 146 test_DnsRecordCompare(); 147 test_DnsRecordSetCompare(); 148 test_DnsRecordSetDetach(); 149 } 150