@@ -8,21 +8,49 @@ const dgram = require('dgram');
88const server = dgram . createSocket ( 'udp4' ) ;
99const resolver = new Resolver ( ) ;
1010
11- server . bind ( 0 , common . mustCall ( ( ) => {
11+ const expectedDomains = [ ] ;
12+ const receivedDomains = [ ] ;
13+ const desiredQueries = 11 ;
14+ let finishedQueries = 0 ;
15+
16+ server . bind ( 0 , common . mustCall ( async ( ) => {
1217 resolver . setServers ( [ `127.0.0.1:${ server . address ( ) . port } ` ] ) ;
13- resolver . resolve4 ( 'example.org' , common . mustCall ( ( err , res ) => {
18+
19+ const callback = common . mustCall ( ( err , res ) => {
1420 assert . strictEqual ( err . code , 'ECANCELLED' ) ;
1521 assert . strictEqual ( err . syscall , 'queryA' ) ;
16- assert . strictEqual ( err . hostname , 'example.org' ) ;
17- server . close ( ) ;
18- } ) ) ;
22+ assert . strictEqual ( err . hostname , `example${ finishedQueries } .org` ) ;
23+
24+ finishedQueries ++ ;
25+ if ( finishedQueries === desiredQueries ) {
26+ assert . deepStrictEqual ( expectedDomains . sort ( ) , receivedDomains . sort ( ) ) ;
27+ server . close ( ) ;
28+ }
29+ } , desiredQueries ) ;
30+
31+ const next = ( ...args ) => {
32+ callback ( ...args ) ;
33+
34+ // Multiple queries
35+ for ( let i = 1 ; i < desiredQueries ; i ++ ) {
36+ const domain = `example${ i } .org` ;
37+ expectedDomains . push ( domain ) ;
38+ resolver . resolve4 ( domain , callback ) ;
39+ }
40+ } ;
41+
42+ // Single query
43+ expectedDomains . push ( 'example0.org' ) ;
44+ resolver . resolve4 ( 'example0.org' , next ) ;
1945} ) ) ;
2046
21- server . on ( 'message' , common . mustCall ( ( msg , { address, port } ) => {
47+ server . on ( 'message' , ( msg , { address, port } ) => {
2248 const parsed = dnstools . parseDNSPacket ( msg ) ;
23- const domain = parsed . questions [ 0 ] . domain ;
24- assert . strictEqual ( domain , 'example.org' ) ;
49+
50+ for ( const question of parsed . questions ) {
51+ receivedDomains . push ( question . domain ) ;
52+ }
2553
2654 // Do not send a reply.
2755 resolver . cancel ( ) ;
28- } ) ) ;
56+ } ) ;
0 commit comments