Merge pull request #556 from embark-framework/bug_fix/hanging-test-node

Fix hanging tests when using a wrong node
This commit is contained in:
Iuri Matias 2018-06-19 09:33:41 -04:00 committed by GitHub
commit b363873da2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 68 additions and 46 deletions

View File

@ -256,45 +256,8 @@ class Blockchain {
if (!self.contractsConfig || !self.contractsConfig.deployment || !self.contractsConfig.deployment.host) {
return next();
}
const origin = self.blockchainConfig.wsOrigins.split(',')[0];
const options = {
protocolVersion: 13,
perMessageDeflate: true,
origin: origin,
host: self.contractsConfig.deployment.host,
port: self.contractsConfig.deployment.port
};
if (self.contractsConfig.deployment.type === 'ws') {
options.headers = {
'Sec-WebSocket-Version': 13,
Connection: 'Upgrade',
Upgrade: 'websocket',
'Sec-WebSocket-Extensions': 'permessage-deflate; client_max_window_bits',
Origin: origin
};
}
let req;
// remove trailing api key from infura, ie rinkeby.infura.io/nmY8WtT4QfEwz2S7wTbl
if(options.host.indexOf('/') > -1){
options.host = options.host.split('/')[0];
}
if((self.contractsConfig.deployment.protocol || 'http') === 'https'){
req = require('https').get(options);
}else{
req = require('http').get(options);
}
req.on('error', (err) => {
next(err);
});
req.on('response', (_response) => {
next();
});
req.on('upgrade', (_res, _socket, _head) => {
next();
});
const {host, port, type, protocol} = self.contractsConfig.deployment;
utils.pingEndpoint(host, port, type, protocol, self.blockchainConfig.wsOrigins.split(',')[0], next);
}
], function (err) {
if (!noLogs && err === NO_NODE_ERROR) {

View File

@ -7,6 +7,7 @@ const Events = require('../core/events');
const cloneDeep = require('clone-deep');
const AccountParser = require('../contracts/accountParser');
const Provider = require('../contracts/provider');
const utils = require('../utils/utils');
const EmbarkJS = require('../../js/embark_node');
@ -44,18 +45,29 @@ class Test {
initWeb3Provider(callback) {
if (this.simOptions.host) {
const protocol = (this.simOptions.type === "rpc") ? 'http' : 'ws';
let {host, port, type, protocol, accounts} = this.simOptions;
if (!protocol) {
protocol = (this.simOptions.type === "rpc") ? 'http' : 'ws';
}
const endpoint = `${protocol}://${host}:${port}`;
const providerOptions = {
web3: this.web3,
type: this.simOptions.type,
accountsConfig: this.simOptions.accounts,
type,
accountsConfig: accounts,
blockchainConfig: this.engine.config.blockchainConfig,
logger: this.engine.logger,
isDev: false,
web3Endpoint: `${protocol}://${this.simOptions.host}:${this.simOptions.port}`
web3Endpoint: endpoint
};
console.info(`Connecting to node at ${endpoint}`.cyan);
return utils.pingEndpoint(host, port, type, protocol, this.engine.config.blockchainConfig.wsOrigins.split(',')[0], (err) => {
if (err) {
console.error(`Error connecting to the node, there might be an error in ${endpoint}`.red);
return callback(err);
}
this.provider = new Provider(providerOptions);
return this.provider.startWeb3Provider(callback);
});
}
if (this.simOptions.accounts) {
@ -214,7 +226,12 @@ class Test {
next(null, accounts);
});
}
], callback);
], (err, accounts) => {
if (err) {
process.exit(1);
}
callback(null, accounts);
});
}
_deploy(config, callback) {

View File

@ -73,6 +73,47 @@ function httpsGetJson(url, callback) {
});
}
function pingEndpoint(host, port, type, protocol, origin, callback) {
const options = {
protocolVersion: 13,
perMessageDeflate: true,
origin: origin,
host: host,
port: port
};
if (type === 'ws') {
options.headers = {
'Sec-WebSocket-Version': 13,
Connection: 'Upgrade',
Upgrade: 'websocket',
'Sec-WebSocket-Extensions': 'permessage-deflate; client_max_window_bits',
Origin: origin
};
}
let req;
// remove trailing api key from infura, ie rinkeby.infura.io/nmY8WtT4QfEwz2S7wTbl
if (options.host.indexOf('/') > -1){
options.host = options.host.split('/')[0];
}
if (protocol === 'https') {
req = require('https').get(options);
} else {
req = require('http').get(options);
}
req.on('error', (err) => {
callback(err);
});
req.on('response', (_response) => {
callback();
});
req.on('upgrade', (_res, _socket, _head) => {
callback();
});
}
function runCmd(cmd, options) {
const shelljs = require('shelljs');
let result = shelljs.exec(cmd, options || {silent: true});
@ -267,6 +308,7 @@ module.exports = {
httpGetJson: httpGetJson,
httpsGetJson: httpsGetJson,
hexToNumber: hexToNumber,
pingEndpoint,
decodeParams: decodeParams,
runCmd: runCmd,
cd: cd,