-
Notifications
You must be signed in to change notification settings - Fork 11.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
ab93a8e
commit 0ec09f4
Showing
2 changed files
with
122 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
pragma solidity ^0.4.4; | ||
import "../Shareable.sol"; | ||
|
||
contract ShareableMock is Shareable { | ||
|
||
uint public count = 0; | ||
|
||
function ShareableMock(address[] _owners, uint _required) Shareable(_owners, _required) { | ||
|
||
} | ||
|
||
function increaseCount(bytes32 action) onlymanyowners(action) { | ||
count = count + 1; | ||
} | ||
|
||
function isOwnerConst(address _addr) constant returns (bool) { | ||
return isOwner(_addr); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
contract('Shareable', function(accounts) { | ||
|
||
it('should construct with correct owners and number of sigs required', async function() { | ||
let requiredSigs = 2; | ||
let owners = accounts.slice(1,4); | ||
let shareable = await ShareableMock.new(owners, requiredSigs); | ||
|
||
let required = await shareable.required(); | ||
assert.equal(required, requiredSigs); | ||
let owner = await shareable.getOwner(0); | ||
assert.equal(owner, accounts[0]); | ||
|
||
for(let i = 0; i < accounts.length; i++) { | ||
let owner = await shareable.getOwner(i); | ||
let isowner = await shareable.isOwnerConst(accounts[i]); | ||
if(i <= owners.length) { | ||
assert.equal(accounts[i], owner); | ||
assert.isTrue(isowner); | ||
} else { | ||
assert.notEqual(accounts[i], owner); | ||
assert.isFalse(isowner); | ||
} | ||
} | ||
}); | ||
|
||
it('should only perform multisig function with enough sigs', async function() { | ||
let requiredSigs = 3; | ||
let owners = accounts.slice(1,4); | ||
let shareable = await ShareableMock.new(owners, requiredSigs); | ||
let hash = 1234; | ||
|
||
let initCount = await shareable.count(); | ||
initCount = initCount.toString(); | ||
|
||
for(let i = 0; i < requiredSigs; i++) { | ||
await shareable.increaseCount(hash, {from: accounts[i]}); | ||
let count = await shareable.count(); | ||
if(i == requiredSigs - 1) { | ||
assert.equal(Number(initCount)+1, count.toString()); | ||
} else { | ||
assert.equal(initCount, count.toString()); | ||
} | ||
} | ||
}); | ||
|
||
it('should require approval from different owners', async function() { | ||
let requiredSigs = 2; | ||
let owners = accounts.slice(1,4); | ||
let shareable = await ShareableMock.new(owners, requiredSigs); | ||
let hash = 1234; | ||
|
||
let initCount = await shareable.count(); | ||
initCount = initCount.toString(); | ||
|
||
//Count shouldn't increase when the same owner calls repeatedly | ||
for(let i = 0; i < 2; i++) { | ||
await shareable.increaseCount(hash); | ||
let count = await shareable.count(); | ||
assert.equal(initCount, count.toString()); | ||
} | ||
}); | ||
|
||
it('should reset sig count after operation is approved', async function() { | ||
let requiredSigs = 3; | ||
let owners = accounts.slice(1,4); | ||
let shareable = await ShareableMock.new(owners, requiredSigs); | ||
let hash = 1234; | ||
|
||
let initCount = await shareable.count(); | ||
initCount = initCount.toString(); | ||
|
||
for(let i = 0; i < requiredSigs * 3; i++) { | ||
await shareable.increaseCount(hash, {from: accounts[i % 4]}); | ||
let count = await shareable.count(); | ||
if((i%(requiredSigs)) == requiredSigs - 1) { | ||
initCount = Number(initCount)+1; | ||
assert.equal(initCount, count.toString()); | ||
} else { | ||
assert.equal(initCount, count.toString()); | ||
} | ||
} | ||
}); | ||
|
||
it('should not perform multisig function after an owner revokes', async function() { | ||
let requiredSigs = 3; | ||
let owners = accounts.slice(1,4); | ||
let shareable = await ShareableMock.new(owners, requiredSigs); | ||
let hash = 1234; | ||
|
||
let initCount = await shareable.count(); | ||
initCount = initCount.toString(); | ||
|
||
for(let i = 0; i < requiredSigs; i++) { | ||
if(i == 1) { | ||
await shareable.revoke(hash, {from: accounts[i-1]}); | ||
} | ||
await shareable.increaseCount(hash, {from: accounts[i]}); | ||
let count = await shareable.count(); | ||
assert.equal(initCount, count.toString()); | ||
} | ||
}); | ||
|
||
}); |