Skip to content

Commit 2ac3535

Browse files
committed
test: scenario tests, paused/active
1 parent d8801c1 commit 2ac3535

File tree

10 files changed

+80
-32
lines changed

10 files changed

+80
-32
lines changed

tests/Base.t.sol

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ import {console2 as console} from 'forge-std/console2.sol';
1111

1212
// dependencies
1313
import {AggregatorV3Interface} from 'src/dependencies/chainlink/AggregatorV3Interface.sol';
14-
import {TransparentUpgradeableProxy, ITransparentUpgradeableProxy} from 'src/dependencies/openzeppelin/TransparentUpgradeableProxy.sol';
14+
import {
15+
TransparentUpgradeableProxy,
16+
ITransparentUpgradeableProxy
17+
} from 'src/dependencies/openzeppelin/TransparentUpgradeableProxy.sol';
1518
import {IERC20Metadata} from 'src/dependencies/openzeppelin/IERC20Metadata.sol';
1619
import {SafeCast} from 'src/dependencies/openzeppelin/SafeCast.sol';
1720
import {IERC20Errors} from 'src/dependencies/openzeppelin/IERC20Errors.sol';
@@ -44,7 +47,11 @@ import {AccessManagerEnumerable} from 'src/access/AccessManagerEnumerable.sol';
4447
import {HubConfigurator, IHubConfigurator} from 'src/hub/HubConfigurator.sol';
4548
import {Hub, IHub, IHubBase} from 'src/hub/Hub.sol';
4649
import {SharesMath} from 'src/hub/libraries/SharesMath.sol';
47-
import {AssetInterestRateStrategy, IAssetInterestRateStrategy, IBasicInterestRateStrategy} from 'src/hub/AssetInterestRateStrategy.sol';
50+
import {
51+
AssetInterestRateStrategy,
52+
IAssetInterestRateStrategy,
53+
IBasicInterestRateStrategy
54+
} from 'src/hub/AssetInterestRateStrategy.sol';
4855

4956
// spoke
5057
import {Spoke, ISpoke, ISpokeBase} from 'src/spoke/Spoke.sol';
@@ -1206,7 +1213,7 @@ abstract contract Base is Test {
12061213
assertEq(hub.getSpokeConfig(assetId, spoke), spokeConfig);
12071214
}
12081215

1209-
function updateSpokeActive(
1216+
function _updateSpokeActive(
12101217
IHub hub,
12111218
uint256 assetId,
12121219
address spoke,

tests/unit/Hub/Hub.Add.t.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ contract HubAddTest is HubBase {
7676
}
7777

7878
function test_add_revertsWith_SpokeNotActive() public {
79-
updateSpokeActive(hub1, daiAssetId, address(spoke1), false);
79+
_updateSpokeActive(hub1, daiAssetId, address(spoke1), false);
8080
vm.startPrank(address(spoke1));
8181
tokenList.dai.transferFrom(alice, address(hub1), 100e18);
8282

tests/unit/Hub/Hub.Config.t.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -631,7 +631,7 @@ contract HubConfigTest is HubBase {
631631
_drawLiquidity(assetId, amount, true);
632632
skip(365 days);
633633

634-
updateSpokeActive(hub1, assetId, _getFeeReceiver(hub1, assetId), false);
634+
_updateSpokeActive(hub1, assetId, _getFeeReceiver(hub1, assetId), false);
635635
IHub.AssetConfig memory config = hub1.getAssetConfig(assetId);
636636
config.feeReceiver = makeAddr('newFeeReceiver');
637637

@@ -650,7 +650,7 @@ contract HubConfigTest is HubBase {
650650

651651
Utils.mintFeeShares(hub1, assetId, ADMIN);
652652

653-
updateSpokeActive(hub1, assetId, _getFeeReceiver(hub1, assetId), false);
653+
_updateSpokeActive(hub1, assetId, _getFeeReceiver(hub1, assetId), false);
654654
IHub.AssetConfig memory config = hub1.getAssetConfig(assetId);
655655
config.feeReceiver = makeAddr('newFeeReceiver');
656656

tests/unit/Hub/Hub.Draw.t.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ contract HubDrawTest is HubBase {
165165
}
166166

167167
function test_draw_revertsWith_SpokeNotActive() public {
168-
updateSpokeActive(hub1, daiAssetId, address(spoke1), false);
168+
_updateSpokeActive(hub1, daiAssetId, address(spoke1), false);
169169
vm.expectRevert(IHub.SpokeNotActive.selector);
170170
vm.prank(address(spoke1));
171171
hub1.draw(daiAssetId, 100e18, alice);

tests/unit/Hub/Hub.EliminateDeficit.t.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ contract HubEliminateDeficitTest is HubBase {
6060
_createDeficit(_assetId, _coveredSpoke, _deficitAmountRay);
6161
Utils.add(hub1, _assetId, _callerSpoke, _deficitAmountRay.fromRayUp() + 1, alice);
6262

63-
updateSpokeActive(hub1, _assetId, _callerSpoke, true);
63+
_updateSpokeActive(hub1, _assetId, _callerSpoke, true);
6464
_updateSpokePaused(hub1, _assetId, _callerSpoke, true);
6565

6666
vm.prank(_callerSpoke);

tests/unit/Hub/Hub.MintFeeShares.t.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ contract HubMintFeeSharesTest is HubBase {
2626
skipTime: 365 days
2727
});
2828

29-
updateSpokeActive(hub1, daiAssetId, _getFeeReceiver(hub1, daiAssetId), false);
29+
_updateSpokeActive(hub1, daiAssetId, _getFeeReceiver(hub1, daiAssetId), false);
3030
vm.expectRevert(IHub.SpokeNotActive.selector, address(hub1));
3131
Utils.mintFeeShares(hub1, daiAssetId, ADMIN);
3232
}
@@ -99,7 +99,7 @@ contract HubMintFeeSharesTest is HubBase {
9999
IHub.Asset memory asset = hub1.getAsset(daiAssetId);
100100

101101
// pausing the fee receiver does not revert the action since no shares are minted
102-
updateSpokeActive(hub1, daiAssetId, _getFeeReceiver(hub1, daiAssetId), false);
102+
_updateSpokeActive(hub1, daiAssetId, _getFeeReceiver(hub1, daiAssetId), false);
103103

104104
vm.expectEmit(address(hub1));
105105
emit IHub.UpdateAsset(daiAssetId, asset.drawnIndex, asset.drawnRate, 0);

tests/unit/Hub/Hub.PayFee.t.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ contract HubPayFeeTest is HubBase {
1212
}
1313

1414
function test_payFee_revertsWith_SpokeNotActive() public {
15-
updateSpokeActive(hub1, daiAssetId, address(spoke1), false);
15+
_updateSpokeActive(hub1, daiAssetId, address(spoke1), false);
1616
vm.expectRevert(IHub.SpokeNotActive.selector, address(hub1));
1717
vm.prank(address(spoke1));
1818
hub1.payFeeShares(daiAssetId, 1);

tests/unit/Hub/Hub.RefreshPremium.t.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ contract HubRefreshPremiumTest is HubBase {
1717

1818
function test_refreshPremium_revertsWith_SpokeNotActive() public {
1919
IHubBase.PremiumDelta memory premiumDelta;
20-
updateSpokeActive(hub1, daiAssetId, address(spoke1), false);
20+
_updateSpokeActive(hub1, daiAssetId, address(spoke1), false);
2121
vm.expectRevert(IHub.SpokeNotActive.selector);
2222
vm.prank(address(spoke1));
2323
hub1.refreshPremium(daiAssetId, premiumDelta);
@@ -166,7 +166,7 @@ contract HubRefreshPremiumTest is HubBase {
166166

167167
/// @dev paused but active spokes are allowed to refresh premium
168168
function test_refreshPremium_pausedSpokesAllowed() public {
169-
updateSpokeActive(hub1, daiAssetId, address(spoke1), true);
169+
_updateSpokeActive(hub1, daiAssetId, address(spoke1), true);
170170
_updateSpokePaused(hub1, daiAssetId, address(spoke1), true);
171171

172172
vm.expectEmit(address(hub1));

tests/unit/Hub/Hub.Remove.t.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@ contract HubRemoveTest is HubBase {
515515
}
516516

517517
function test_remove_revertsWith_SpokeNotActive() public {
518-
updateSpokeActive(hub1, daiAssetId, address(spoke1), false);
518+
_updateSpokeActive(hub1, daiAssetId, address(spoke1), false);
519519
vm.expectRevert(IHub.SpokeNotActive.selector);
520520
vm.prank(address(spoke1));
521521
hub1.remove(daiAssetId, 100e18, alice);

tests/unit/Hub/Hub.ReportDeficit.t.sol

Lines changed: 59 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,47 @@ contract HubReportDeficitTest is HubBase {
3333
_addLiquidity(usdxAssetId, MAX_SUPPLY_AMOUNT);
3434
}
3535

36+
function test_reportDeficit_active_paused_scenarios() public {
37+
// draw usdx liquidity to be restored
38+
_drawLiquidity({
39+
assetId: usdxAssetId,
40+
amount: 1,
41+
withPremium: true,
42+
skipTime: true,
43+
spoke: address(spoke1)
44+
});
45+
46+
// set spoke to active and paused
47+
_updateSpokePaused(hub1, usdxAssetId, address(spoke1), true);
48+
_updateSpokeActive(hub1, usdxAssetId, address(spoke1), true);
49+
50+
vm.prank(address(spoke1));
51+
hub1.reportDeficit(usdxAssetId, 1, ZERO_PREMIUM_DELTA);
52+
53+
// set spoke to inactive and paused
54+
_updateSpokePaused(hub1, usdxAssetId, address(spoke1), true);
55+
_updateSpokeActive(hub1, usdxAssetId, address(spoke1), false);
56+
57+
vm.expectRevert(IHub.SpokeNotActive.selector);
58+
vm.prank(address(spoke1));
59+
hub1.reportDeficit(usdxAssetId, 1, ZERO_PREMIUM_DELTA);
60+
61+
// set spoke to active and not paused
62+
_updateSpokePaused(hub1, usdxAssetId, address(spoke1), false);
63+
_updateSpokeActive(hub1, usdxAssetId, address(spoke1), true);
64+
65+
vm.prank(address(spoke1));
66+
hub1.reportDeficit(usdxAssetId, 1, ZERO_PREMIUM_DELTA);
67+
68+
// set spoke to inactive and not paused
69+
_updateSpokePaused(hub1, usdxAssetId, address(spoke1), false);
70+
_updateSpokeActive(hub1, usdxAssetId, address(spoke1), false);
71+
72+
vm.expectRevert(IHub.SpokeNotActive.selector);
73+
vm.prank(address(spoke1));
74+
hub1.reportDeficit(usdxAssetId, 1, ZERO_PREMIUM_DELTA);
75+
}
76+
3677
function test_reportDeficit_revertsWith_SpokeNotActive(address caller) public {
3778
vm.assume(!hub1.getSpoke(usdxAssetId, caller).active);
3879

@@ -49,24 +90,6 @@ contract HubReportDeficitTest is HubBase {
4990
hub1.reportDeficit(usdxAssetId, 0, ZERO_PREMIUM_DELTA);
5091
}
5192

52-
/// @dev paused spoke can still report deficit
53-
function test_reportDeficit_paused() public {
54-
// draw usdx liquidity to be restored
55-
_drawLiquidity({
56-
assetId: usdxAssetId,
57-
amount: 1,
58-
withPremium: true,
59-
skipTime: true,
60-
spoke: address(spoke1)
61-
});
62-
63-
_updateSpokePaused(hub1, usdxAssetId, address(spoke1), true);
64-
65-
// even if spoke is paused, it can report deficit
66-
vm.prank(address(spoke1));
67-
hub1.reportDeficit(usdxAssetId, 1, ZERO_PREMIUM_DELTA);
68-
}
69-
7093
function test_reportDeficit_fuzz_revertsWith_SurplusDrawnDeficitReported(
7194
uint256 drawnAmount
7295
) public {
@@ -154,6 +177,24 @@ contract HubReportDeficitTest is HubBase {
154177
);
155178
}
156179

180+
/// @dev paused spoke can still report deficit
181+
function test_reportDeficit_paused() public {
182+
// draw usdx liquidity to be restored
183+
_drawLiquidity({
184+
assetId: usdxAssetId,
185+
amount: 1,
186+
withPremium: true,
187+
skipTime: true,
188+
spoke: address(spoke1)
189+
});
190+
191+
_updateSpokePaused(hub1, usdxAssetId, address(spoke1), true);
192+
193+
// even if spoke is paused, it can report deficit
194+
vm.prank(address(spoke1));
195+
hub1.reportDeficit(usdxAssetId, 1, ZERO_PREMIUM_DELTA);
196+
}
197+
157198
function test_reportDeficit_with_premium() public {
158199
uint256 drawnAmount = 10_000e6;
159200
test_reportDeficit_fuzz_with_premium({

0 commit comments

Comments
 (0)