Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
410 changes: 205 additions & 205 deletions .gas-snapshot

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[submodule "lib/ds-test"]
path = lib/ds-test
url = https://github.com/dapphub/ds-test
[submodule "lib/forge-std"]
path = lib/forge-std
url = https://github.com/foundry-rs/forge-std
1 change: 0 additions & 1 deletion lib/ds-test
Submodule ds-test deleted from 2c7dbc
1 change: 1 addition & 0 deletions lib/forge-std
Submodule forge-std added at 9401f0
167 changes: 166 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/auth/Auth.sol
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ abstract contract Auth {
function setAuthority(Authority newAuthority) public virtual {
// We check if the caller is the owner first because we want to ensure they can
// always swap out the authority even if it's reverting or using up a lot of gas.
require(msg.sender == owner || authority.canCall(msg.sender, address(this), msg.sig));
require(msg.sender == owner || authority.canCall(msg.sender, address(this), msg.sig), "UNAUTHORIZED");

authority = newAuthority;

Expand Down
52 changes: 34 additions & 18 deletions src/test/Auth.t.sol
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity 0.8.10;

import {DSTestPlus} from "./utils/DSTestPlus.sol";
import {MockAuthChild} from "./utils/mocks/MockAuthChild.sol";
import {MockAuthority} from "./utils/mocks/MockAuthority.sol";

import {TestPlus} from "./utils/TestPlus.sol";
import {Authority} from "../auth/Auth.sol";

contract OutOfOrderAuthority is Authority {
Expand All @@ -17,7 +16,7 @@ contract OutOfOrderAuthority is Authority {
}
}

contract AuthTest is DSTestPlus {
contract AuthTest is TestPlus {
MockAuthChild mockAuthChild;

function setUp() public {
Expand Down Expand Up @@ -61,46 +60,55 @@ contract AuthTest is DSTestPlus {
mockAuthChild.setAuthority(new MockAuthority(true));
}

function testFailSetOwnerAsNonOwner() public {
function testSetOwnerAsNonOwner() public {
mockAuthChild.setOwner(address(0));
vm.expectRevert("UNAUTHORIZED");
mockAuthChild.setOwner(address(0xBEEF));
}

function testFailSetAuthorityAsNonOwner() public {
function testSetAuthorityAsNonOwner() public {
mockAuthChild.setOwner(address(0));
// Fails since MockAuthChild uses Authority(address(0)) which can't call `canCall` function
vm.expectRevert();
mockAuthChild.setAuthority(Authority(address(0xBEEF)));
}

function testFailCallFunctionAsNonOwner() public {
function testCallFunctionAsNonOwner() public {
mockAuthChild.setOwner(address(0));
vm.expectRevert("UNAUTHORIZED");
mockAuthChild.updateFlag();
}

function testFailSetOwnerWithRestrictiveAuthority() public {
function testSetOwnerWithRestrictiveAuthority() public {
mockAuthChild.setAuthority(new MockAuthority(false));
mockAuthChild.setOwner(address(0));
vm.expectRevert("UNAUTHORIZED");
mockAuthChild.setOwner(address(this));
}

function testFailSetAuthorityWithRestrictiveAuthority() public {
function testSetAuthorityWithRestrictiveAuthority() public {
mockAuthChild.setAuthority(new MockAuthority(false));
mockAuthChild.setOwner(address(0));
vm.expectRevert("UNAUTHORIZED");
mockAuthChild.setAuthority(Authority(address(0xBEEF)));
}

function testFailCallFunctionWithRestrictiveAuthority() public {
function testCallFunctionWithRestrictiveAuthority() public {
mockAuthChild.setAuthority(new MockAuthority(false));
mockAuthChild.setOwner(address(0));
vm.expectRevert("UNAUTHORIZED");
mockAuthChild.updateFlag();
}

function testFailSetOwnerAsOwnerWithOutOfOrderAuthority() public {
function testSetOwnerAsOwnerWithOutOfOrderAuthority() public {
mockAuthChild.setAuthority(new OutOfOrderAuthority());
vm.expectRevert("OUT_OF_ORDER");
mockAuthChild.setOwner(address(0));
}

function testFailCallFunctionAsOwnerWithOutOfOrderAuthority() public {
function testCallFunctionAsOwnerWithOutOfOrderAuthority() public {
mockAuthChild.setAuthority(new OutOfOrderAuthority());
vm.expectRevert("OUT_OF_ORDER");
mockAuthChild.updateFlag();
}

Expand Down Expand Up @@ -138,55 +146,63 @@ contract AuthTest is DSTestPlus {
mockAuthChild.updateFlag();
}

function testFailSetOwnerAsNonOwner(address deadOwner, address newOwner) public {
function testSetOwnerAsNonOwner(address deadOwner, address newOwner) public {
if (deadOwner == address(this)) deadOwner = address(0);

mockAuthChild.setOwner(deadOwner);
vm.expectRevert("UNAUTHORIZED");
mockAuthChild.setOwner(newOwner);
}

function testFailSetAuthorityAsNonOwner(address deadOwner, Authority newAuthority) public {
function testSetAuthorityAsNonOwner(address deadOwner, Authority newAuthority) public {
if (deadOwner == address(this)) deadOwner = address(0);

mockAuthChild.setOwner(deadOwner);
// Fails since MockAuthChild uses Authority(address(0)) which can't call `canCall` function
vm.expectRevert();
mockAuthChild.setAuthority(newAuthority);
}

function testFailCallFunctionAsNonOwner(address deadOwner) public {
function testCallFunctionAsNonOwner(address deadOwner) public {
if (deadOwner == address(this)) deadOwner = address(0);

mockAuthChild.setOwner(deadOwner);
vm.expectRevert("UNAUTHORIZED");
mockAuthChild.updateFlag();
}

function testFailSetOwnerWithRestrictiveAuthority(address deadOwner, address newOwner) public {
function testSetOwnerWithRestrictiveAuthority(address deadOwner, address newOwner) public {
if (deadOwner == address(this)) deadOwner = address(0);

mockAuthChild.setAuthority(new MockAuthority(false));
mockAuthChild.setOwner(deadOwner);
vm.expectRevert("UNAUTHORIZED");
mockAuthChild.setOwner(newOwner);
}

function testFailSetAuthorityWithRestrictiveAuthority(address deadOwner, Authority newAuthority) public {
function testSetAuthorityWithRestrictiveAuthority(address deadOwner, Authority newAuthority) public {
if (deadOwner == address(this)) deadOwner = address(0);

mockAuthChild.setAuthority(new MockAuthority(false));
mockAuthChild.setOwner(deadOwner);
vm.expectRevert("UNAUTHORIZED");
mockAuthChild.setAuthority(newAuthority);
}

function testFailCallFunctionWithRestrictiveAuthority(address deadOwner) public {
function testCallFunctionWithRestrictiveAuthority(address deadOwner) public {
if (deadOwner == address(this)) deadOwner = address(0);

mockAuthChild.setAuthority(new MockAuthority(false));
mockAuthChild.setOwner(deadOwner);
vm.expectRevert("UNAUTHORIZED");
mockAuthChild.updateFlag();
}

function testFailSetOwnerAsOwnerWithOutOfOrderAuthority(address deadOwner) public {
function testSetOwnerAsOwnerWithOutOfOrderAuthority(address deadOwner) public {
if (deadOwner == address(this)) deadOwner = address(0);

mockAuthChild.setAuthority(new OutOfOrderAuthority());
vm.expectRevert("OUT_OF_ORDER");
mockAuthChild.setOwner(deadOwner);
}
}
4 changes: 2 additions & 2 deletions src/test/Bytes32AddressLib.t.sol
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity 0.8.10;

import {DSTestPlus} from "./utils/DSTestPlus.sol";
import {TestPlus} from "./utils/TestPlus.sol";

import {Bytes32AddressLib} from "../utils/Bytes32AddressLib.sol";

contract Bytes32AddressLibTest is DSTestPlus {
contract Bytes32AddressLibTest is TestPlus {
function testFillLast12Bytes() public {
assertEq(
Bytes32AddressLib.fillLast12Bytes(0xfEEDFaCEcaFeBEEFfEEDFACecaFEBeeFfeEdfAce),
Expand Down
Loading