Add tests for BridgeValidators
This commit is contained in:
parent
cf08452498
commit
40a07ebd12
|
@ -25,6 +25,7 @@ contract BridgeValidators is IBridgeValidators, Ownable, OwnedUpgradeabilityStor
|
|||
}
|
||||
|
||||
function addValidator(address _validator) public onlyOwner {
|
||||
require(_validator != address(0));
|
||||
assert(validators(_validator) != true);
|
||||
setValidatorCount(validatorCount().add(1));
|
||||
setValidator(_validator, true);
|
||||
|
@ -33,6 +34,7 @@ contract BridgeValidators is IBridgeValidators, Ownable, OwnedUpgradeabilityStor
|
|||
|
||||
function removeValidator(address _validator) public onlyOwner {
|
||||
require(validatorCount() > requiredSignatures());
|
||||
require(isValidator(_validator));
|
||||
setValidator(_validator, false);
|
||||
setValidatorCount(validatorCount().sub(1));
|
||||
ValidatorRemoved(_validator);
|
||||
|
|
|
@ -213,6 +213,7 @@ contract BridgeValidators is IBridgeValidators, Ownable, OwnedUpgradeabilityStor
|
|||
}
|
||||
|
||||
function addValidator(address _validator) public onlyOwner {
|
||||
require(_validator != address(0));
|
||||
assert(validators(_validator) != true);
|
||||
setValidatorCount(validatorCount().add(1));
|
||||
setValidator(_validator, true);
|
||||
|
@ -221,6 +222,7 @@ contract BridgeValidators is IBridgeValidators, Ownable, OwnedUpgradeabilityStor
|
|||
|
||||
function removeValidator(address _validator) public onlyOwner {
|
||||
require(validatorCount() > requiredSignatures());
|
||||
require(isValidator(_validator));
|
||||
setValidator(_validator, false);
|
||||
setValidatorCount(validatorCount().sub(1));
|
||||
ValidatorRemoved(_validator);
|
||||
|
|
|
@ -6,4 +6,5 @@ require('chai')
|
|||
.should();
|
||||
|
||||
exports.ERROR_MSG = 'VM Exception while processing transaction: revert';
|
||||
exports.ERROR_MSG_OPCODE = 'VM Exception while processing transaction: invalid opcode';
|
||||
exports.ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'
|
||||
|
|
|
@ -0,0 +1,123 @@
|
|||
const BridgeValidators = artifacts.require("BridgeValidators.sol");
|
||||
const {ERROR_MSG, ERROR_MSG_OPCODE, ZERO_ADDRESS} = require('./setup');
|
||||
|
||||
contract('BridgeValidators', async (accounts) => {
|
||||
let token
|
||||
let owner = accounts[0]
|
||||
const user = accounts[1];
|
||||
beforeEach(async () => {
|
||||
bridgeValidators = await BridgeValidators.new();
|
||||
})
|
||||
describe('#initialize', async () => {
|
||||
it('sets values', async () => {
|
||||
// function initialize(uint256 _requiredSignatures, address[] _initialValidators, address _owner) public {
|
||||
'0x0000000000000000000000000000000000000000'.should.be.equal(await bridgeValidators.owner())
|
||||
'0'.should.be.bignumber.equal(await bridgeValidators.validatorCount())
|
||||
false.should.be.equal(await bridgeValidators.isValidator(accounts[0]))
|
||||
false.should.be.equal(await bridgeValidators.isValidator(accounts[1]))
|
||||
false.should.be.equal(await bridgeValidators.isInitialized())
|
||||
'0'.should.be.bignumber.equal(await bridgeValidators.requiredSignatures())
|
||||
await bridgeValidators.initialize(3, [accounts[0], accounts[1]], accounts[2], {from: accounts[2]}).should.be.rejectedWith(ERROR_MSG)
|
||||
await bridgeValidators.initialize(2, [accounts[0], accounts[1]], accounts[2], {from: accounts[2]}).should.be.fulfilled;
|
||||
await bridgeValidators.initialize(2, [accounts[0], accounts[1]], accounts[2], {from: accounts[2]}).should.be.rejectedWith(ERROR_MSG);
|
||||
true.should.be.equal(await bridgeValidators.isInitialized())
|
||||
'2'.should.be.bignumber.equal(await bridgeValidators.requiredSignatures())
|
||||
true.should.be.equal(await bridgeValidators.isValidator(accounts[0]))
|
||||
true.should.be.equal(await bridgeValidators.isValidator(accounts[1]))
|
||||
accounts[2].should.be.equal(await bridgeValidators.owner())
|
||||
'2'.should.be.bignumber.equal(await bridgeValidators.validatorCount())
|
||||
})
|
||||
})
|
||||
|
||||
describe('#addValidator', async () => {
|
||||
let owner = accounts[2];
|
||||
let validators = [accounts[0], accounts[1]];
|
||||
let requiredSignatures = 2;
|
||||
beforeEach(async () => {
|
||||
await bridgeValidators.initialize(requiredSignatures, validators, owner, {from: owner}).should.be.fulfilled
|
||||
'2'.should.be.bignumber.equal(await bridgeValidators.validatorCount())
|
||||
})
|
||||
it('adds validator', async () => {
|
||||
let newValidator = accounts[3];
|
||||
|
||||
false.should.be.equal(await bridgeValidators.isValidator(newValidator))
|
||||
await bridgeValidators.addValidator(newValidator, {from: validators[0]}).should.be.rejectedWith(ERROR_MSG)
|
||||
const {logs} = await bridgeValidators.addValidator(newValidator, {from: owner}).should.be.fulfilled
|
||||
true.should.be.equal(await bridgeValidators.isValidator(newValidator))
|
||||
'3'.should.be.bignumber.equal(await bridgeValidators.validatorCount())
|
||||
logs[0].event.should.be.equal('ValidatorAdded')
|
||||
logs[0].args.should.be.deep.equal({validator: newValidator})
|
||||
})
|
||||
|
||||
it('cannot add already existing validator', async () => {
|
||||
true.should.be.equal(await bridgeValidators.isValidator(validators[0]))
|
||||
await bridgeValidators.addValidator(validators[0], {from: owner}).should.be.rejectedWith(ERROR_MSG_OPCODE)
|
||||
await bridgeValidators.addValidator(ZERO_ADDRESS, {from: owner}).should.be.rejectedWith(ERROR_MSG)
|
||||
'2'.should.be.bignumber.equal(await bridgeValidators.validatorCount())
|
||||
})
|
||||
})
|
||||
|
||||
describe('#removeValidator', async () => {
|
||||
let owner = accounts[2];
|
||||
let validators = [accounts[0], accounts[1], accounts[3]];
|
||||
let requiredSignatures = 2;
|
||||
beforeEach(async () => {
|
||||
await bridgeValidators.initialize(requiredSignatures, validators, owner, {from: owner}).should.be.fulfilled
|
||||
'3'.should.be.bignumber.equal(await bridgeValidators.validatorCount())
|
||||
})
|
||||
|
||||
it('removes validator', async () => {
|
||||
let toRemove = validators[0];
|
||||
true.should.be.equal(await bridgeValidators.isValidator(toRemove))
|
||||
await bridgeValidators.removeValidator(toRemove, {from: validators[0]}).should.be.rejectedWith(ERROR_MSG)
|
||||
const {logs} = await bridgeValidators.removeValidator(toRemove, {from: owner}).should.be.fulfilled
|
||||
false.should.be.equal(await bridgeValidators.isValidator(toRemove))
|
||||
'2'.should.be.bignumber.equal(await bridgeValidators.validatorCount())
|
||||
logs[0].event.should.be.equal('ValidatorRemoved')
|
||||
logs[0].args.should.be.deep.equal({validator: toRemove})
|
||||
})
|
||||
|
||||
it('cannot remove if it will break requiredSignatures', async () => {
|
||||
let toRemove = validators[0];
|
||||
let toRemove2 = validators[1];
|
||||
true.should.be.equal(await bridgeValidators.isValidator(toRemove))
|
||||
true.should.be.equal(await bridgeValidators.isValidator(toRemove))
|
||||
await bridgeValidators.removeValidator(toRemove, {from: owner}).should.be.fulfilled
|
||||
await bridgeValidators.removeValidator(toRemove2, {from: owner}).should.be.rejectedWith(ERROR_MSG)
|
||||
false.should.be.equal(await bridgeValidators.isValidator(toRemove))
|
||||
true.should.be.equal(await bridgeValidators.isValidator(toRemove2))
|
||||
'2'.should.be.bignumber.equal(await bridgeValidators.validatorCount())
|
||||
})
|
||||
|
||||
it('cannot remove non-existent validator', async () => {
|
||||
false.should.be.equal(await bridgeValidators.isValidator(accounts[4]))
|
||||
await bridgeValidators.removeValidator(accounts[4], {from: owner}).should.be.rejectedWith(ERROR_MSG)
|
||||
await bridgeValidators.removeValidator(ZERO_ADDRESS, {from: owner}).should.be.rejectedWith(ERROR_MSG)
|
||||
'3'.should.be.bignumber.equal(await bridgeValidators.validatorCount())
|
||||
})
|
||||
})
|
||||
|
||||
describe.only('#setRequiredSignatures', async () => {
|
||||
let owner = accounts[2];
|
||||
let validators = [accounts[0], accounts[1], accounts[3]];
|
||||
let requiredSignatures = 2;
|
||||
beforeEach(async () => {
|
||||
await bridgeValidators.initialize(requiredSignatures, validators, owner, {from: owner}).should.be.fulfilled
|
||||
'3'.should.be.bignumber.equal(await bridgeValidators.validatorCount())
|
||||
})
|
||||
|
||||
it('sets req signatures', async () => {
|
||||
let newReqSig = 3;
|
||||
requiredSignatures.should.be.bignumber.equal(await bridgeValidators.requiredSignatures());
|
||||
await bridgeValidators.setRequiredSignatures(newReqSig, {from: validators[0]}).should.be.rejectedWith(ERROR_MSG)
|
||||
await bridgeValidators.setRequiredSignatures(newReqSig, {from: owner}).should.be.fulfilled
|
||||
newReqSig.should.be.bignumber.equal(await bridgeValidators.requiredSignatures());
|
||||
})
|
||||
it('cannot set more than validators count', async () => {
|
||||
let newReqSig = 4;
|
||||
requiredSignatures.should.be.bignumber.equal(await bridgeValidators.requiredSignatures());
|
||||
await bridgeValidators.setRequiredSignatures(newReqSig, {from: owner}).should.be.rejectedWith(ERROR_MSG)
|
||||
requiredSignatures.should.be.bignumber.equal(await bridgeValidators.requiredSignatures());
|
||||
})
|
||||
})
|
||||
})
|
Loading…
Reference in New Issue