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

162 lines
3.6 KiB
JavaScript
Raw Normal View History

2017-01-14 02:04:27 +00:00
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');
}