/ test / test.js
test.js
  1  const async = require('async');
  2  const http = require('http');
  3  const net = require('net');
  4  
  5  const Web3 = require('web3');
  6  
  7  const startRPCMockServer = (options = {}, callback) => {
  8    const opts = Object.assign({}, {
  9      successful: true
 10    }, options);
 11  
 12    let port = 0;
 13    let sock = net.createServer();
 14    let state = { visited: false };
 15    let server = http.createServer({}, (req, res) => {
 16      state.visited = true;
 17      if(!opts.successful) {
 18        res.statusCode = 500;
 19        return res.end();
 20      }
 21  
 22      let body = '';
 23      req.on('data', chunk => {
 24        body += chunk.toString();
 25      });
 26      req.on('end', () => {
 27        const request = JSON.parse(body);
 28        const accountsResponse = JSON.stringify({
 29          "jsonrpc": "2.0",
 30          "id": request.id,
 31          "result": [
 32            "0x7c67d951b7338a96168f259a16b7ba25e7a30315"
 33          ]
 34        });
 35  
 36        res.writeHead(200, {
 37          'Content-Length': Buffer.byteLength(accountsResponse),
 38          'Content-Type': 'application/json'
 39        })
 40        res.end(accountsResponse);
 41      });
 42    });
 43  
 44    async.waterfall([
 45      cb => { sock.listen(0, cb) },
 46      cb => { port = sock.address().port; cb() },
 47      cb => { sock.close(cb) },
 48      cb => { server.listen(port, '127.0.0.1', () => cb()); }
 49    ], () => {
 50      state.server = server;
 51      state.connectionString = `http://localhost:${port}`;
 52      callback(null, state);
 53    });
 54  }
 55  
 56  const TestProvider = {};
 57  
 58  TestProvider.init = function(_config) {
 59    this.web3 = global.web3 || new Web3();
 60    global.web3 = global.web3 || this.web3;
 61  };
 62  
 63  TestProvider.getInstance = function () {
 64    return this.web3;
 65  };
 66  
 67  TestProvider.getAccounts = function () {
 68    return this.web3.eth.getAccounts(...arguments);
 69  };
 70  
 71  TestProvider.getNewProvider = function (providerName, ...args) {
 72    return new Web3.providers[providerName](...args);
 73  };
 74  
 75  TestProvider.setProvider = function (provider) {
 76    return this.web3.setProvider(provider);
 77  };
 78  
 79  TestProvider.getCurrentProvider = function () {
 80    return this.web3.currentProvider;
 81  };
 82  
 83  TestProvider.getDefaultAccount = function () {
 84    return this.web3.eth.defaultAccount;
 85  };
 86  
 87  TestProvider.setDefaultAccount = function (account) {
 88    this.web3.eth.defaultAccount = account;
 89  };
 90  
 91  TestProvider.newContract = function (options) {
 92    return new this.web3.eth.Contract(options.abi, options.address);
 93  };
 94  
 95  TestProvider.send = function () {
 96    return this.web3.eth.sendTransaction(...arguments);
 97  };
 98  
 99  TestProvider.toWei = function () {
100    return this.web3.toWei(...arguments);
101  };
102  
103  TestProvider.getNetworkId = function () {
104    return this.web3.eth.net.getId();
105  };
106  
107  module.exports = {
108    TestProvider,
109  
110    startRPCMockServer
111  }