Skip to content

Commit

Permalink
Updated the test with fix
Browse files Browse the repository at this point in the history
  • Loading branch information
olaoyesalem committed Oct 18, 2024
1 parent 35cdca9 commit 85b227b
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 47 deletions.
10 changes: 5 additions & 5 deletions contracts/test/UntronFees.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -96,15 +96,15 @@ contract UntronFeesTest is Test {
vm.stopPrank(); // Stop prank after setting fees
}

function test_SetZeroAndNegativeFees(int256 relayerFee, int256 fulfillerFee) public {
vm.assume(relayerFee < 0 || relayerFee == 0);
vm.assume(fulfillerFee < 0 || fulfillerFee == 0);
function test_setFeesVariables_RevertIf_FeeIsZero(uint256 relayerFee, uint256 fulfillerFee) public {
vm.assume(relayerFee > 0 || relayerFee == 0);
vm.assume(fulfillerFee > 0 || fulfillerFee == 0);

vm.startPrank(admin);
if (relayerFee >= 0 && fulfillerFee >= 0) {
untronFees.setFeesVariables(uint256(relayerFee), uint256(fulfillerFee));
untronFees.setFeesVariables(relayerFee, fulfillerFee);
} else {
untronFees.setFeesVariables(uint256(relayerFee), uint256(fulfillerFee));
untronFees.setFeesVariables(relayerFee, fulfillerFee);
}

vm.stopPrank();
Expand Down
130 changes: 88 additions & 42 deletions contracts/test/core/UntronCore.setProvider.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -378,7 +378,7 @@ contract SetProviderTest is UntronCoreBase {
}

/// @notice Test for setting zero liquidity
function testSetProvider_RevertOnZeroLiquidity() public {
function testSetProvider_RevertIf_ZeroLiquidity() public {
// Given: A provider with existing liquidity who wants to withdraw all funds
address providerAddress = vm.addr(100);
uint256 initialLiquidity = 1000e6;
Expand All @@ -398,7 +398,7 @@ contract SetProviderTest is UntronCoreBase {

// When: The provider tries to set liquidity to zero (expecting a revert)
vm.startPrank(providerAddress);
vm.expectRevert("Parameters should be greater than zero");
vm.expectRevert();
untron.setProvider(0, rate, minOrderSize, minDeposit, receivers);
vm.stopPrank();

Expand Down Expand Up @@ -512,61 +512,107 @@ contract SetProviderTest is UntronCoreBase {
assertEq(storedOrderId, bytes32(0), "Receiver should no longer be busy due to the expired order");
}

/// @notice Fuzz test: Random valid inputs for setProvider
function testFuzz_setProvider_RandomValidInputs(
uint256 liquidity,
uint256 rate,
uint256 minOrderSize,
uint256 minDeposit
) public {
// Bound the inputs to reasonable values
liquidity = bound(liquidity, 0, 1e12); // Up to 1,000,000,000 USDT
rate = bound(rate, 1e5, 1e7); // Between 0.1 and 10
minOrderSize = bound(minOrderSize, 1e6, 1e9); // Between 1 and 1,000 USDT
minDeposit = bound(minDeposit, 0, minOrderSize);

/// @notice Test for setting provider with zero min deposit
function testSetProvider_RevertIf_ZeroMinDeposit() public {
// Given: A provider address and parameters
address providerAddress = vm.addr(100);
uint256 liquidity = 1000e6;
uint256 rate = 1e6;
uint256 minOrderSize = 100e6;
uint256 minDeposit = 0; // Set minDeposit to zero
bytes21[] memory receivers = new bytes21[](2);
receivers[0] = addressToBytes21(vm.addr(200));
receivers[1] = addressToBytes21(vm.addr(201));

// Mint and approve USDT
mintUSDT(providerAddress, liquidity);
approveUSDT(providerAddress, address(untron), liquidity);

// Ensure the initial state of the provider is as expected
// Store initial provider state
IUntronCore.Provider memory initialProvider = untron.providers(providerAddress);
assertEq(initialProvider.liquidity, 0, "Initial provider's liquidity should be 0");
assertEq(initialProvider.rate, 0, "Initial provider's rate should be 0");
assertEq(initialProvider.minOrderSize, 0, "Initial provider's minOrderSize should be 0");
assertEq(initialProvider.minDeposit, 0, "Initial provider's minDeposit should be 0");

// Start the prank as the provider
vm.startPrank(providerAddress);

// When: Attempting to set provider
vm.expectRevert("Parameters should be greater than zero");
untron.setProvider(liquidity, rate, minOrderSize, minDeposit, receivers);
vm.stopPrank();

// Then: Verify that the provider's state remains unchanged
IUntronCore.Provider memory finalProvider = untron.providers(providerAddress);
assertEq(finalProvider.liquidity, initialProvider.liquidity, "Provider's liquidity should remain unchanged");
assertEq(finalProvider.rate, initialProvider.rate, "Provider's rate should remain unchanged");
assertEq(finalProvider.minOrderSize, initialProvider.minOrderSize, "Provider's minOrderSize should remain unchanged");
assertEq(finalProvider.minDeposit, initialProvider.minDeposit, "Provider's minDeposit should remain unchanged");
}

/// @notice Test for setting provider with zero min order size
function testSetProvider_RevertIf_ZeroMinOrderSize() public {
// Given: A provider address and parameters
address providerAddress = vm.addr(100);
uint256 liquidity = 1000e6;
uint256 rate = 1e6;
uint256 minOrderSize = 0; // Set minOrderSize to zero
uint256 minDeposit = 10e6;
bytes21[] memory receivers = new bytes21[](2);
receivers[0] = addressToBytes21(vm.addr(200));

// Mint and approve USDT
mintUSDT(providerAddress, liquidity);
approveUSDT(providerAddress, address(untron), liquidity);

// Store initial provider state
IUntronCore.Provider memory initialProvider = untron.providers(providerAddress);

// Start the prank as the provider
vm.startPrank(providerAddress);

// When: Attempting to set provider
vm.expectRevert("Parameters should be greater than zero");
untron.setProvider(liquidity, rate, minOrderSize, minDeposit, receivers);
vm.stopPrank();

if (liquidity == 0) {
// When liquidity is 0, we expect a revert with the "Parameters should be greater than zero" message
vm.expectRevert("Parameters should be greater than zero");
untron.setProvider(liquidity, rate, minOrderSize, minDeposit, receivers);
} else if (minDeposit == 0) {
// When minDeposit is 0, we expect a revert with the "Minimum deposit should be greater than zero" message
vm.expectRevert("Parameters should be greater than zero");
untron.setProvider(liquidity, rate, minOrderSize, minDeposit, receivers);
} else {
// Otherwise, set the provider and check for proper state updates
untron.setProvider(liquidity, rate, minOrderSize, minDeposit, receivers);

// Verify that the provider's information is updated correctly
IUntronCore.Provider memory provider = untron.providers(providerAddress);
assertEq(provider.liquidity, liquidity, "Provider's liquidity should match");
assertEq(provider.rate, rate, "Provider's rate should match");
assertEq(provider.minOrderSize, minOrderSize, "Provider's minOrderSize should match");
assertEq(provider.minDeposit, minDeposit, "Provider's minDeposit should match");
assertEq(provider.receivers.length, receivers.length, "Provider's receivers count should match");
}
// Then: Verify that the provider's state remains unchanged
IUntronCore.Provider memory finalProvider = untron.providers(providerAddress);
assertEq(finalProvider.liquidity, initialProvider.liquidity, "Provider's liquidity should remain unchanged");
assertEq(finalProvider.rate, initialProvider.rate, "Provider's rate should remain unchanged");
assertEq(finalProvider.minOrderSize, initialProvider.minOrderSize, "Provider's minOrderSize should remain unchanged");
assertEq(finalProvider.minDeposit, initialProvider.minDeposit, "Provider's minDeposit should remain unchanged");
}

/// @notice Test for setting provider with zero rate
function testSetProvider_RevertIf_ZeroRate() public {
// Given: A provider address and parameters
address providerAddress = vm.addr(100);
uint256 liquidity = 1000e6;
uint256 rate = 0; // Set rate to zero
uint256 minOrderSize = 100e6;
uint256 minDeposit = 10e6;
bytes21[] memory receivers = new bytes21[](2);
receivers[0] = addressToBytes21(vm.addr(200));

// Mint and approve USDT
mintUSDT(providerAddress, liquidity);
approveUSDT(providerAddress, address(untron), liquidity);

// Store initial provider state
IUntronCore.Provider memory initialProvider = untron.providers(providerAddress);

// Start the prank as the provider
vm.startPrank(providerAddress);

// When: Attempting to set provider
vm.expectRevert("Parameters should be greater than zero");
untron.setProvider(liquidity, rate, minOrderSize, minDeposit, receivers);
vm.stopPrank();

// Then: Verify that the provider's state remains unchanged
IUntronCore.Provider memory finalProvider = untron.providers(providerAddress);
assertEq(finalProvider.liquidity, initialProvider.liquidity, "Provider's liquidity should remain unchanged");
assertEq(finalProvider.rate, initialProvider.rate, "Provider's rate should remain unchanged");
assertEq(finalProvider.minOrderSize, initialProvider.minOrderSize, "Provider's minOrderSize should remain unchanged");
assertEq(finalProvider.minDeposit, initialProvider.minDeposit, "Provider's minDeposit should remain unchanged");
}


Expand Down

0 comments on commit 85b227b

Please sign in to comment.