Skip to content

Commit 0f34f4c

Browse files
committed
update test to coverage
1 parent 3ce010d commit 0f34f4c

File tree

4 files changed

+113
-88
lines changed

4 files changed

+113
-88
lines changed

contracts/sol6/Dao/EmergencyFeeHandler.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ contract EmergencyKyberFeeHandler is IKyberFeeHandler, PermissionGroupsNoModifie
7777
address platformWallet,
7878
uint256 platformFee,
7979
uint256 networkFee
80-
) external payable override onlyKyberNetwork {
80+
) external payable override onlyKyberNetwork nonReentrant {
8181
require(token == ETH_TOKEN_ADDRESS, "token not eth");
8282
require(msg.value == platformFee.add(networkFee), "msg.value not equal to total fees");
8383

@@ -180,7 +180,7 @@ contract EmergencyKyberFeeHandler is IKyberFeeHandler, PermissionGroupsNoModifie
180180
require(amount <= balance.sub(totalPlatformFeeWei), "amount > available funds");
181181

182182
(bool success, ) = sendTo.call{value: amount}("");
183-
require(success);
183+
require(success, "withdraw transfer failed");
184184
emit EtherWithdraw(amount, sendTo);
185185
}
186186

package-lock.json

Lines changed: 17 additions & 63 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
"@nomiclabs/buidler": "1.3.0",
4040
"@nomiclabs/buidler-truffle5": "1.3.0",
4141
"@nomiclabs/buidler-web3": "1.3.0",
42-
"@openzeppelin/test-helpers": "0.5.5",
42+
"@openzeppelin/test-helpers": "0.5.6",
4343
"chai": "4.2.0",
4444
"chai-bn": "0.2.0",
4545
"mv": "2.1.1",

test/sol6/emergencyFeeHandler.js

Lines changed: 93 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ const KyberNetwork = artifacts.require('KyberNetwork.sol')
44
const KyberStorage = artifacts.require('KyberStorage.sol')
55
const MatchingEngine = artifacts.require('KyberMatchingEngine.sol')
66
const TestToken = artifacts.require('Token.sol')
7+
const NoPayableFallback = artifacts.require('NoPayableFallback.sol')
78

89
const Helper = require('../helper.js')
910
const nwHelper = require('./networkHelper.js')
@@ -61,7 +62,7 @@ contract('EmergencyKyberFeeHandler', function (accounts) {
6162

6263
describe('test set network', async () => {
6364
let newNetwork = accounts[3]
64-
before('init emergencyFeeHandler', async () => {
65+
beforeEach('init emergencyFeeHandler', async () => {
6566
feeHandler = await EmergencyKyberFeeHandler.new(admin, network, rewardBps, rebateBps, burnBps)
6667
})
6768

@@ -76,6 +77,9 @@ contract('EmergencyKyberFeeHandler', function (accounts) {
7677
it('should success and emit events', async () => {
7778
let txResult = await feeHandler.setNetworkContract(newNetwork, {from: admin})
7879
await expectEvent(txResult, 'KyberNetworkUpdated', {kyberNetwork: newNetwork})
80+
// not update event if network contract is unchanged
81+
txResult = await feeHandler.setNetworkContract(newNetwork, {from: admin})
82+
await expectEvent.notEmitted(txResult, 'KyberNetworkUpdated')
7983
})
8084
})
8185

@@ -192,11 +196,10 @@ contract('EmergencyKyberFeeHandler', function (accounts) {
192196
})
193197

194198
describe('test validate condition', async () => {
199+
let platformFee = new BN(10).pow(new BN(17))
200+
let networkFee = new BN(10).pow(new BN(18))
201+
let fee = platformFee.add(networkFee)
195202
it('test only network call handleFee', async () => {
196-
let platformFee = new BN(10).pow(new BN(17))
197-
let fee = new BN(10).pow(new BN(18))
198-
let networkFee = fee.sub(platformFee)
199-
200203
await expectRevert(
201204
feeHandler.handleFees(
202205
ethAddress,
@@ -215,9 +218,6 @@ contract('EmergencyKyberFeeHandler', function (accounts) {
215218
})
216219

217220
it('test calculateAndRecordFeeData only call by feehandler', async () => {
218-
let platformFee = new BN(10).pow(new BN(17))
219-
let networkFee = new BN(10).pow(new BN(18))
220-
221221
try {
222222
await feeHandler.calculateAndRecordFeeData(
223223
platformWallet,
@@ -235,10 +235,6 @@ contract('EmergencyKyberFeeHandler', function (accounts) {
235235

236236
it('test revert if token is not eth', async () => {
237237
testToken = await TestToken.new('test', 'KNC', 18)
238-
let platformFee = new BN(10).pow(new BN(17))
239-
let fee = new BN(10).pow(new BN(18))
240-
let networkFee = fee.sub(platformFee)
241-
242238
await expectRevert(
243239
feeHandler.handleFees(
244240
testToken.address,
@@ -248,22 +244,72 @@ contract('EmergencyKyberFeeHandler', function (accounts) {
248244
platformFee,
249245
networkFee,
250246
{
251-
from: admin,
247+
from: network,
252248
value: fee
253249
}
254250
),
255-
'only kyberNetwork'
251+
'token not eth'
256252
)
257253
})
254+
255+
it('test revert if msg.value is different from total platformFee and networkFee', async() => {
256+
await expectRevert(
257+
feeHandler.handleFees(
258+
ethAddress,
259+
rebateWallets,
260+
rebateBpsPerWallet,
261+
platformWallet,
262+
platformFee,
263+
networkFee,
264+
{
265+
from: network,
266+
value: zeroBN
267+
}
268+
),
269+
'msg.value not equal to total fees'
270+
)
271+
})
272+
273+
it('test should record handle fee failed if rebatewallet is zero', async () => {
274+
let txResult = await feeHandler.handleFees(
275+
ethAddress,
276+
[zeroAddress, zeroAddress],
277+
rebateBpsPerWallet,
278+
platformWallet,
279+
platformFee,
280+
networkFee,
281+
{
282+
from: network,
283+
value: fee
284+
}
285+
)
286+
await expectEvent(txResult, 'HandleFeeFailed')
287+
})
288+
289+
it('test should record handle fee failed if total rebate bps > BPS', async () => {
290+
let txResult = await feeHandler.handleFees(
291+
ethAddress,
292+
rebateWallets,
293+
[new BN(5000), new BN(5001)],
294+
platformWallet,
295+
platformFee,
296+
networkFee,
297+
{
298+
from: network,
299+
value: fee
300+
}
301+
)
302+
await expectEvent(txResult, 'HandleFeeFailed')
303+
})
258304
})
259305
})
260306

261307
describe('test withdraw and claimPlatformFee function', async () => {
262-
let availableFee
263-
let totalBalance
264-
let platformFee
265308
before('create new feehandler', async () => {
266309
feeHandler = await EmergencyKyberFeeHandler.new(admin, network, rewardBps, rebateBps, burnBps)
310+
})
311+
312+
async function createHandleFee (platformWallet) {
267313
platformFee = new BN(10).pow(new BN(17))
268314
totalBalance = new BN(10).pow(new BN(18))
269315
await feeHandler.handleFees(
@@ -278,18 +324,29 @@ contract('EmergencyKyberFeeHandler', function (accounts) {
278324
value: totalBalance
279325
}
280326
)
281-
availableFee = totalBalance.sub(platformFee)
282-
})
327+
}
283328

284329
it('test withdraw revert if not admin', async () => {
285-
await expectRevert(feeHandler.withdraw(user, availableFee, {from: network}), 'only admin')
330+
await createHandleFee(platformWallet)
331+
await expectRevert(feeHandler.withdraw(user, new BN(1), {from: network}), 'only admin')
286332
})
287333

288-
it('test withdraw revert if not admin', async () => {
289-
await expectRevert(feeHandler.withdraw(user, totalBalance, {from: admin}), 'amount > available funds')
334+
it('test withdraw revert if withdraw more than availableBalance', async () => {
335+
await createHandleFee(platformWallet)
336+
totalPlatformFee = await feeHandler.totalPlatformFeeWei()
337+
totalBalance = await Helper.getBalancePromise(feeHandler.address)
338+
availableFee = totalBalance.sub(totalPlatformFee)
339+
await expectRevert(
340+
feeHandler.withdraw(user, availableFee.add(new BN(1)), {from: admin}),
341+
'amount > available funds'
342+
)
290343
})
291344

292345
it('test withdraw success', async () => {
346+
await createHandleFee(platformWallet)
347+
totalPlatformFee = await feeHandler.totalPlatformFeeWei()
348+
totalBalance = await Helper.getBalancePromise(feeHandler.address)
349+
availableFee = totalBalance.sub(totalPlatformFee)
293350
let initialBalance = await Helper.getBalancePromise(user)
294351
let txResult = await feeHandler.withdraw(user, availableFee, {from: admin})
295352
expectEvent(txResult, 'EtherWithdraw', {
@@ -300,8 +357,10 @@ contract('EmergencyKyberFeeHandler', function (accounts) {
300357
})
301358

302359
it('test claimPlatformFee success', async () => {
360+
await createHandleFee(platformWallet)
303361
let initialBalance = await Helper.getBalancePromise(platformWallet)
304362
let initialTotalPlatformFee = await feeHandler.totalPlatformFeeWei()
363+
let platformFee = await feeHandler.feePerPlatformWallet(platformWallet)
305364
let txResult = await feeHandler.claimPlatformFee(platformWallet)
306365
expectEvent(txResult, 'PlatformFeePaid', {
307366
platformWallet: platformWallet,
@@ -318,6 +377,18 @@ contract('EmergencyKyberFeeHandler', function (accounts) {
318377
)
319378
await expectRevert(feeHandler.claimPlatformFee(platformWallet), 'no fee to claim')
320379
})
380+
381+
it('reverts if platform wallet is non-payable contract', async () => {
382+
let platformWallet = await NoPayableFallback.new()
383+
await createHandleFee(platformWallet.address)
384+
await expectRevert(feeHandler.claimPlatformFee(platformWallet.address), 'platform fee transfer failed')
385+
})
386+
387+
it('reverts if withdraw to non-payable contract', async () => {
388+
let sendTo = await NoPayableFallback.new()
389+
await createHandleFee(platformWallet)
390+
await expectRevert(feeHandler.withdraw(sendTo.address, new BN(1), {from: admin}), 'withdraw transfer failed')
391+
})
321392
})
322393

323394
it('should revert with not implemented method from IKyberFeeHandler', async () => {

0 commit comments

Comments
 (0)