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