From b8f2b6c0dcafcbe342e8d16b945576bf786b8acc Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 15 Sep 2012 14:37:21 -0700 Subject: [PATCH] Initial check in of testing scripts. --- .gitignore | 3 +- test/buster.js | 9 +++ test/server.js | 35 +++++++++++ test/standalone-test.js | 17 ++++++ test/utils.js | 129 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 192 insertions(+), 1 deletion(-) create mode 100644 test/buster.js create mode 100644 test/server.js create mode 100644 test/standalone-test.js create mode 100644 test/utils.js diff --git a/.gitignore b/.gitignore index 2530f7eb82..ec0acfa4ff 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ *.o obj/* bin/newcoind - newcoind +# Ignore locally installed node_modules +node_modules diff --git a/test/buster.js b/test/buster.js new file mode 100644 index 0000000000..5dd49ec7cc --- /dev/null +++ b/test/buster.js @@ -0,0 +1,9 @@ +var config = module.exports; + +config["Newcoin tests"] = { + rootPath: "../", + environment: "node", + tests: [ + "test/*-test.js" + ] +} diff --git a/test/server.js b/test/server.js new file mode 100644 index 0000000000..c0e735b8af --- /dev/null +++ b/test/server.js @@ -0,0 +1,35 @@ +// Manage test servers + +// Provide servers +// +// Servers are created in tmp/server/$server +// + +console.log("server.js>"); + +var utils = require("./utils.js"); + +// var child = require("child"); + +var serverPath = function(name) { + return "tmp/server/" + name; +}; + +var makeBase = function(name, done) { + var path = serverPath(name); + + console.log("start> %s: %s", name, path); + + // Remove the existing dir. + utils.resetPath(path, parseInt('0777', 8), done); + + console.log("start< %s", name); +}; + +var start = function(name, done) { + makeBase(name, done); +}; + +exports.start = start; + +console.log("server.js<"); diff --git a/test/standalone-test.js b/test/standalone-test.js new file mode 100644 index 0000000000..3f6c1c8d58 --- /dev/null +++ b/test/standalone-test.js @@ -0,0 +1,17 @@ +// console.log("standalone-test.js>"); + +var fs = require("fs"); +var buster = require("buster"); + +var server = require("./server.js"); + +buster.testCase("Check standalone server startup", { + "Start": function (done) { + server.start("alpha", function(e) { + buster.refute(e); + done(); + }); + } +}); + +// console.log("standalone-test.js<"); diff --git a/test/utils.js b/test/utils.js new file mode 100644 index 0000000000..c755f02b38 --- /dev/null +++ b/test/utils.js @@ -0,0 +1,129 @@ + +var fs = require("fs"); +var path = require("path"); + +var filterErr = function(code, done) { + return function (e) { + done(e.code !== code ? e : undefined); + } +}; + +var throwErr = function(done) { + return function (e) { + if (e) + throw e; + + done(); + }; +}; + +// apply function to elements of array. Return first true value to done or undefined. +var mapOr = function(func, array, done) { + if (array.length) { + func(array[array.length-1], function (v) { + if (v) { + done(v); + } + else { + array.length -= 1; + mapOr(func, array, done); + } + }); + } + else { + done(); + } +}; + +// Make a directory and sub-directories. +var mkPath = function(dirPath, mode, done) { + fs.mkdir(dirPath, mode, function (e) { + if (e && e.code === "EEXIST") { + // Already exists, done. + done(); + } + else if (e.code === "ENOENT") { + // Missing sub dir. + + mkPath(path.dirname(dirPath), mode, function(e) { + if (e) { + throw e; + } + else { + mkPath(dirPath, mode, done); + } + }); + } + else { + throw e; + } + }); +}; + +// Empty a directory. +var emptyPath = function(dirPath, done) { + fs.readdir(dirPath, function (err, files) { + if (err) { + done(err); + } + else { + mapOr(rmPath, files.map(function(f) { return path.join(dirPath, f); }), done); + } + }); +}; + +// Remove path recursively. +var rmPath = function(dirPath, done) { +// console.log("rmPath: %s", dirPath); + + fs.lstat(dirPath, function (err, stats) { + if (err && err.code == "ENOENT") { + done(); + } + if (err) { + done(err); + } + else if (stats.isDirectory()) { + emptyPath(dirPath, function (e) { + if (e) { + done(e); + } + else { +// console.log("rmdir: %s", dirPath); done(); + fs.rmdir(dirPath, done); + } + }); + } + else { +// console.log("unlink: %s", dirPath); done(); + fs.unlink(dirPath, done); + } + }); +}; + +// Create directory if needed and empty if needed. +var resetPath = function(dirPath, mode, done) { + mkPath(dirPath, mode, function (e) { + if (e) { + done(e); + } + else { + emptyPath(dirPath, done); + } + }); +}; + +var trace = function(comment, func) { + return function() { + console.log("%s: %s", trace, arguments.toString); + func(arguments); + }; +}; + +exports.emptyPath = emptyPath; +exports.mapOr = mapOr; +exports.mkPath = mkPath; +exports.resetPath = resetPath; +exports.rmPath = rmPath; +exports.trace = trace; +