Swap target contract at test by using abstract interface

pull/35/head
Makoto Inoue 8 years ago
parent 8df9925d1a
commit e318d6d246
  1. 9
      contracts/bounties/SimpleTokenBounty.sol
  2. 7
      contracts/test-helpers/InsecureTargetMock.sol
  3. 7
      contracts/test-helpers/SecureTargetMock.sol
  4. 2
      migrations/2_deploy_contracts.js
  5. 19
      test/Bounty.js

@ -9,9 +9,7 @@ import '../PullPayment.sol';
*/
contract Target {
function checkInvarient() returns(bool){
return true;
}
function checkInvarient() returns(bool);
}
contract Bounty is PullPayment {
@ -23,8 +21,8 @@ contract Bounty is PullPayment {
if (claimed) throw;
}
function createTarget() returns(Target) {
target = new Target();
function createTarget(address targetAddress) returns(Target) {
target = Target(targetAddress);
researchers[target] = msg.sender;
return target;
}
@ -37,7 +35,6 @@ contract Bounty is PullPayment {
address researcher = researchers[target];
if (researcher == 0) throw;
// Check Target contract invariants
// Customize this to the specifics of your contract
if (!target.checkInvarient()) {
throw;
}

@ -0,0 +1,7 @@
pragma solidity ^0.4.0;
contract InsecureTargetMock {
function checkInvarient() returns(bool){
return false;
}
}

@ -0,0 +1,7 @@
pragma solidity ^0.4.0;
contract SecureTargetMock {
function checkInvarient() returns(bool){
return true;
}
}

@ -6,4 +6,6 @@ module.exports = function(deployer) {
deployer.deploy(CrowdsaleTokenBounty);
deployer.deploy(Ownable);
deployer.deploy(LimitFunds);
deployer.deploy(SecureTargetMock);
deployer.deploy(InsecureTargetMock);
};

@ -1,8 +1,8 @@
contract('Bounty', function(accounts) {
it.only("create target", function(done){
it.only("can call checkInvarient for InsecureTargetMock", function(done){
var bounty = Bounty.deployed();
bounty.createTarget().
var target = SecureTargetMock.deployed();
bounty.createTarget(target.address).
then(function() {
return bounty.checkInvarient.call()
}).
@ -11,4 +11,17 @@ contract('Bounty', function(accounts) {
}).
then(done);
})
it("can call checkInvarient for InsecureTargetMock", function(done){
var bounty = Bounty.deployed();
var target = InsecureTargetMock.deployed();
bounty.createTarget(target.address).
then(function() {
return bounty.checkInvarient.call()
}).
then(function(result) {
assert.isFalse(result);
}).
then(done);
})
});

Loading…
Cancel
Save