Use Geth for contract tests

This commit is contained in:
Alex Browne
2018-05-21 13:56:32 -07:00
parent da3f783a9f
commit 577156fe5f
22 changed files with 337 additions and 11 deletions

View File

@@ -281,7 +281,6 @@ export class Web3Wrapper {
};
const payload = {
jsonrpc: '2.0',
id: this._jsonRpcRequestId++,
method: 'eth_getLogs',
params: [serializedFilter],
};
@@ -403,8 +402,44 @@ export class Web3Wrapper {
}
return receipt;
}
/**
* Start the CPU mining process with the given number of threads and
* generate a new DAG if need be.
* @param threads The number of threads to mine on.
*/
public async minerStartAsync(threads: number = 1): Promise<void> {
await this._sendRawPayloadAsync<boolean>({
method: 'miner_start',
params: [threads],
});
}
/**
* Stop the CPU mining process.
* @param threads The number of threads to mine on.
*/
public async minerStopAsync(): Promise<void> {
await this._sendRawPayloadAsync<boolean>({ method: 'miner_stop', params: [] });
}
/**
* Returns true if client is actively mining new blocks.
* @returns A boolean indicating whether the node is currently mining.
*/
public async isMiningAsync(): Promise<boolean> {
const isMining = await promisify<boolean>(this._web3.eth.getMining)();
return isMining;
}
/**
* Sets the current head of the local chain by block number. Note, this is a
* destructive action and may severely damage your chain. Use with extreme
* caution.
* @param blockNumber The block number to reset to.
*/
public async setHeadAsync(blockNumber: number): Promise<void> {
await this._sendRawPayloadAsync<void>({ method: 'debug_setHead', params: [this._web3.toHex(blockNumber)] });
}
private async _sendRawPayloadAsync<A>(payload: Partial<JSONRPCRequestPayload>): Promise<A> {
const sendAsync = this._web3.currentProvider.sendAsync.bind(this._web3.currentProvider);
payload.id = this._jsonRpcRequestId++;
const response = await promisify<JSONRPCResponsePayload>(sendAsync)(payload);
const result = response.result;
return result;

View File

@@ -2,6 +2,7 @@ import * as chai from 'chai';
import * as Ganache from 'ganache-core';
import 'make-promises-safe';
import 'mocha';
import * as Web3 from 'web3';
import { Web3Wrapper } from '../src';
@@ -37,4 +38,22 @@ describe('Web3Wrapper tests', () => {
expect(networkId).to.be.equal(NETWORK_ID);
});
});
describe('mining functions', () => {
it('starts and stops the miner', async () => {
// Note: depending on our provider, the miner may or may not already
// be mining. To account for both conditions, we have what might
// look like too many stops and starts here, but it is necessary.
await web3Wrapper.minerStopAsync();
let isMining = await web3Wrapper.isMiningAsync();
expect(isMining).to.be.false();
await web3Wrapper.minerStartAsync(1);
isMining = await web3Wrapper.isMiningAsync();
expect(isMining).to.be.true();
isMining = await web3Wrapper.isMiningAsync();
expect(isMining).to.be.true();
await web3Wrapper.minerStopAsync();
isMining = await web3Wrapper.isMiningAsync();
expect(isMining).to.be.false();
});
});
});