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');
 | |
| }
 |