162 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			162 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | var dns = require('../dns'); | ||
|  | //*
 | ||
|  | exports.udp4 = function (test) { | ||
|  |   var server = dns.createUDPServer();  | ||
|  | 
 | ||
|  |   var tData = { | ||
|  |     address: '127.0.0.1', | ||
|  |     port: 15353, | ||
|  |   }; | ||
|  | 
 | ||
|  |   if (!/^v0.6/.test(process.version)) | ||
|  |     tData.family = 'IPv4'; | ||
|  | 
 | ||
|  |   var succeed = false; | ||
|  | 
 | ||
|  |   server.on('listening', function () { | ||
|  |     test.deepEqual(this.address(), tData, 'Not listening on the same port and address'); | ||
|  |     // currently disabled because of https://github.com/joyent/node/issues/2867
 | ||
|  |     process.nextTick(function () { | ||
|  |       server.close(); | ||
|  |     }); | ||
|  |     succeed = true; | ||
|  |   }); | ||
|  | 
 | ||
|  |   server.on('socketError', function (err, socket) { | ||
|  |     test.ifError(err, 'Should not have a bind error'); | ||
|  |     this.close(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   server.on('close', function () { | ||
|  |     test.done(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   server.serve(tData.port, tData.address); | ||
|  | }; | ||
|  | //*/
 | ||
|  | //*
 | ||
|  | exports.udp6 = function (test) { | ||
|  |   var server = dns.createUDPServer({ | ||
|  |     dgram_type: 'udp6', | ||
|  |   });  | ||
|  | 
 | ||
|  |   var tData = { | ||
|  |     address: '::1', | ||
|  |     port: 15353, | ||
|  |   }; | ||
|  | 
 | ||
|  |   if (!/^v0.6/.test(process.version)) | ||
|  |     tData.family = 'IPv6'; | ||
|  | 
 | ||
|  |   var succeed = false; | ||
|  | 
 | ||
|  |   server.on('listening', function () { | ||
|  |     test.deepEqual(this.address(), tData, 'Not listening on the same port and address'); | ||
|  | 
 | ||
|  |     // currently disabled because of https://github.com/joyent/node/issues/2867
 | ||
|  |     process.nextTick(function () { | ||
|  |       server.close(); | ||
|  |     }); | ||
|  |     succeed = true; | ||
|  |   }); | ||
|  | 
 | ||
|  |   server.on('socketError', function (err, socket) { | ||
|  |     test.ifError(err, 'Should not have a bind error'); | ||
|  |     this.close(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   server.on('close', function () { | ||
|  |     test.done(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   server.serve(tData.port, tData.address); | ||
|  | }; | ||
|  | //*/
 | ||
|  | //*
 | ||
|  | exports.tcp = function (test) { | ||
|  |   var server = dns.createTCPServer();  | ||
|  | 
 | ||
|  |   var tData = { | ||
|  |     address: '127.0.0.1', | ||
|  |     port: 15353, | ||
|  |   }; | ||
|  | 
 | ||
|  |   server.on('listening', function () { | ||
|  |     test.equal(this.address().port, tData.port, 'Not listening on the same port and address'); | ||
|  |     test.equal(this.address().address, tData.address, 'Not listening on the same port and address'); | ||
|  |     process.nextTick(function () { | ||
|  |       server.close(); | ||
|  |     }); | ||
|  |   }); | ||
|  | 
 | ||
|  |   server.on('socketError', function (err, socket) { | ||
|  |     test.ifError(err, 'Should not have a bind error'); | ||
|  |     this.close(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   server.on('close', function () { | ||
|  |     test.done(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   server.serve(tData.port, tData.address); | ||
|  | }; | ||
|  | //*/
 | ||
|  | exports.udpResponse = function (test) { | ||
|  |   var server = dns.createServer(); | ||
|  | 
 | ||
|  |   server.on('request', function (req, res) { | ||
|  |     res.answer.push(dns.A({ | ||
|  |       name: req.question[0].name, | ||
|  |       address: '127.0.0.1', | ||
|  |       ttl: 600, | ||
|  |     })); | ||
|  |     res.send(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   server.on('listening', function () { | ||
|  |     var r = dns.Request({ | ||
|  |       question: dns.Question({ | ||
|  |         name: 'www.google.com', | ||
|  |       }), | ||
|  |       server: { | ||
|  |         address: '127.0.0.1', | ||
|  |         port: 15353, | ||
|  |       }, | ||
|  |       cache: false, | ||
|  |     }); | ||
|  | 
 | ||
|  |     r.on('message', function (err, answer) { | ||
|  |       var record; | ||
|  |       test.ok(!err, 'Response should not be an error'); | ||
|  |       test.ok(answer.answer.length === 1, 'Response should have 1 answer'); | ||
|  |       record = answer.answer[0] | ||
|  |       test.strictEqual(record.address, '127.0.0.1', 'Address mismatch'); | ||
|  |       test.strictEqual(record.ttl, 600, 'TTL mismatch'); | ||
|  |       test.strictEqual(record.name, 'www.google.com', 'Name mismatch'); | ||
|  |     }); | ||
|  | 
 | ||
|  |     r.on('error', function (err) { | ||
|  |       console.log(err); | ||
|  |       test.ok(false, 'Should not error'); | ||
|  |     }); | ||
|  | 
 | ||
|  |     r.on('timeout', function () { | ||
|  |       test.ok(false, 'Should not timeout'); | ||
|  |     }); | ||
|  | 
 | ||
|  |     r.on('end', function () { | ||
|  |       server.close(); | ||
|  |     }); | ||
|  | 
 | ||
|  |     process.nextTick(function () { | ||
|  |       r.send(); | ||
|  |     }); | ||
|  |   }); | ||
|  | 
 | ||
|  |   server.on('close', function () { | ||
|  |     test.done(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   server.serve(15353, '127.0.0.1'); | ||
|  | } |