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