Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unit Tests: Functions in the Swap path #397

Merged
merged 31 commits into from
Mar 21, 2024
Merged
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
8fbd11b
Test modifier WithLocker
joaobrunoah Mar 14, 2024
e604545
Merge branch 'main' into testing-swap-functions
joaobrunoah Mar 15, 2024
0c00eab
Test withInitializedPool modifier
joaobrunoah Mar 15, 2024
b97a040
Implement tests for _ensurePoolNotPaused and _ensureUnpausedAndGetVau…
joaobrunoah Mar 15, 2024
05a7d1a
Removing unit test functions from VaultMock
joaobrunoah Mar 15, 2024
cead668
Test of _getPoolTokenInfo function
joaobrunoah Mar 15, 2024
d58f6d8
Remove console.log from test
joaobrunoah Mar 15, 2024
257082a
Merge branch 'main' into testing-swap-functions
joaobrunoah Mar 18, 2024
0ecca7f
Merge branch 'main' into testing-swap-functions
joaobrunoah Mar 18, 2024
bef9e4b
Merge branch 'testing-swap-functions' of github.com:balancer/balancer…
joaobrunoah Mar 19, 2024
3a00e5f
Fix test snapshot
joaobrunoah Mar 19, 2024
83a2bf5
Merge branch 'main' into testing-swap-functions
joaobrunoah Mar 19, 2024
3183074
Merge branch 'main' into testing-swap-functions
joaobrunoah Mar 19, 2024
82a22aa
Fix pool addresses PR
joaobrunoah Mar 19, 2024
e7e19db
Merge branch 'fix-pool-addresses-pr' into testing-swap-functions
joaobrunoah Mar 19, 2024
a55113d
Merge branch 'main' into testing-swap-functions
joaobrunoah Mar 19, 2024
efb0131
Adjusting diff to 18 (supporting 0 decimals token)
joaobrunoah Mar 19, 2024
4fe339c
Fix pause time
joaobrunoah Mar 21, 2024
eb2e1bb
Remove stale comment
joaobrunoah Mar 21, 2024
86e0355
Fix function names
joaobrunoah Mar 21, 2024
3650a72
Fix function names
joaobrunoah Mar 21, 2024
00e3928
Add comment to tests
joaobrunoah Mar 21, 2024
f9aea86
Lint
joaobrunoah Mar 21, 2024
731db83
Commenting tests
joaobrunoah Mar 21, 2024
6aa2c21
Remove test with poolConfig but no balances
joaobrunoah Mar 21, 2024
f6a3c72
Fix pool creation
joaobrunoah Mar 21, 2024
4fb2723
Lint
joaobrunoah Mar 21, 2024
ef804cf
Update pkg/vault/test/foundry/unit/VaultCommonModifiers.t.sol
joaobrunoah Mar 21, 2024
2800deb
Update pkg/vault/test/foundry/unit/VaultCommonModifiers.t.sol
joaobrunoah Mar 21, 2024
b69bbe6
Implement setVaultPaused for tests
joaobrunoah Mar 21, 2024
3acbb7a
Lint
joaobrunoah Mar 21, 2024
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
26 changes: 26 additions & 0 deletions pkg/interfaces/contracts/test/IVaultMainMock.sol
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,32 @@ interface IVaultMainMock {
address pauseManager
) external;

function manualSetLockers(address[] memory lockers) external;

function manualSetInitializedPool(address pool, bool isPoolInitialized) external;

function manualSetPoolPaused(address, bool, uint256) external;

function manualSetVaultState(bool, bool, uint256, uint256) external;

function manualSetPoolTokenConfig(address, IERC20[] memory, TokenConfig[] memory) external;

function manualSetPoolConfig(address, PoolConfig memory) external;

function manualSetPoolTokenBalances(address, IERC20[] memory, uint256[] memory) external;

function testWithLocker() external view;

function testWithInitializedPool(address pool) external view;

function testEnsurePoolNotPaused(address) external view;

function testEnsureUnpausedAndGetVaultState(address) external view returns (VaultState memory);

function testInternalGetPoolTokenInfo(
address
) external view returns (TokenConfig[] memory, uint256[] memory, uint256[] memory, PoolConfig memory);

function getDecimalScalingFactors(address pool) external view returns (uint256[] memory);

function recoveryModeExit(address pool) external view;
Expand Down
80 changes: 80 additions & 0 deletions pkg/vault/contracts/test/VaultMock.sol
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ contract VaultMock is IVaultMainMock, Vault {
using ScalingHelpers for uint256;
using PackedTokenBalance for bytes32;
using PoolConfigLib for PoolConfig;
using VaultStateLib for VaultState;

PoolFactoryMock private immutable _poolFactoryMock;

Expand Down Expand Up @@ -99,6 +100,85 @@ contract VaultMock is IVaultMainMock, Vault {
);
}

function manualSetLockers(address[] memory lockers) public {
_lockers = lockers;
}

function manualSetInitializedPool(address pool, bool isPoolInitialized) public {
PoolConfig memory poolConfig = _poolConfig[pool].toPoolConfig();
poolConfig.isPoolInitialized = isPoolInitialized;
_poolConfig[pool] = poolConfig.fromPoolConfig();
}

function manualSetPoolPaused(address pool, bool isPoolPaused, uint256 pauseWindowEndTime) public {
PoolConfig memory poolConfig = _poolConfig[pool].toPoolConfig();
poolConfig.isPoolPaused = isPoolPaused;
poolConfig.pauseWindowEndTime = pauseWindowEndTime;
_poolConfig[pool] = poolConfig.fromPoolConfig();
}

function manualSetVaultState(
bool isVaultPaused,
bool isQueryDisabled,
uint256 protocolSwapFeePercentage,
uint256 protocolYieldFeePercentage
) public {
VaultState memory vaultState = _vaultState.toVaultState();
vaultState.isVaultPaused = isVaultPaused;
vaultState.isQueryDisabled = isQueryDisabled;
vaultState.protocolSwapFeePercentage = protocolSwapFeePercentage;
vaultState.protocolYieldFeePercentage = protocolYieldFeePercentage;
_vaultState = vaultState.fromVaultState();
}

function manualSetPoolConfig(address pool, PoolConfig memory poolConfig) public {
_poolConfig[pool] = poolConfig.fromPoolConfig();
}

// This function only works flawlessly for pools that are not registered by the vault,
// since mapping entries can't be deleted, only altered.
function manualSetPoolTokenConfig(address pool, IERC20[] memory tokens, TokenConfig[] memory tokenConfig) public {
for (uint256 i = 0; i < tokens.length; i++) {
_poolTokenConfig[pool][tokens[i]] = tokenConfig[i];
}
}

// This function only works for pools that are not registered by the vault,
// since mapping entries can't be deleted, only altered.
joaobrunoah marked this conversation as resolved.
Show resolved Hide resolved
function manualSetPoolTokenBalances(address pool, IERC20[] memory tokens, uint256[] memory tokenBalanceRaw) public {
EnumerableMap.IERC20ToBytes32Map storage poolTokenBalances = _poolTokenBalances[pool];
for (uint256 i = 0; i < tokens.length; i++) {
poolTokenBalances.set(tokens[i], bytes32(tokenBalanceRaw[i]));
}
}

function testWithLocker() public view withLocker {}

function testWithInitializedPool(address pool) public view withInitializedPool(pool) {}

function testEnsurePoolNotPaused(address pool) public view {
_ensurePoolNotPaused(pool);
}

function testEnsureUnpausedAndGetVaultState(address pool) public view returns (VaultState memory vaultState) {
vaultState = _ensureUnpausedAndGetVaultState(pool);
}

function testInternalGetPoolTokenInfo(
joaobrunoah marked this conversation as resolved.
Show resolved Hide resolved
address pool
)
public
view
returns (
TokenConfig[] memory tokenConfig,
uint256[] memory balancesRaw,
uint256[] memory decimalScalingFactors,
PoolConfig memory poolConfig
)
{
(tokenConfig, balancesRaw, decimalScalingFactors, poolConfig) = _getPoolTokenInfo(pool);
joaobrunoah marked this conversation as resolved.
Show resolved Hide resolved
}

function buildTokenConfig(IERC20[] memory tokens) public pure returns (TokenConfig[] memory tokenConfig) {
tokenConfig = new TokenConfig[](tokens.length);
for (uint256 i = 0; i < tokens.length; i++) {
Expand Down
76 changes: 76 additions & 0 deletions pkg/vault/test/foundry/unit/PoolAndVaultPaused.t.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity ^0.8.4;

import "@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol";
import "@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol";

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

contract PoolAndVaultPausedTest is BaseVaultTest {
// The pauseWindowEndTime is stored as a 32 bits number
uint256 private constant _MAX_PAUSE_END_TIME = 2 ** 32 - 1;

function setUp() public virtual override {
BaseVaultTest.setUp();
}

/*******************************************************************************
_ensurePoolNotPaused
*******************************************************************************/

function testPausedPoolWithBigEndTime() public {
vault.manualSetPoolPaused(address(pool), true, _MAX_PAUSE_END_TIME);
vm.expectRevert(abi.encodeWithSelector(IVaultErrors.PoolPaused.selector, address(pool)));
vault.testEnsurePoolNotPaused(address(pool));
}

function testPausedPoolWithSmallEndTime() public {
vault.manualSetPoolPaused(address(pool), true, 1);
vault.testEnsurePoolNotPaused(address(pool));
}

function testUnpausedPoolWithBigEndTime() public {
vault.manualSetPoolPaused(address(pool), false, _MAX_PAUSE_END_TIME);
vault.testEnsurePoolNotPaused(address(pool));
}

function testUnpausedPoolWithSmallEndTime() public {
vault.manualSetPoolPaused(address(pool), false, 1);
vault.testEnsurePoolNotPaused(address(pool));
}
joaobrunoah marked this conversation as resolved.
Show resolved Hide resolved

/*******************************************************************************
_ensureUnpausedAndGetVaultState
*******************************************************************************/

function testVaultPaused() public {
vault.manualSetVaultState(true, false, 1e16, 1e16);
joaobrunoah marked this conversation as resolved.
Show resolved Hide resolved
vm.expectRevert(abi.encodeWithSelector(IVaultErrors.VaultPaused.selector));
vault.testEnsureUnpausedAndGetVaultState(address(pool));
}

function testVaultUnpausedButPoolPaused() public {
vault.manualSetVaultState(false, false, 1e16, 1e16);
vault.manualSetPoolPaused(address(pool), true, _MAX_PAUSE_END_TIME);
vm.expectRevert(abi.encodeWithSelector(IVaultErrors.PoolPaused.selector, address(pool)));
vault.testEnsureUnpausedAndGetVaultState(address(pool));
}

function testVaultPausedButPoolUnpaused() public {
vault.manualSetVaultState(true, false, 1e16, 1e16);
vault.manualSetPoolPaused(address(pool), false, 1);
vm.expectRevert(abi.encodeWithSelector(IVaultErrors.VaultPaused.selector));
vault.testEnsureUnpausedAndGetVaultState(address(pool));
}

function testVaultAndPoolUnpaused() public {
vault.manualSetVaultState(false, true, 3e16, 5e17);
vault.manualSetPoolPaused(address(pool), false, 1);
VaultState memory vaultState = vault.testEnsureUnpausedAndGetVaultState(address(pool));
assertEq(vaultState.isVaultPaused, false);
assertEq(vaultState.isQueryDisabled, true);
assertEq(vaultState.protocolSwapFeePercentage, 3e16);
assertEq(vaultState.protocolYieldFeePercentage, 5e17);
}
}
Loading
Loading