From 6fd55b2f49f63e3f4b0c994859b552c4bc87a6f8 Mon Sep 17 00:00:00 2001 From: Amir Bandeali Date: Fri, 13 Sep 2019 15:29:07 -0500 Subject: [PATCH] Add more tests --- .../contracts/src/AssetProxyOwner.sol | 2 +- .../contracts/test/ContractCallReceiver.sol | 9 ++++++- contracts/multisig/test/asset_proxy_owner.ts | 24 +++++++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/contracts/multisig/contracts/src/AssetProxyOwner.sol b/contracts/multisig/contracts/src/AssetProxyOwner.sol index d0e61d7bf2..037b8d4341 100644 --- a/contracts/multisig/contracts/src/AssetProxyOwner.sol +++ b/contracts/multisig/contracts/src/AssetProxyOwner.sol @@ -155,7 +155,7 @@ contract AssetProxyOwner is // Ensure that function call was successful require( didSucceed, - "EXECUTION_FAILURE" + "FAILED_EXECUTION" ); } emit Execution(transactionId); diff --git a/contracts/multisig/contracts/test/ContractCallReceiver.sol b/contracts/multisig/contracts/test/ContractCallReceiver.sol index f8efe9b34e..a3505e543c 100644 --- a/contracts/multisig/contracts/test/ContractCallReceiver.sol +++ b/contracts/multisig/contracts/test/ContractCallReceiver.sol @@ -31,12 +31,19 @@ contract ContractCallReceiver { uint256 value ); + bytes4 constant internal ALWAYS_REVERT_SELECTOR = 0xF1F2F3F4; + function () external payable { + bytes4 selector = msg.data.readBytes4(0); + if (selector == ALWAYS_REVERT_SELECTOR) { + revert(); + } + emit ContractCall( - msg.data.readBytes4(0), + selector, msg.data, msg.value ); diff --git a/contracts/multisig/test/asset_proxy_owner.ts b/contracts/multisig/test/asset_proxy_owner.ts index e07860f04e..d7769437ba 100644 --- a/contracts/multisig/test/asset_proxy_owner.ts +++ b/contracts/multisig/test/asset_proxy_owner.ts @@ -586,6 +586,30 @@ blockchainTests.resets('AssetProxyOwner', env => { const tx = assetProxyOwner.executeTransaction.awaitTransactionSuccessAsync(results.txId); expect(tx).to.revertWith(RevertReason.TxAlreadyExecuted); }); + it('should revert if the only call is unsuccessful', async () => { + const alwaysRevertSelector = '0xF1F2F3F4'; + const data = [alwaysRevertSelector]; + const destinations = [receiver.address]; + const tx = assetProxyOwnerWrapper.submitConfirmAndExecuteTransactionAsync( + data, + destinations, + signerAddresses, + DEFAULT_TIME_LOCK, + ); + expect(tx).to.revertWith(RevertReason.FailedExecution); + }); + it('should revert if the any call is unsuccessful', async () => { + const alwaysRevertSelector = '0xF1F2F3F4'; + const data = [hexRandom(), alwaysRevertSelector]; + const destinations = [receiver.address, receiver.address]; + const tx = assetProxyOwnerWrapper.submitConfirmAndExecuteTransactionAsync( + data, + destinations, + signerAddresses, + DEFAULT_TIME_LOCK, + ); + expect(tx).to.revertWith(RevertReason.FailedExecution); + }); it('should be able to call registerFunctionCall after the default timelock', async () => { const reg = createFunctionRegistration(1, 1, 1); const data = [