Michael Bradley, Jr 9f0a370c34 refactor: add embarkjs to the monorepo
Don't import git history of embark-framework/EmbarkJS, simply copy over the
sources. Modify `package.json`, etc. re: being situated in the monorepo.

Make use of the root babel config but extend with
`packages/embarkjs/.babelrc.js`.

Build `test/` scripts into `build-test/` and git-ignore `build-test/`.

Revise `Blockchain.connect()` so that if the caller supplies a callback then a
promise is not returned.

Revise tests to test `Blockchain.connect()` usage with and without a callback.
2019-02-08 11:58:02 -06:00

112 lines
2.6 KiB
JavaScript

/* global Buffer global module require */
const async = require('async');
const http = require('http');
const net = require('net');
const Web3 = require('web3');
const startRPCMockServer = (options = {}, callback) => {
const opts = Object.assign({}, {
successful: true
}, options);
let port = 0;
let sock = net.createServer();
let state = { visited: false };
let server = http.createServer((req, res) => {
state.visited = true;
if(!opts.successful) {
res.statusCode = 500;
return res.end();
}
let body = '';
req.on('data', chunk => {
body += chunk.toString();
});
req.on('end', () => {
const request = JSON.parse(body);
const accountsResponse = JSON.stringify({
"jsonrpc": "2.0",
"id": request.id,
"result": [
"0x7c67d951b7338a96168f259a16b7ba25e7a30315"
]
});
res.writeHead(200, {
'Content-Length': Buffer.byteLength(accountsResponse),
'Content-Type': 'application/json'
});
res.end(accountsResponse);
});
});
async.waterfall([
cb => { sock.listen(0, cb); },
cb => { port = sock.address().port; cb(); },
cb => { sock.close(cb); },
cb => { server.listen(port, '127.0.0.1', () => cb()); }
], () => {
state.server = server;
state.connectionString = `http://localhost:${port}`;
callback(null, state);
});
};
const TestProvider = {};
TestProvider.init = function(_config) {
this.web3 = global.web3 || new Web3();
global.web3 = global.web3 || this.web3;
};
TestProvider.getInstance = function () {
return this.web3;
};
TestProvider.getAccounts = function () {
return this.web3.eth.getAccounts(...arguments);
};
TestProvider.getNewProvider = function (providerName, ...args) {
return new Web3.providers[providerName](...args);
};
TestProvider.setProvider = function (provider) {
return this.web3.setProvider(provider);
};
TestProvider.getCurrentProvider = function () {
return this.web3.currentProvider;
};
TestProvider.getDefaultAccount = function () {
return this.web3.eth.defaultAccount;
};
TestProvider.setDefaultAccount = function (account) {
this.web3.eth.defaultAccount = account;
};
TestProvider.newContract = function (options) {
return new this.web3.eth.Contract(options.abi, options.address);
};
TestProvider.send = function () {
return this.web3.eth.sendTransaction(...arguments);
};
TestProvider.toWei = function () {
return this.web3.toWei(...arguments);
};
TestProvider.getNetworkId = function () {
return this.web3.eth.net.getId();
};
module.exports = {
TestProvider,
startRPCMockServer
};