masq
Version:
A simple local dns server extracted from Pow
66 lines (58 loc) • 2.55 kB
JavaScript
// Generated by CoffeeScript 2.0.0-beta2
(function() {
var DnsServer, async, createConfiguration, exec, prepareFixtures, testCase;
({DnsServer} = require(".."));
async = require("async");
({exec} = require("child_process"));
({testCase} = require("nodeunit"));
({prepareFixtures, createConfiguration} = require("./lib/test_helper"));
module.exports = testCase({
setUp: function(proceed) {
return prepareFixtures(proceed);
},
"responds to all A queries for the configured domain": function(test) {
test.expect(12);
return exec("which dig", function(err) {
var address, configuration, dnsServer, port;
if (err) {
console.warn("Skipping test, system is missing `dig`");
test.expect(0);
return test.done();
} else {
configuration = createConfiguration({
MASQ_DOMAINS: "masqtest,masqdev"
});
dnsServer = new DnsServer(configuration);
address = "0.0.0.0";
port = 20561;
return dnsServer.listen(port, function() {
var resolve, testResolves;
resolve = function(domain, callback) {
var cmd;
cmd = `dig -p ${port} @${address} ${domain} +noall +answer +comments`;
return exec(cmd, function(err, stdout, stderr) {
var answer, ref, ref1, status;
status = (ref = stdout.match(/status: (.*?),/)) != null ? ref[1] : void 0;
answer = (ref1 = stdout.match(/IN\tA\t([\d.]+)/)) != null ? ref1[1] : void 0;
return callback(err, status, answer);
});
};
testResolves = function(host, expectedStatus, expectedAnswer) {
return function(callback) {
return resolve(host, function(err, status, answer) {
test.ifError(err);
test.same([expectedStatus, expectedAnswer], [status, answer]);
return callback();
});
};
};
return async.parallel([testResolves("hello.masqtest", "NOERROR", "127.0.0.1"), testResolves("hello.masqdev", "NOERROR", "127.0.0.1"), testResolves("a.b.c.masqtest", "NOERROR", "127.0.0.1"), testResolves("masqtest.", "NOERROR", "127.0.0.1"), testResolves("masqdev.", "NOERROR", "127.0.0.1"), testResolves("foo.", "NXDOMAIN")], function() {
dnsServer.close();
return test.done();
});
});
}
});
}
});
}).call(this);