220 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			220 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | var dns = require('../dns'), | ||
|  |   Request = dns.Request, | ||
|  |   Question = dns.Question, | ||
|  |   consts = dns.consts, | ||
|  |   dgram = require('dgram'); | ||
|  | 
 | ||
|  | var q = Question({ | ||
|  |   name: 'www.google.com', | ||
|  |   type: consts.NAME_TO_QTYPE.A, | ||
|  | }); | ||
|  | 
 | ||
|  | var noServer = { | ||
|  |   address: '127.0.0.1', | ||
|  |   port: 19999, | ||
|  |   type: 'udp', | ||
|  | }; | ||
|  | 
 | ||
|  | var udpServ = { | ||
|  |   address: '8.8.8.8', | ||
|  |   port: 53, | ||
|  |   type: 'udp', | ||
|  | }; | ||
|  | 
 | ||
|  | var tcpServ = { | ||
|  |   address: '8.8.8.8', | ||
|  |   port: 53, | ||
|  |   type: 'tcp', | ||
|  | }; | ||
|  | 
 | ||
|  | exports.setUp = function (cb) { | ||
|  |   cb(); | ||
|  | }; | ||
|  | 
 | ||
|  | exports.timeout = function (test) { | ||
|  |   var r = Request({ | ||
|  |     question: q, | ||
|  |     server: noServer, | ||
|  |     timeout: 100, | ||
|  |     cache: false, | ||
|  |   }); | ||
|  | 
 | ||
|  |   var timedout = false; | ||
|  | 
 | ||
|  |   r.on('timeout', function () { | ||
|  |     timedout = true; | ||
|  |   }); | ||
|  | 
 | ||
|  |   r.on('end', function () { | ||
|  |     test.ok(timedout, 'Failed to timeout'); | ||
|  |     test.done(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   r.send(); | ||
|  | }; | ||
|  | 
 | ||
|  | exports.udpResponse = function (test) { | ||
|  |   var r = Request({ | ||
|  |     question: q, | ||
|  |     server: udpServ, | ||
|  |     timeout: 4000, | ||
|  |   }); | ||
|  | 
 | ||
|  |   r.on('message', function (err, answer) { | ||
|  |     test.ok(!err, 'UDP Request should not error'); | ||
|  |     test.ok(answer, 'No UDP answer provided'); | ||
|  |     test.ok(answer.answer.length > 0, 'No answers found'); | ||
|  |   }); | ||
|  | 
 | ||
|  |   r.on('timeout', function () { | ||
|  |     test.ok(false, 'UDP Requests should not timeout'); | ||
|  |   }); | ||
|  | 
 | ||
|  |   r.on('end', function () { | ||
|  |     test.done(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   r.send(); | ||
|  | }; | ||
|  | 
 | ||
|  | exports.tcpResponse = function (test) { | ||
|  |   var r = Request({ | ||
|  |     question: q, | ||
|  |     server: tcpServ, | ||
|  |     timeout: 4000, | ||
|  |   }); | ||
|  | 
 | ||
|  |   r.on('message', function (err, answer) { | ||
|  |     test.ok(!err, 'TCP Request should not error'); | ||
|  |     test.ok(answer, 'No TCP answer provided'); | ||
|  |     test.ok(answer.answer.length > 0, 'No answers found'); | ||
|  |   }); | ||
|  | 
 | ||
|  |   r.on('timeout', function () { | ||
|  |     test.ok(false, 'TCP Requests should not timeout'); | ||
|  |   }); | ||
|  | 
 | ||
|  |   r.on('end', function () { | ||
|  |     test.done(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   r.send(); | ||
|  | }; | ||
|  | 
 | ||
|  | exports.serverString = function (test) { | ||
|  |   var r = Request({ | ||
|  |     question: q, | ||
|  |     server: '8.8.8.8', | ||
|  |   }); | ||
|  | 
 | ||
|  |   r.on('message', function (err, answer) { | ||
|  |     test.ok(answer.answer.length > 0, 'no answers found'); | ||
|  |   }); | ||
|  | 
 | ||
|  |   r.on('timeout', function () { | ||
|  |     test.ok(false, 'Should not timeout'); | ||
|  |   }); | ||
|  | 
 | ||
|  |   r.on('end', function () { | ||
|  |     test.done(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   r.send(); | ||
|  | }; | ||
|  | 
 | ||
|  | exports.questionString = function (test) { | ||
|  |   var r = Request({ | ||
|  |     question: Question({ | ||
|  |       name: 'www.google.com', | ||
|  |       type: 'a', | ||
|  |     }), | ||
|  |     server: '8.8.8.8', | ||
|  |   }); | ||
|  | 
 | ||
|  |   r.on('message', function (err, answer) { | ||
|  |     test.ok(answer.answer.length > 0, 'no answers found'); | ||
|  |   }); | ||
|  | 
 | ||
|  |   r.on('timeout', function () { | ||
|  |     test.ok(false, 'Should not timeout'); | ||
|  |   }); | ||
|  | 
 | ||
|  |   r.on('end', function () { | ||
|  |     test.done(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   r.send(); | ||
|  | }; | ||
|  | 
 | ||
|  | exports.emptyUdp = function (test) { | ||
|  |   var socket = dgram.createSocket('udp4'); | ||
|  |   socket.on('listening', function () { | ||
|  |     var timeout = false; | ||
|  |     var r = Request({ | ||
|  |       question: q, | ||
|  |       server: { address: '127.0.0.1', port: socket.address().port, type: 'udp' }, | ||
|  |       timeout: 300, | ||
|  |       cache: false, | ||
|  |     }); | ||
|  |     r.on('message', function () { | ||
|  |       test.ok(false, 'There should not be a response'); | ||
|  |     }); | ||
|  |     r.on('timeout', function () { | ||
|  |       timeout = true; | ||
|  |     }); | ||
|  |     r.on('end', function () { | ||
|  |       test.ok(timeout, 'This should timeout'); | ||
|  |       socket.close(); | ||
|  |       test.done(); | ||
|  |     }); | ||
|  |     r.send(); | ||
|  |   }); | ||
|  |   socket.on('message', function (msg, remote) { | ||
|  |     socket.send(new Buffer(1), 0, 1, remote.port, remote.address); | ||
|  |   }); | ||
|  |   socket.bind(); | ||
|  | }; | ||
|  | 
 | ||
|  | exports.longName = function (test) { | ||
|  |   var didErr = false; | ||
|  |   var r = Request({ | ||
|  |     question: Question({ | ||
|  |       name: '*************' | ||
|  |         + '***************' | ||
|  |         + '***************' | ||
|  |         + '***************' | ||
|  |         + '***************' | ||
|  |         + '***************' | ||
|  |         + '***************' | ||
|  |         + '***************' | ||
|  |         + '***************' | ||
|  |         + '***************' | ||
|  |         + '***************' | ||
|  |         + '***************' | ||
|  |         + '***************' | ||
|  |         + '***************' | ||
|  |         + '***************' | ||
|  |         + '***************' | ||
|  |         + '***************' | ||
|  |         + '***************' | ||
|  |         + '***************' | ||
|  |         + '***************', | ||
|  |     }), | ||
|  |     server: '8.8.8.8', | ||
|  |     timeout: 1000, | ||
|  |   }); | ||
|  |   r.on('error', function (err) { | ||
|  |     test.ok(err, 'We should error because the packet failed to pack'); | ||
|  |     didErr = true; | ||
|  |   }); | ||
|  |   r.on('end', function () { | ||
|  |     test.ok(didErr, 'We did not err'); | ||
|  |     test.done(); | ||
|  |   }); | ||
|  |   r.send(); | ||
|  | }; | ||
|  | 
 | ||
|  | exports.tearDown = function (cb) { | ||
|  |   cb(); | ||
|  | }; |