From 4cd3a3117e2b01da5d8e017b246a2f3bc7c65918 Mon Sep 17 00:00:00 2001 From: holgerd77 Date: Mon, 8 Jun 2020 23:28:22 +0200 Subject: [PATCH] Refactored RPC test methods --- test/rpc/eth/getBlockByHash.js | 189 ++++----------- test/rpc/eth/getBlockByNumber.js | 149 ++++-------- .../rpc/eth/getBlockTransactionCountByHash.js | 154 ++++--------- test/rpc/eth/protocolVersion.js | 41 ++-- test/rpc/helpers.js | 30 +++ test/rpc/net/listening.js | 93 ++++---- test/rpc/net/peerCount.js | 38 ++- test/rpc/net/version.js | 216 +++++------------- test/rpc/util.js | 5 +- test/rpc/web3/clientVersion.js | 99 ++++---- test/rpc/web3/sha3.js | 150 +++++------- 11 files changed, 398 insertions(+), 766 deletions(-) diff --git a/test/rpc/eth/getBlockByHash.js b/test/rpc/eth/getBlockByHash.js index 789a56e..c09c35f 100644 --- a/test/rpc/eth/getBlockByHash.js +++ b/test/rpc/eth/getBlockByHash.js @@ -1,176 +1,81 @@ const test = require('tape') -const request = require('supertest') const { INVALID_PARAMS } = require('../../../lib/rpc/error-code') -const { startRPC, closeRPC, createManager, createNode } = require('../helpers') +const { baseSetup, params, baseRequest } = require('../helpers') const { checkError } = require('../util') -test('call eth_getBlockByHash with valid arguments', t => { - const manager = createManager(createNode()) - const server = startRPC(manager.getMethods()) +const method = 'eth_getBlockByHash' - const req = { - jsonrpc: '2.0', - method: 'eth_getBlockByHash', - params: [ - '0x910abca1728c53e8d6df870dd7af5352e974357dc58205dea1676be17ba6becf', - true - ], - id: 1 - } +test(`${method}: call with valid arguments`, t => { + const server = baseSetup() - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(res => { - if (res.body.result.number !== 444444) { - throw new Error('number is not 444444') - } - }) - .end((err, res) => { - closeRPC(server) - t.end(err) - }) + const req = params(method, [ + '0x910abca1728c53e8d6df870dd7af5352e974357dc58205dea1676be17ba6becf', + true + ]) + const expectRes = res => { + let msg = 'should return the correct number' + t.equal(res.body.result.number, 444444, msg) + } + baseRequest(t, server, req, 200, expectRes) }) -test('call eth_getBlockByHash with false for second argument', t => { - const manager = createManager(createNode()) - const server = startRPC(manager.getMethods()) - - const req = { - jsonrpc: '2.0', - method: 'eth_getBlockByHash', - params: [ - '0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae', - false - ], - id: 1 +test(`${method}: call with false for second argument`, t => { + const server = baseSetup() + + const req = params(method, [ + '0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae', + false + ]) + const expectRes = res => { + let msg = 'should return the correct number' + t.equal(res.body.result.number, 444444, msg) + msg = 'should return only the hashes of the transactions' + t.equal(typeof (res.body.result.transactions[0]), 'string', msg) } - - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(res => { - if (res.body.result.number !== 444444) { - throw new Error('number is not 444444') - } - if (typeof res.body.result.transactions[0] !== 'string') { - throw new Error('only the hashes of the transactions') - } - }) - .end((err, res) => { - closeRPC(server) - t.end(err) - }) + baseRequest(t, server, req, 200, expectRes) }) -test('call eth_getBlockByHash with invalid block hash without 0x', t => { - const manager = createManager(createNode()) - const server = startRPC(manager.getMethods()) +test(`${method}: call with invalid block hash without 0x`, t => { + const server = baseSetup() - const req = { - jsonrpc: '2.0', - method: 'eth_getBlockByHash', - params: ['WRONG BLOCK NUMBER', true], - id: 1 - } - const checkInvalidParams = checkError( + const req = params(method, ['WRONG BLOCK NUMBER', true]) + const expectRes = checkError( + t, INVALID_PARAMS, 'invalid argument 0: hex string without 0x prefix' ) - - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(checkInvalidParams) - .end(err => { - closeRPC(server) - t.end(err) - }) + baseRequest(t, server, req, 200, expectRes) }) -test('call eth_getBlockByHash with invalid hex string as block hash', t => { - const manager = createManager(createNode()) - const server = startRPC(manager.getMethods()) +test(`${method}: call with invalid hex string as block hash`, t => { + const server = baseSetup() - const req = { - jsonrpc: '2.0', - method: 'eth_getBlockByHash', - params: ['0xWRONG BLOCK NUMBER', true], - id: 1 - } - const checkInvalidParams = checkError( + const req = params(method, ['0xWRONG BLOCK NUMBER', true]) + const expectRes = checkError( + t, INVALID_PARAMS, 'invalid argument 0: invalid block hash' ) - - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(checkInvalidParams) - .end(err => { - closeRPC(server) - t.end(err) - }) + baseRequest(t, server, req, 200, expectRes) }) test('call eth_getBlockByHash without second parameter', t => { - const manager = createManager(createNode()) - const server = startRPC(manager.getMethods()) - - const req = { - jsonrpc: '2.0', - method: 'eth_getBlockByHash', - params: ['0x0'], - id: 1 - } + const server = baseSetup() - const checkInvalidParams = checkError( + const req = params(method, ['0x0']) + const expectRes = checkError( + t, INVALID_PARAMS, 'missing value for required argument 1' ) - - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(checkInvalidParams) - .end(err => { - closeRPC(server) - t.end(err) - }) + baseRequest(t, server, req, 200, expectRes) }) test('call eth_getBlockByHash with invalid second parameter', t => { - const manager = createManager(createNode()) - const server = startRPC(manager.getMethods()) - - const req = { - jsonrpc: '2.0', - method: 'eth_getBlockByHash', - params: ['0x0', 'INVALID PARAMETER'], - id: 1 - } - - const checkInvalidParams = checkError(INVALID_PARAMS) + const server = baseSetup() - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(checkInvalidParams) - .end(err => { - closeRPC(server) - t.end(err) - }) + const req = params(method, ['0x0', 'INVALID PARAMETER']) + const expectRes = checkError(t, INVALID_PARAMS) + baseRequest(t, server, req, 200, expectRes) }) diff --git a/test/rpc/eth/getBlockByNumber.js b/test/rpc/eth/getBlockByNumber.js index b58b6e1..5438009 100644 --- a/test/rpc/eth/getBlockByNumber.js +++ b/test/rpc/eth/getBlockByNumber.js @@ -1,7 +1,6 @@ const test = require('tape') -const request = require('supertest') const { INVALID_PARAMS } = require('../../../lib/rpc/error-code') -const { startRPC, closeRPC, createManager, createNode } = require('../helpers') +const { startRPC, createManager, createNode, params, baseRequest } = require('../helpers') const { checkError } = require('../util') function createBlockchain () { @@ -18,139 +17,77 @@ function createBlockchain () { } } -test('call eth_getBlockByNumber with valid arguments', t => { +const method = 'eth_getBlockByNumber' + +test(`${method}: call with valid arguments`, t => { const manager = createManager(createNode({ blockchain: createBlockchain() })) const server = startRPC(manager.getMethods()) - const req = { - jsonrpc: '2.0', - method: 'eth_getBlockByNumber', - params: ['0x1', true], - id: 1 + const req = params(method, ['0x1', true]) + const expectRes = res => { + const msg = 'should return the correct number' + if (res.body.result.number !== 1) { + throw new Error(msg) + } else { + t.pass(msg) + } } - - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(res => { - if (res.body.result.number !== 1) { - throw new Error('number is not 1') - } - }) - .end((err, res) => { - closeRPC(server) - t.end(err) - }) + baseRequest(t, server, req, 200, expectRes) }) -test('call eth_getBlockByNumber with false for second argument', t => { +test(`${method}: call with false for second argument`, t => { const manager = createManager(createNode({ blockchain: createBlockchain() })) const server = startRPC(manager.getMethods()) - const req = { - jsonrpc: '2.0', - method: 'eth_getBlockByNumber', - params: ['0x1', false], - id: 1 + const req = params(method, ['0x1', false]) + const expectRes = res => { + let msg = 'should return the correct number' + if (res.body.result.number !== 1) { + throw new Error(msg) + } else { + t.pass(msg) + } + msg = 'should return only the hashes of the transactions' + if (typeof res.body.result.transactions[0] !== 'string') { + throw new Error(msg) + } else { + t.pass(msg) + } } - - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(res => { - if (res.body.result.number !== 1) { - throw new Error('number is not 1') - } - if (typeof res.body.result.transactions[0] !== 'string') { - throw new Error('only the hashes of the transactions') - } - }) - .end((err, res) => { - closeRPC(server) - t.end(err) - }) + baseRequest(t, server, req, 200, expectRes) }) -test('call eth_getBlockByNumber with invalid block number', t => { +test(`${method}: call with invalid block number`, t => { const manager = createManager(createNode({ blockchain: createBlockchain() })) const server = startRPC(manager.getMethods()) - const req = { - jsonrpc: '2.0', - method: 'eth_getBlockByNumber', - params: ['WRONG BLOCK NUMBER', true], - id: 1 - } - const checkInvalidParams = checkError( + const req = params(method, ['WRONG BLOCK NUMBER', true]) + const expectRes = checkError( + t, INVALID_PARAMS, 'invalid argument 0: hex string without 0x prefix' ) - - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(checkInvalidParams) - .end(err => { - closeRPC(server) - t.end(err) - }) + baseRequest(t, server, req, 200, expectRes) }) -test('call eth_getBlockByNumber without second parameter', t => { +test(`${method}: call without second parameter`, t => { const manager = createManager(createNode({ blockchain: createBlockchain() })) const server = startRPC(manager.getMethods()) - const req = { - jsonrpc: '2.0', - method: 'eth_getBlockByNumber', - params: ['0x0'], - id: 1 - } - - const checkInvalidParams = checkError( + const req = params(method, ['0x0']) + const expectRes = checkError( + t, INVALID_PARAMS, 'missing value for required argument 1' ) - - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(checkInvalidParams) - .end(err => { - closeRPC(server) - t.end(err) - }) + baseRequest(t, server, req, 200, expectRes) }) -test('call eth_getBlockByNumber with invalid second parameter', t => { +test(`${method}: call with invalid second parameter`, t => { const manager = createManager(createNode({ blockchain: createBlockchain() })) const server = startRPC(manager.getMethods()) - const req = { - jsonrpc: '2.0', - method: 'eth_getBlockByNumber', - params: ['0x0', 'INVALID PARAMETER'], - id: 1 - } - - const checkInvalidParams = checkError(INVALID_PARAMS) - - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(checkInvalidParams) - .end(err => { - closeRPC(server) - t.end(err) - }) + const req = params(method, ['0x0', 'INVALID PARAMETER']) + const expectRes = checkError(t, INVALID_PARAMS) + baseRequest(t, server, req, 200, expectRes) }) diff --git a/test/rpc/eth/getBlockTransactionCountByHash.js b/test/rpc/eth/getBlockTransactionCountByHash.js index 64eb7d8..8953b11 100644 --- a/test/rpc/eth/getBlockTransactionCountByHash.js +++ b/test/rpc/eth/getBlockTransactionCountByHash.js @@ -1,142 +1,68 @@ const test = require('tape') -const request = require('supertest') const { INVALID_PARAMS } = require('../../../lib/rpc/error-code') -const { startRPC, closeRPC, createManager, createNode } = require('../helpers') +const { baseSetup, params, baseRequest } = require('../helpers') const { checkError } = require('../util') -test('call eth_getBlockTransactionCountByHash with valid arguments', t => { - const manager = createManager(createNode()) - const server = startRPC(manager.getMethods()) - - const req = { - jsonrpc: '2.0', - method: 'eth_getBlockTransactionCountByHash', - params: [ - '0x910abca1728c53e8d6df870dd7af5352e974357dc58205dea1676be17ba6becf' - ], - id: 1 +const method = 'eth_getBlockTransactionCountByHash' + +test(`${method}: call with valid arguments`, t => { + const server = baseSetup() + + const req = params(method, [ + '0x910abca1728c53e8d6df870dd7af5352e974357dc58205dea1676be17ba6becf' + ]) + const expectRes = res => { + const msg = 'transaction count should be 1' + if (res.body.result !== `0x1`) { + throw new Error(msg) + } else { + t.pass(msg) + } } - - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(res => { - if (res.body.result !== `0x1`) { - throw new Error('transaction count is not 1') - } - }) - .end((err, res) => { - closeRPC(server) - t.end(err) - }) + baseRequest(t, server, req, 200, expectRes) }) -test('call eth_getBlockTransactionCountByHash with invalid block hash without 0x', t => { - const manager = createManager(createNode()) - const server = startRPC(manager.getMethods()) +test(`${method}: call with invalid block hash without 0x`, t => { + const server = baseSetup() - const req = { - jsonrpc: '2.0', - method: 'eth_getBlockTransactionCountByHash', - params: ['WRONG BLOCK NUMBER'], - id: 1 - } - const checkInvalidParams = checkError( + const req = params(method, ['WRONG BLOCK NUMBER']) + const expectRes = checkError( + t, INVALID_PARAMS, 'invalid argument 0: hex string without 0x prefix' ) - - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(checkInvalidParams) - .end(err => { - closeRPC(server) - t.end(err) - }) + baseRequest(t, server, req, 200, expectRes) }) -test('call eth_getBlockTransactionCountByHash with invalid hex string as block hash', t => { - const manager = createManager(createNode()) - const server = startRPC(manager.getMethods()) +test(`${method}: call with invalid hex string as block hash`, t => { + const server = baseSetup() - const req = { - jsonrpc: '2.0', - method: 'eth_getBlockTransactionCountByHash', - params: ['0xWRONG BLOCK NUMBER', true], - id: 1 - } - const checkInvalidParams = checkError( + const req = params(method, ['0xWRONG BLOCK NUMBER', true]) + const expectRes = checkError( + t, INVALID_PARAMS, 'invalid argument 0: invalid block hash' ) - - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(checkInvalidParams) - .end(err => { - closeRPC(server) - t.end(err) - }) + baseRequest(t, server, req, 200, expectRes) }) -test('call eth_getBlockTransactionCountByHash without first parameter', t => { - const manager = createManager(createNode()) - const server = startRPC(manager.getMethods()) +test(`${method}: call without first parameter`, t => { + const server = baseSetup() - const req = { - jsonrpc: '2.0', - method: 'eth_getBlockTransactionCountByHash', - params: [], - id: 1 - } - - const checkInvalidParams = checkError( + const req = params(method, []) + const expectRes = checkError( + t, INVALID_PARAMS, 'missing value for required argument 0' ) - - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(checkInvalidParams) - .end(err => { - closeRPC(server) - t.end(err) - }) + baseRequest(t, server, req, 200, expectRes) }) -test('call eth_getBlockTransactionCountByHash with invalid second parameter', t => { - const manager = createManager(createNode()) - const server = startRPC(manager.getMethods()) - - const req = { - jsonrpc: '2.0', - method: 'eth_getBlockTransactionCountByHash', - params: ['INVALID PARAMETER'], - id: 1 - } - - const checkInvalidParams = checkError(INVALID_PARAMS) +test(`${method}: call with invalid second parameter`, t => { + const server = baseSetup() - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(checkInvalidParams) - .end(err => { - closeRPC(server) - t.end(err) - }) + const req = params(method, ['INVALID PARAMETER']) + const expectRes = checkError(t, INVALID_PARAMS) + baseRequest(t, server, req, 200, expectRes) }) diff --git a/test/rpc/eth/protocolVersion.js b/test/rpc/eth/protocolVersion.js index f075bfa..1ed112f 100644 --- a/test/rpc/eth/protocolVersion.js +++ b/test/rpc/eth/protocolVersion.js @@ -1,32 +1,21 @@ const test = require('tape') -const request = require('supertest') -const { startRPC, closeRPC, createManager, createNode } = require('../helpers') +const { baseSetup, params, baseRequest } = require('../helpers') -test('call eth_protocolVersion ', t => { - const manager = createManager(createNode()) - const server = startRPC(manager.getMethods()) +const method = 'eth_protocolVersion' - const req = { - jsonrpc: '2.0', - method: 'eth_protocolVersion', - params: [], - id: 1 - } +test(`${method}: call`, t => { + const server = baseSetup() - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(res => { - const responseBlob = res.body - if (typeof responseBlob.result !== 'string') { - throw new Error('Protocol version is not a string') - } - }) - .end((err, res) => { - closeRPC(server) - t.end(err) - }) + const req = params(method, []) + const expectRes = res => { + const responseBlob = res.body + const msg = 'protocol version should be a string' + if (typeof responseBlob.result !== 'string') { + throw new Error(msg) + } else { + t.pass(msg) + } + } + baseRequest(t, server, req, 200, expectRes) }) diff --git a/test/rpc/helpers.js b/test/rpc/helpers.js index d0356e9..1ae21a8 100644 --- a/test/rpc/helpers.js +++ b/test/rpc/helpers.js @@ -1,4 +1,5 @@ const jayson = require('jayson') +const request = require('supertest') const Common = require('ethereumjs-common').default const Manager = require('../../lib/rpc') @@ -45,5 +46,34 @@ module.exports = { common: trueNodeConfig.commonChain, opened: trueNodeConfig.opened } + }, + + baseSetup () { + const manager = module.exports.createManager(module.exports.createNode()) + const server = module.exports.startRPC(manager.getMethods()) + return server + }, + + params (method, params) { + const req = { + jsonrpc: '2.0', + method: method, + params: params, + id: 1 + } + return req + }, + + baseRequest (t, server, req, expect, expectRes) { + request(server) + .post('/') + .set('Content-Type', 'application/json') + .send(req) + .expect(expect) + .expect(expectRes) + .end((err, res) => { + module.exports.closeRPC(server) + t.end(err) + }) } } diff --git a/test/rpc/net/listening.js b/test/rpc/net/listening.js index ff610e9..cda2996 100644 --- a/test/rpc/net/listening.js +++ b/test/rpc/net/listening.js @@ -1,68 +1,53 @@ const test = require('tape') -const request = require('supertest') -const { startRPC, closeRPC, createManager, createNode } = require('../helpers') +const { startRPC, createManager, createNode, params, baseRequest } = require('../helpers') -test('call net_listening while listening', t => { +const method = 'net_listening' + +test(`${method}: call while listening`, t => { const manager = createManager(createNode({ opened: true })) const server = startRPC(manager.getMethods()) - const req = { - jsonrpc: '2.0', - method: 'net_listening', - params: [], - id: 1 + const req = params(method, []) + const expectRes = res => { + const { result } = res.body + let msg = 'result should be a boolean' + if (typeof result !== 'boolean') { + throw new Error(msg) + } else { + t.pass(msg) + } + + msg = 'should be listening' + if (result !== true) { + throw new Error(msg) + } else { + t.pass(msg) + } } - - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(res => { - const { result } = res.body - if (typeof result !== 'boolean') { - throw new Error('Result should be a boolean, but is not') - } - - if (result !== true) { - throw new Error('Not listening, when it should be') - } - }) - .end((err, res) => { - closeRPC(server) - t.end(err) - }) + baseRequest(t, server, req, 200, expectRes) }) -test('call net_listening while not listening', t => { +test(`${method}: call while not listening`, t => { const manager = createManager(createNode({ opened: false })) const server = startRPC(manager.getMethods()) - const req = { - jsonrpc: '2.0', - method: 'net_listening', - params: [], - id: 1 + const req = params(method, []) + const expectRes = res => { + const { result } = res.body + let msg = 'result should be a boolean' + if (typeof result !== 'boolean') { + throw new Error(msg) + } else { + t.pass(msg) + } + + msg = 'should not be listening' + if (result !== false) { + throw new Error(msg) + } else { + t.pass(msg) + } } - - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(res => { - const { result } = res.body - if (typeof result !== 'boolean') { - throw new Error('Result should be a boolean, but is not') - } - - if (result !== false) { - throw new Error('Listening, when it not should be') - } - }) - .end((err, res) => { - closeRPC(server) - t.end(err) - }) + baseRequest(t, server, req, 200, expectRes) }) diff --git a/test/rpc/net/peerCount.js b/test/rpc/net/peerCount.js index a8da5a2..7bb4709 100644 --- a/test/rpc/net/peerCount.js +++ b/test/rpc/net/peerCount.js @@ -1,32 +1,22 @@ const test = require('tape') -const request = require('supertest') -const { startRPC, closeRPC, createManager, createNode } = require('../helpers') +const { startRPC, createManager, createNode, params, baseRequest } = require('../helpers') -test('call net_peerCount', t => { +const method = 'net_peerCount' + +test(`${method}: call`, t => { const manager = createManager(createNode({ opened: true })) const server = startRPC(manager.getMethods()) - const req = { - jsonrpc: '2.0', - method: 'net_peerCount', - params: [], - id: 1 + const req = params(method, []) + const expectRes = res => { + const { result } = res.body + const msg = 'result should be a hex number' + if (result.substring(0, 2) !== '0x') { + throw new Error(msg) + } else { + t.pass(msg) + } } - - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(res => { - const { result } = res.body - if (result.substring(0, 2) !== '0x') { - throw new Error('Result should be a hex number, but is not') - } - }) - .end((err, res) => { - closeRPC(server) - t.end(err) - }) + baseRequest(t, server, req, 200, expectRes) }) diff --git a/test/rpc/net/version.js b/test/rpc/net/version.js index d7377a4..771850e 100644 --- a/test/rpc/net/version.js +++ b/test/rpc/net/version.js @@ -1,194 +1,88 @@ const test = require('tape') -const request = require('supertest') const Common = require('ethereumjs-common').default -const { startRPC, closeRPC, createManager, createNode } = require('../helpers') +const { startRPC, createManager, createNode, baseSetup, params, baseRequest } = require('../helpers') -test('call net_version on ropsten', t => { - const manager = createManager(createNode({ opened: true, commonChain: new Common('ropsten') })) - const server = startRPC(manager.getMethods()) +const method = 'net_version' - const req = { - jsonrpc: '2.0', - method: 'net_version', - params: [], - id: 1 +function compareResult (t, result, chainId) { + let msg = 'result should be a string' + if (typeof result !== 'string') { + throw new Error(msg) + } else { + t.pass(msg) } - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(res => { - const { result } = res.body - - if (typeof result !== 'string') { - throw new Error('Result should be a string, but is not') - } - - if (result.length === 0) { - throw new Error('Empty result string') - } + msg = 'result string should not be empty' + if (result.length === 0) { + throw new Error(msg) + } else { + t.pass(msg) + } - if (result !== '3') { - throw new Error(`Incorrect chain ID. Expected: 3, Received: ${result}`) - } - }) - .end((err, res) => { - closeRPC(server) - t.end(err) - }) -}) + msg = `should be the correct chain ID (expected: ${chainId}, received: ${result})` + if (result !== chainId) { + throw new Error(msg) + } else { + t.pass(msg) + } +} -test('call net_version on mainnet', t => { - const manager = createManager(createNode()) +test(`${method}: call on ropsten`, t => { + const manager = createManager(createNode({ opened: true, commonChain: new Common('ropsten') })) const server = startRPC(manager.getMethods()) - const req = { - jsonrpc: '2.0', - method: 'net_version', - params: [], - id: 1 + const req = params(method, []) + const expectRes = res => { + const { result } = res.body + compareResult(t, result, '3') } + baseRequest(t, server, req, 200, expectRes) +}) - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(res => { - const { result } = res.body - - if (typeof result !== 'string') { - throw new Error('Result should be a string, but is not') - } - - if (result.length === 0) { - throw new Error('Empty result string') - } +test(`${method}: call on mainnet`, t => { + const server = baseSetup() - if (result !== '1') { - throw new Error(`Incorrect chain ID. Expected: 1, Received: ${result}`) - } - }) - .end((err, res) => { - closeRPC(server) - t.end(err) - }) + const req = params(method, []) + const expectRes = res => { + const { result } = res.body + compareResult(t, result, '1') + } + baseRequest(t, server, req, 200, expectRes) }) -test('call net_version on rinkeby', t => { +test(`${method}: call on rinkeby`, t => { const manager = createManager(createNode({ opened: true, commonChain: new Common('rinkeby') })) const server = startRPC(manager.getMethods()) - const req = { - jsonrpc: '2.0', - method: 'net_version', - params: [], - id: 1 + const req = params(method, []) + const expectRes = res => { + const { result } = res.body + compareResult(t, result, '4') } - - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(res => { - const { result } = res.body - - if (typeof result !== 'string') { - throw new Error('Result should be a string, but is not') - } - - if (result.length === 0) { - throw new Error('Empty result string') - } - - if (result !== '4') { - throw new Error(`Incorrect chain ID. Expected: 4, Received: ${result}`) - } - }) - .end((err, res) => { - closeRPC(server) - t.end(err) - }) + baseRequest(t, server, req, 200, expectRes) }) -test('call net_version on kovan', t => { +test(`${method}: call on kovan`, t => { const manager = createManager(createNode({ opened: true, commonChain: new Common('kovan') })) const server = startRPC(manager.getMethods()) - const req = { - jsonrpc: '2.0', - method: 'net_version', - params: [], - id: 1 + const req = params(method, []) + const expectRes = res => { + const { result } = res.body + compareResult(t, result, '42') } - - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(res => { - const { result } = res.body - - if (typeof result !== 'string') { - throw new Error('Result should be a string, but is not') - } - - if (result.length === 0) { - throw new Error('Empty result string') - } - - if (result !== '42') { - throw new Error( - `Incorrect chain ID. Expected: 42, Received: ${result}` - ) - } - }) - .end((err, res) => { - closeRPC(server) - t.end(err) - }) + baseRequest(t, server, req, 200, expectRes) }) -test('call net_version on goerli', t => { +test(`${method}: call on goerli`, t => { const manager = createManager(createNode({ opened: true, commonChain: new Common('goerli') })) const server = startRPC(manager.getMethods()) - const req = { - jsonrpc: '2.0', - method: 'net_version', - params: [], - id: 1 + const req = params(method, []) + const expectRes = res => { + const { result } = res.body + compareResult(t, result, '5') } - - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(res => { - const { result } = res.body - - if (typeof result !== 'string') { - throw new Error('Result should be a string, but is not') - } - - if (result.length === 0) { - throw new Error('Empty result string') - } - - if (result !== '5') { - throw new Error( - `Incorrect chain ID. Expected: 5, Received: ${result}` - ) - } - }) - .end((err, res) => { - closeRPC(server) - t.end(err) - }) + baseRequest(t, server, req, 200, expectRes) }) diff --git a/test/rpc/util.js b/test/rpc/util.js index ab96b1f..f9da051 100644 --- a/test/rpc/util.js +++ b/test/rpc/util.js @@ -1,6 +1,6 @@ module.exports = { - checkError (expectedCode, expectedMessage) { - return function (res) { + checkError (t, expectedCode, expectedMessage) { + return (res) => { if (!res.body.error) { throw new Error('should return an error object') } @@ -10,6 +10,7 @@ module.exports = { if (expectedMessage && res.body.error.message !== expectedMessage) { throw new Error(`should have an error message "${expectedMessage}"`) } + t.pass('should return error object with error code and message') } } } diff --git a/test/rpc/web3/clientVersion.js b/test/rpc/web3/clientVersion.js index d4ee13a..dc5ea70 100644 --- a/test/rpc/web3/clientVersion.js +++ b/test/rpc/web3/clientVersion.js @@ -1,59 +1,60 @@ const test = require('tape') const { platform } = require('os') -const request = require('supertest') -const { startRPC, closeRPC, createManager, createNode } = require('../helpers') +const { baseSetup, params, baseRequest } = require('../helpers') -test('call web3_clientVersion', t => { - const manager = createManager(createNode()) - const server = startRPC(manager.getMethods()) +const method = 'web3_clientVersion' - const req = { - jsonrpc: '2.0', - method: 'web3_clientVersion', - params: [], - id: 1 - } +test(`${method}: call`, t => { + const server = baseSetup() - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(res => { - const { result } = res.body - const { version } = require('../../../package.json') - const expectedClientTitle = 'EthereumJS' - const expectedPackageVersion = version - const expectedPlatform = platform() - const expectedNodeVersion = `node${process.version.substring(1)}` + const req = params(method, []) + const expectRes = res => { + const { result } = res.body + const { version } = require('../../../package.json') + const expectedClientTitle = 'EthereumJS' + const expectedPackageVersion = version + const expectedPlatform = platform() + const expectedNodeVersion = `node${process.version.substring(1)}` - if (result.length === 0) { - throw new Error('Empty result string') - } + let msg = 'result string should not be empty' + if (result.length === 0) { + throw new Error(msg) + } else { + t.pass(msg) + } - const [ - actualClientTitle, - actualPackageVersion, - actualPlatform, - actualNodeVersion - ] = result.split('/') + const [ + actualClientTitle, + actualPackageVersion, + actualPlatform, + actualNodeVersion + ] = result.split('/') - if (actualClientTitle !== expectedClientTitle) { - throw new Error('Incorrect client title') - } - if (actualPackageVersion !== expectedPackageVersion) { - throw new Error('Incorrect package version') - } - if (actualPlatform !== expectedPlatform) { - throw new Error('Incorrect platform') - } - if (actualNodeVersion !== expectedNodeVersion) { - throw new Error('Incorrect Node.js version') - } - }) - .end((err, res) => { - closeRPC(server) - t.end(err) - }) + msg = 'client title should be correct' + if (actualClientTitle !== expectedClientTitle) { + throw new Error(msg) + } else { + t.pass(msg) + } + msg = 'package version should be correct' + if (actualPackageVersion !== expectedPackageVersion) { + throw new Error(msg) + } else { + t.pass(msg) + } + msg = 'platform should be correct' + if (actualPlatform !== expectedPlatform) { + throw new Error(msg) + } else { + t.pass(msg) + } + msg = 'Node.js version should be correct' + if (actualNodeVersion !== expectedNodeVersion) { + throw new Error(msg) + } else { + t.pass(msg) + } + } + baseRequest(t, server, req, 200, expectRes) }) diff --git a/test/rpc/web3/sha3.js b/test/rpc/web3/sha3.js index 5c12a73..caeabb7 100644 --- a/test/rpc/web3/sha3.js +++ b/test/rpc/web3/sha3.js @@ -1,107 +1,81 @@ const test = require('tape') -const request = require('supertest') -const { startRPC, closeRPC, createManager, createNode } = require('../helpers') +const { baseSetup, params, baseRequest } = require('../helpers') -test('call web3_sha3 with one valid parameter', t => { - const manager = createManager(createNode()) - const server = startRPC(manager.getMethods()) +const method = 'web3_sha3' - const req = { - jsonrpc: '2.0', - method: 'web3_sha3', - params: ['0x68656c6c6f20776f726c64'], - id: 1 +function compareErrorCode (t, error, errorCode) { + const msg = `should return the correct error code (expected: ${errorCode}, received: ${error.code})` + if (error.code !== errorCode) { + throw new Error(msg) + } else { + t.pass(msg) } +} - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(res => { - const { result } = res.body - if (result.length === 0) { - throw new Error('Empty result string') - } +function compareErrorMsg (t, error, errorMsg) { + const msg = `should return "${errorMsg}" error message` + if ( + error.message !== errorMsg + ) { + throw new Error(msg) + } else { + t.pass(msg) + } +} - if ( - result !== - '0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad' - ) { - throw new Error('Hash returns incorrect value') - } - }) - .end((err, res) => { - closeRPC(server) - t.end(err) - }) -}) +test(`${method}: call with one valid parameter`, t => { + const server = baseSetup() -test('call web3_sha3 with one non-hex parameter', t => { - const manager = createManager(createNode()) - const server = startRPC(manager.getMethods()) + const req = params(method, ['0x68656c6c6f20776f726c64']) + const expectRes = res => { + const { result } = res.body + let msg = 'result string should not be empty' + if (result.length === 0) { + throw new Error(msg) + } else { + t.pass(msg) + } - const req = { - jsonrpc: '2.0', - method: 'web3_sha3', - params: ['hello world'], - id: 1 + msg = 'should return the correct hash value' + if ( + result !== + '0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad' + ) { + throw new Error(msg) + } else { + t.pass(msg) + } } + baseRequest(t, server, req, 200, expectRes) +}) - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(res => { - const { error } = res.body - - if (error.code !== -32602) { - throw new Error('Incorrect error code') - } +test(`${method}: call with one non-hex parameter`, t => { + const server = baseSetup() - if ( - error.message !== 'invalid argument 0: hex string without 0x prefix' - ) { - throw new Error('Incorrect error message') - } - }) - .end((err, res) => { - closeRPC(server) - t.end(err) - }) -}) + const req = params(method, ['hello world']) + const expectRes = res => { + const { error } = res.body -test('call web3_sha3 with no parameters', t => { - const manager = createManager(createNode()) - const server = startRPC(manager.getMethods()) + compareErrorCode(t, error, -32602) - const req = { - jsonrpc: '2.0', - method: 'web3_sha3', - params: [], - id: 1 + const errorMsg = 'invalid argument 0: hex string without 0x prefix' + compareErrorMsg(t, error, errorMsg) } + baseRequest(t, server, req, 200, expectRes) +}) - request(server) - .post('/') - .set('Content-Type', 'application/json') - .send(req) - .expect(200) - .expect(res => { - const { error } = res.body +test(`${method}: call with no parameters`, t => { + const server = baseSetup() - if (error.code !== -32602) { - throw new Error('Incorrect error code') - } + const req = params(method, []) + const expectRes = res => { + const { error } = res.body - if (error.message !== 'missing value for required argument 0') { - throw new Error('Incorrect error message') - } - }) - .end((err, res) => { - closeRPC(server) - t.end(err) - }) + compareErrorCode(t, error, -32602) + + const errorMsg = 'missing value for required argument 0' + compareErrorMsg(t, error, errorMsg) + } + baseRequest(t, server, req, 200, expectRes) })