More tests for config creation.
This commit is contained in:
parent
00e4eac14a
commit
399d379ff5
@ -1,6 +1,9 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var bitcore = require('bitcore');
|
var bitcore = require('bitcore');
|
||||||
|
var $ = bitcore.util.preconditions;
|
||||||
|
var _ = bitcore.deps._;
|
||||||
|
var path = require('path');
|
||||||
var version = require('../../package.json').version;
|
var version = require('../../package.json').version;
|
||||||
var mkdirp = require('mkdirp');
|
var mkdirp = require('mkdirp');
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
@ -23,48 +26,98 @@ var BASE_PACKAGE = {
|
|||||||
|
|
||||||
var BASE_BITCOIN_CONFIG = 'whitelist=127.0.0.1\n' + 'txindex=1\n';
|
var BASE_BITCOIN_CONFIG = 'whitelist=127.0.0.1\n' + 'txindex=1\n';
|
||||||
|
|
||||||
function create(baseDirectory, dirname, name, done) {
|
/**
|
||||||
|
* Will create a directory and bitcoin.conf file for Bitcoin.
|
||||||
if (!baseDirectory) {
|
* @param {String} dataDir - The absolute path
|
||||||
baseDirectory = process.cwd;
|
* @param {Function} done - The callback function called when finished
|
||||||
}
|
*/
|
||||||
|
function createBitcoinDirectory(datadir, done) {
|
||||||
var directory = baseDirectory + '/' + dirname;
|
mkdirp(datadir, function(err) {
|
||||||
|
if (err) {
|
||||||
mkdirp(directory, function(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) {
|
if (err) {
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
|
|
||||||
// setup the configuration files
|
|
||||||
var config = BASE_CONFIG;
|
var config = BASE_CONFIG;
|
||||||
config.name = name;
|
config.name = name;
|
||||||
var configJSON = JSON.stringify(config, null, 2);
|
var configJSON = JSON.stringify(config, null, 2);
|
||||||
var packageJSON = JSON.stringify(BASE_PACKAGE, null, 2);
|
var packageJSON = JSON.stringify(BASE_PACKAGE, null, 2);
|
||||||
try {
|
try {
|
||||||
fs.writeFileSync(directory + '/bitcore-node.json', configJSON);
|
fs.writeFileSync(configDir + '/bitcore-node.json', configJSON);
|
||||||
fs.writeFileSync(directory + '/package.json', packageJSON);
|
if (!isGlobal) {
|
||||||
|
fs.writeFileSync(configDir + '/package.json', packageJSON);
|
||||||
|
}
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
done(e);
|
done(e);
|
||||||
}
|
}
|
||||||
|
done();
|
||||||
// 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();
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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) {
|
if (err) {
|
||||||
throw 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() {
|
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) {
|
if (err) {
|
||||||
throw 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