masq
Version:
A simple local dns server extracted from Pow
120 lines (101 loc) • 3.41 kB
JavaScript
// Generated by CoffeeScript 2.0.0-beta2
(function() {
var Configuration, createRequester, debug, defaultEnvironment, exec, fixturePath, fs, http, join, merge, mkdirp, rm_rf, serve, swap, touch;
fs = require("fs");
http = require("http");
({exec} = require("child_process"));
({join} = require("path"));
({Configuration} = require("../.."));
exports.merge = merge = function(...objects) {
var i, key, len, object, result, value;
result = {};
for (i = 0, len = objects.length; i < len; i++) {
object = objects[i];
for (key in object) {
value = object[key];
result[key] = value;
}
}
return result;
};
exports.fixturePath = fixturePath = function(path) {
return join(fs.realpathSync(join(__dirname, "..")), "fixtures", path);
};
defaultEnvironment = {
POW_HOST_ROOT: fixturePath("tmp"),
POW_LOG_ROOT: fixturePath("tmp/logs")
};
exports.createConfiguration = function(env = {}) {
return new Configuration(merge(defaultEnvironment, env));
};
exports.prepareFixtures = function(callback) {
return rm_rf(fixturePath("tmp"), function() {
return mkdirp(fixturePath("tmp"), function() {
return callback();
});
});
};
exports.rm_rf = rm_rf = function(path, callback) {
return exec(`rm -rf ${path}`, callback);
};
exports.mkdirp = mkdirp = function(path, callback) {
return exec(`mkdir -p ${path}`, callback);
};
exports.touch = touch = function(path, callback) {
return exec(`touch ${path}`, callback);
};
exports.swap = swap = function(path1, path2, callback) {
var unswap;
unswap = function(callback) {
return swap(path2, path1, callback);
};
return exec(`mv ${path1} ${path1}.swap;\nmv ${path2} ${path1};\nmv ${path1}.swap ${path2}`, function(err) {
return callback(err, unswap);
});
};
exports.debug = debug = function() {
if (process.env.DEBUG) {
return console.error.apply(console, arguments);
}
};
exports.serve = serve = function(server, callback) {
return server.listen(0, function() {
var port, request;
port = server.address().port;
debug(`server listening on port ${port}`);
request = createRequester(server.address().port);
return callback(request, function(callback) {
debug(`server on port ${port} is closing`);
server.close();
return callback();
}, server);
});
};
exports.createRequester = createRequester = function(port) {
return function(method, path, headers, callback) {
var data, request;
if (!callback) {
callback = headers;
}
request = http.request({method, path, port, headers});
if (data = headers.data) {
delete headers.data;
request.write(data);
}
request.end();
debug(`client requesting ${method} ${path} on port ${port}`);
return request.on("response", function(response) {
var body;
body = "";
response.on("data", function(chunk) {
debug(`client received ${chunk.length} bytes from server on port ${port}`);
return body += chunk.toString("utf8");
});
return response.on("end", function() {
debug(`client disconnected from server on port ${port}`);
return callback(body, response);
});
});
};
};
}).call(this);