More tests for config creation.
This commit is contained in:
parent
00e4eac14a
commit
399d379ff5
@ -1,6 +1,9 @@
|
||||
'use strict';
|
||||
|
||||
var bitcore = require('bitcore');
|
||||
var $ = bitcore.util.preconditions;
|
||||
var _ = bitcore.deps._;
|
||||
var path = require('path');
|
||||
var version = require('../../package.json').version;
|
||||
var mkdirp = require('mkdirp');
|
||||
var fs = require('fs');
|
||||
@ -23,48 +26,98 @@ var BASE_PACKAGE = {
|
||||
|
||||
var BASE_BITCOIN_CONFIG = 'whitelist=127.0.0.1\n' + 'txindex=1\n';
|
||||
|
||||
function create(baseDirectory, dirname, name, done) {
|
||||
|
||||
if (!baseDirectory) {
|
||||
baseDirectory = process.cwd;
|
||||
}
|
||||
|
||||
var directory = baseDirectory + '/' + dirname;
|
||||
|
||||
mkdirp(directory, function(err) {
|
||||
/**
|
||||
* Will create a directory and bitcoin.conf file for Bitcoin.
|
||||
* @param {String} dataDir - The absolute path
|
||||
* @param {Function} done - The callback function called when finished
|
||||
*/
|
||||
function createBitcoinDirectory(datadir, done) {
|
||||
mkdirp(datadir, function(err) {
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
|
||||
try {
|
||||
fs.writeFileSync(datadir + '/bitcoin.conf', BASE_BITCOIN_CONFIG);
|
||||
} catch(e) {
|
||||
done(e);
|
||||
}
|
||||
done();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Will create a base Bitcore Node configuration directory and files.
|
||||
* @param {String} configDir - The absolute path
|
||||
* @param {String} name - The name of the node
|
||||
* @param {Function} done - The callback function called when finished
|
||||
*/
|
||||
function createConfigDirectory(configDir, name, isGlobal, done) {
|
||||
mkdirp(configDir, function(err) {
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
|
||||
// setup the configuration files
|
||||
var config = BASE_CONFIG;
|
||||
config.name = name;
|
||||
var configJSON = JSON.stringify(config, null, 2);
|
||||
var packageJSON = JSON.stringify(BASE_PACKAGE, null, 2);
|
||||
try {
|
||||
fs.writeFileSync(directory + '/bitcore-node.json', configJSON);
|
||||
fs.writeFileSync(directory + '/package.json', packageJSON);
|
||||
fs.writeFileSync(configDir + '/bitcore-node.json', configJSON);
|
||||
if (!isGlobal) {
|
||||
fs.writeFileSync(configDir + '/package.json', packageJSON);
|
||||
}
|
||||
} catch(e) {
|
||||
done(e);
|
||||
}
|
||||
|
||||
// setup the bitcoin data directory
|
||||
mkdirp(directory + '/data', function(err) {
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
|
||||
try {
|
||||
fs.writeFileSync(directory + '/data/bitcoin.conf', BASE_BITCOIN_CONFIG);
|
||||
} catch(e) {
|
||||
done(e);
|
||||
}
|
||||
|
||||
done();
|
||||
|
||||
});
|
||||
done();
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Object} options
|
||||
* @param {String} options.cwd - The current working directory
|
||||
* @param {String} options.dirname - The name of the bitcore node configuration directory
|
||||
* @param {String} options.name - The name of the bitcore node
|
||||
* @param {String} options.datadir - The path to the bitcoin datadir
|
||||
* @param {Function} done - A callback function called when finished
|
||||
*/
|
||||
function create(options, done) {
|
||||
/* jshint maxstatements:20 */
|
||||
|
||||
$.checkArgument(_.isObject(options));
|
||||
$.checkArgument(_.isFunction(done));
|
||||
$.checkArgument(_.isString(options.cwd));
|
||||
$.checkArgument(_.isString(options.dirname));
|
||||
$.checkArgument(_.isString(options.name));
|
||||
$.checkArgument(_.isBoolean(options.isGlobal));
|
||||
$.checkArgument(_.isString(options.datadir));
|
||||
|
||||
var cwd = options.cwd;
|
||||
var dirname = options.dirname;
|
||||
var name = options.name;
|
||||
var datadir = options.datadir;
|
||||
var isGlobal = options.isGlobal;
|
||||
|
||||
if (!cwd) {
|
||||
cwd = process.cwd;
|
||||
}
|
||||
|
||||
var absConfigDir = path.resolve(cwd, dirname);
|
||||
var absDataDir = path.resolve(absConfigDir, datadir);
|
||||
|
||||
if (!fs.existsSync(absConfigDir)) {
|
||||
createConfigDirectory(absConfigDir, name, isGlobal, function() {
|
||||
if (!fs.existsSync(absDataDir)) {
|
||||
createBitcoinDirectory(absDataDir, done);
|
||||
} else {
|
||||
done();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
done(new Error('Directory "' + absConfigDir+ '" already exists.'));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -17,7 +17,12 @@ describe('#create', function() {
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
done();
|
||||
mkdirp(testDir + '/.bitcoin', function(err) {
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -33,7 +38,13 @@ describe('#create', function() {
|
||||
|
||||
it('will create scaffold files', function() {
|
||||
|
||||
create(testDir, 'mynode', 'My Node 1', function(err) {
|
||||
create({
|
||||
cwd: testDir,
|
||||
dirname: 'mynode',
|
||||
name: 'My Node 1',
|
||||
isGlobal: false,
|
||||
datadir: './data'
|
||||
}, function(err) {
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
@ -59,4 +70,63 @@ describe('#create', function() {
|
||||
|
||||
});
|
||||
|
||||
it('will error if directory already exists', function() {
|
||||
|
||||
create({
|
||||
cwd: testDir,
|
||||
dirname: 'mynode',
|
||||
name: 'My Node 2',
|
||||
isGlobal: false,
|
||||
datadir: './data'
|
||||
}, function(err) {
|
||||
should.exist(err);
|
||||
err.message.should.match(/^Directory/);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
it('will not create bitcoin.conf if it already exists', function() {
|
||||
|
||||
create({
|
||||
cwd: testDir,
|
||||
dirname: 'mynode2',
|
||||
name: 'My Node 2',
|
||||
isGlobal: false,
|
||||
datadir: '../.bitcoin'
|
||||
}, function(err) {
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
|
||||
var bitcoinConfig = testDir + '/.bitcoin/bitcoin.conf';
|
||||
should.equal(fs.existsSync(bitcoinConfig), false);
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
it('will not create a package.json if globally installed', function() {
|
||||
|
||||
create({
|
||||
cwd: testDir,
|
||||
dirname: 'mynode3',
|
||||
name: 'My Node 3',
|
||||
isGlobal: true,
|
||||
datadir: '../.bitcoin'
|
||||
}, function(err) {
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
|
||||
var packagePath = testDir + '/mynode3/package.json';
|
||||
should.equal(fs.existsSync(packagePath), false);
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
Loading…
Reference in New Issue
Block a user