Skip to content

Commit

Permalink
Add AaveV2Integration test cases
Browse files Browse the repository at this point in the history
  • Loading branch information
alsco77 committed Nov 24, 2020
1 parent ef62d54 commit 96b2557
Show file tree
Hide file tree
Showing 3 changed files with 1,184 additions and 50 deletions.
117 changes: 76 additions & 41 deletions contracts/z_mocks/masset/platform-integrations/MockAave.sol
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
pragma solidity 0.5.16;

import { IAaveATokenV1, IAaveLendingPoolV1, IAaveLendingPoolV2, ILendingPoolAddressesProviderV1, ILendingPoolAddressesProviderV2 } from "../../../masset/platform-integrations/IAave.sol";
import {
IAaveATokenV1,
IAaveATokenV2,
IAaveLendingPoolV1,
IAaveLendingPoolV2,
ILendingPoolAddressesProviderV1,
ILendingPoolAddressesProviderV2
} from "../../../masset/platform-integrations/IAave.sol";
import { AaveIntegration } from "../../../masset/platform-integrations/AaveIntegration.sol";
import { AaveV2Integration } from "../../../masset/platform-integrations/AaveV2Integration.sol";

import { MassetHelpers, SafeERC20, SafeMath } from "../../../masset/shared/MassetHelpers.sol";
import { StableMath } from "../../../shared/StableMath.sol";
Expand Down Expand Up @@ -36,7 +44,23 @@ contract MockAToken is ERC20Mintable {
}
}

contract MockAaveV2 is IAaveLendingPoolV2, ILendingPoolAddressesProviderV2 {

contract MockATokenV2 is ERC20Mintable {

address public lendingPool;
IERC20 public underlyingToken;
using SafeERC20 for IERC20;

constructor(address _lendingPool, IERC20 _underlyingToken) public {
lendingPool = _lendingPool;
underlyingToken = _underlyingToken;
addMinter(_lendingPool);
}
}



contract MockAaveV1 is IAaveLendingPoolV1, ILendingPoolAddressesProviderV1 {

using SafeMath for uint256;
using SafeERC20 for IERC20;
Expand All @@ -50,7 +74,7 @@ contract MockAaveV2 is IAaveLendingPoolV2, ILendingPoolAddressesProviderV2 {
reserveToAToken[_underlying] = _aToken;
}

function deposit(address _reserve, uint256 _amount, address /* _onBehalfOf */, uint16 /*_referralCode*/) external {
function deposit(address _reserve, uint256 _amount, uint16 /*_referralCode*/) external {
uint256 previousBal = IERC20(reserveToAToken[_reserve]).balanceOf(msg.sender);
uint256 factor = 2 * (10**13); // 0.002%
uint256 interest = previousBal.mul(factor).div(1e18);
Expand All @@ -61,23 +85,6 @@ contract MockAaveV2 is IAaveLendingPoolV2, ILendingPoolAddressesProviderV2 {
ERC20Mintable(reserveToAToken[_reserve]).mint(msg.sender, _amount);
}

function withdraw(
address reserve,
uint256 amount,
address to
) external {
IERC20(reserve).transfer(to, amount);
}

function getLendingPool() external view returns (address) {
return pool;
}

function breakLendingPools() external {
pool = address(0);
core = address(uint160(address(0)));
}


function transferTokens(
address _sender,
Expand All @@ -99,11 +106,28 @@ contract MockAaveV2 is IAaveLendingPoolV2, ILendingPoolAddressesProviderV2 {
IERC20(_basset).safeTransferFrom(_sender, _recipient, _qty);
}
}
}

function getLendingPool() external view returns (address) {
return pool;
}

function getLendingPoolCore() external view returns (address payable) {
return core;
}

contract MockAaveV1 is IAaveLendingPoolV1, ILendingPoolAddressesProviderV1 {
function breakLendingPools() external {
pool = address(0);
core = address(uint160(address(0)));
}

function migrateLendingPools(address payable _new) external {
pool = _new;
core = _new;
}
}


contract MockAaveV2 is IAaveLendingPoolV2, ILendingPoolAddressesProviderV2 {

using SafeMath for uint256;
using SafeERC20 for IERC20;
Expand All @@ -117,7 +141,7 @@ contract MockAaveV1 is IAaveLendingPoolV1, ILendingPoolAddressesProviderV1 {
reserveToAToken[_underlying] = _aToken;
}

function deposit(address _reserve, uint256 _amount, uint16 /*_referralCode*/) external {
function deposit(address _reserve, uint256 _amount, address /* _onBehalfOf */, uint16 /*_referralCode*/) external {
uint256 previousBal = IERC20(reserveToAToken[_reserve]).balanceOf(msg.sender);
uint256 factor = 2 * (10**13); // 0.002%
uint256 interest = previousBal.mul(factor).div(1e18);
Expand All @@ -128,6 +152,23 @@ contract MockAaveV1 is IAaveLendingPoolV1, ILendingPoolAddressesProviderV1 {
ERC20Mintable(reserveToAToken[_reserve]).mint(msg.sender, _amount);
}

function withdraw(
address reserve,
uint256 amount,
address to
) external {
IERC20(reserve).transfer(to, amount);
}

function getLendingPool() external view returns (address) {
return pool;
}

function breakLendingPools() external {
pool = address(0);
core = address(uint160(address(0)));
}


function transferTokens(
address _sender,
Expand All @@ -149,24 +190,6 @@ contract MockAaveV1 is IAaveLendingPoolV1, ILendingPoolAddressesProviderV1 {
IERC20(_basset).safeTransferFrom(_sender, _recipient, _qty);
}
}

function getLendingPool() external view returns (address) {
return pool;
}

function getLendingPoolCore() external view returns (address payable) {
return core;
}

function breakLendingPools() external {
pool = address(0);
core = address(uint160(address(0)));
}

function migrateLendingPools(address payable _new) external {
pool = _new;
core = _new;
}
}


Expand Down Expand Up @@ -194,3 +217,15 @@ contract MockAaveIntegration is AaveIntegration {
return bAssetsMapped;
}
}


contract MockAaveV2Integration is AaveV2Integration {

function getBassetsMapped()
external
view
returns (address[] memory bassets)
{
return bAssetsMapped;
}
}
12 changes: 3 additions & 9 deletions test/masset/platform-integrations/TestAaveIntegration.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,7 @@

import { expectEvent, expectRevert, time } from "@openzeppelin/test-helpers";
import { BN } from "@utils/tools";
import {
assertBNClose,
assertBNClosePercent,
assertBNSlightlyGT,
assertBNSlightlyGTPercent,
} from "@utils/assertions";
import { assertBNClose, assertBNSlightlyGT, assertBNSlightlyGTPercent } from "@utils/assertions";
import { StandardAccounts, SystemMachine, MassetMachine } from "@utils/machines";
import {
MainnetAccounts,
Expand All @@ -24,7 +19,6 @@ import envSetup from "@utils/env_setup";
import * as t from "types/generated";
import { BassetIntegrationDetails } from "../../../types";
import shouldBehaveLikeModule from "../../shared/behaviours/Module.behaviour";
import { createFalse } from "typescript";

const { expect } = envSetup.configure();

Expand All @@ -33,7 +27,7 @@ const c_MockAaveAToken = artifacts.require("MockAToken");
const c_MockAave = artifacts.require("MockAaveV1");
const c_Nexus = artifacts.require("Nexus");
const c_AaveLendingPoolAddressProvider = artifacts.require("ILendingPoolAddressesProviderV1");
const c_AaveLendingPool = artifacts.require("IAaveLendingPoolV2");
const c_AaveLendingPool = artifacts.require("IAaveLendingPoolV1");
const c_ERC20 = artifacts.require("ERC20Detailed");
const c_AaveAToken = artifacts.require("IAaveATokenV1");
const c_DelayedProxyAdmin = artifacts.require("DelayedProxyAdmin");
Expand Down Expand Up @@ -1006,7 +1000,7 @@ contract("AaveIntegration", async (accounts) => {
await addressProvider.getLendingPool(),
);
// 2.2. Call the deposit func
await d_lendingPool.deposit(bAsset.address, amount, sa.default, 9999);
await d_lendingPool.deposit(bAsset.address, amount, 9999);
// 2.3. Fast forward some time
await time.increase(ONE_WEEK);
// 2.4. Do a redemption
Expand Down
Loading

0 comments on commit 96b2557

Please sign in to comment.