dns-suite.js/node_modules/native-dns/test/request.js

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