Copy // SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import {Test} from "forge-std/Test.sol";
import {CLAdapter} from "../contracts/bridge/adapters/CLAdapter.sol";
import {LombardTokenPool} from "../contracts/bridge/adapters/TokenPool.sol";
import {IBridge} from "../contracts/bridge/IBridge.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
contract CLAdapterTest is Test {
CLAdapter public adapter;
LombardTokenPool public tokenPool;
address public constant MOCK_ROUTER = address(0x1);
address public constant MOCK_BRIDGE = address(0x2);
address public constant MOCK_LBTC = address(0x3);
address public constant MOCK_RMN = address(0x4);
uint128 public constant EXECUTION_GAS_LIMIT = 200000;
function setUp() public {
// Deploy mock contracts
vm.mockCall(
MOCK_BRIDGE,
abi.encodeWithSelector(IBridge.lbtc.selector),
abi.encode(MOCK_LBTC)
);
// Deploy CLAdapter
adapter = new CLAdapter(
IBridge(MOCK_BRIDGE),
EXECUTION_GAS_LIMIT,
MOCK_ROUTER,
new address[](0),
MOCK_RMN
);
// Get TokenPool reference
tokenPool = adapter.tokenPool();
}
function testNoCallsToInitWithdrawalNoSignatures() public {
// Get TokenPool bytecode
bytes memory bytecode = address(tokenPool).code;
// Search for initWithdrawalNoSignatures selector in bytecode
bytes4 selector = adapter.initWithdrawalNoSignatures.selector;
bool selectorFound = false;
for(uint i = 0; i < bytecode.length - 4; i++) {
bytes4 candidate;
assembly {
candidate := mload(add(add(bytecode, 0x20), i))
}
if(candidate == selector) {
selectorFound = true;
break;
}
}
assertFalse(selectorFound, "initWithdrawalNoSignatures selector found in TokenPool bytecode");
}
function testDirectCallReverts() public {
vm.expectRevert("CLUnauthorizedTokenPool");
adapter.initWithdrawalNoSignatures(1, "0x");
}
}