Skip to content

Commit

Permalink
fix: ratelimiting to test cases
Browse files Browse the repository at this point in the history
  • Loading branch information
Jonathan Ruffles committed Dec 19, 2024
1 parent e3a8a5b commit fab1c68
Show file tree
Hide file tree
Showing 8 changed files with 142 additions and 49 deletions.
91 changes: 64 additions & 27 deletions BscScanner.Tests/AccountsApiTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,31 @@

namespace BscScanner.Tests;

internal sealed class AccountsApiTests {
internal sealed class AccountsApiTests
{

private static readonly IBscScanClient BscScanClient = new BscScanClient("7SYTNQ2B5SS7GR4WATVTFXP52BWSUK5PUJ");

[Test]
public async Task RunSingleBalanceTest() {
var balance = await RetryPolicy.BscScan.ExecuteAsync(() =>
public async Task RunSingleBalanceTest()
{
await Helpers.AvoidRateLimitAsync();

var balance = await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetBnbBalanceSingleAsync("0x29980bc85603c8b2a335e5375b57634a1fcef64b")
);

Assert.AreEqual(balance, 0f);
}

[Test]
public async Task RunMultipleBalanceTest() {
var balance = await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetBnbBalanceMultipleAsync(new[] {
public async Task RunMultipleBalanceTest()
{
await Helpers.AvoidRateLimitAsync();

var balance = await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetBnbBalanceMultipleAsync(new[]
{
"0x0000000000000000000000000000000000001004",
"0x59784ccC71205eF6A292F973e44f46CdC1f58306",
"0x4430b3230294d12c6ab2aac5c2cd68e80b16b581",
Expand All @@ -28,59 +36,78 @@ public async Task RunMultipleBalanceTest() {
})
);

foreach ( var bal in balance ) {
foreach (var bal in balance)
{
Assert.NotNull(bal);
}
}

[Test]
public async Task RunGetTransactionsByAddress() {
var result = await RetryPolicy.BscScan.ExecuteAsync(() =>
public async Task RunGetTransactionsByAddress()
{
await Helpers.AvoidRateLimitAsync();

var result = await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetTransactionsByAddress("0x59784ccC71205eF6A292F973e44f46CdC1f58306")
);

foreach ( var r in result ) {
foreach (var r in result)
{
Assert.NotNull(r);
}
}

[Test]
public async Task RunGetTransactionsByHash() {
var result = await RetryPolicy.BscScan.ExecuteAsync(() => RetryPolicy.BscScan.ExecuteAsync(() =>
public async Task RunGetTransactionsByHash()
{
await Helpers.AvoidRateLimitAsync();

var result = await RetryPolicy.BscScan.ExecuteAsync(() => RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetTransactionsByHash("0x4d74a6fc84d57f18b8e1dfa07ee517c4feb296d16a8353ee41adc03669982028"))
);

foreach ( var r in result ) {
foreach (var r in result)
{
Assert.NotNull(r);
}
}

[Test]
public async Task RunGetTransactionsByBlockRange() {
var result = await RetryPolicy.BscScan.ExecuteAsync(() =>
public async Task RunGetTransactionsByBlockRange()
{
await Helpers.AvoidRateLimitAsync();

var result = await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetTransactionsByBlockRange(1, 100000)
);

foreach ( var r in result ) {
foreach (var r in result)
{
Assert.NotNull(r);
}
}

[Test]
public async Task RunGetBep20TokenTransfersByAddress() {
var result = await RetryPolicy.BscScan.ExecuteAsync(() =>
public async Task RunGetBep20TokenTransfersByAddress()
{
await Helpers.AvoidRateLimitAsync();

var result = await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetBep20TokenTransfersByAddress("0x7bb89460599dbf32ee3aa50798bbceae2a5f7f6a")
);

foreach ( var r in result ) {
foreach (var r in result)
{
Assert.NotNull(r);
}
}

[Test]
public async Task RunGetBep20TokenTransfersByContractAddress()
{
var result = await RetryPolicy.BscScan.ExecuteAsync(() =>
await Helpers.AvoidRateLimitAsync();

var result = await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetBep20TokenTransferByContractAddress("0x7bb89460599dbf32ee3aa50798bbceae2a5f7f6a")
);

Expand All @@ -91,20 +118,26 @@ public async Task RunGetBep20TokenTransfersByContractAddress()
}

[Test]
public async Task RunGetErc721TokenTransfersByAddress() {
var result = await RetryPolicy.BscScan.ExecuteAsync(() =>
public async Task RunGetErc721TokenTransfersByAddress()
{
await Helpers.AvoidRateLimitAsync();

var result = await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetErc721TokenTransfersByAddress("0xcd4ee0a77e09afa8d5a6518f7cf8539bef684e6c")
);

foreach ( var r in result ) {
foreach (var r in result)
{
Assert.NotNull(r);
}
}

[Test]
public async Task RunGetErc721TokenTransfersByContractAddress()
{
var result = await RetryPolicy.BscScan.ExecuteAsync(() =>
await Helpers.AvoidRateLimitAsync();

var result = await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetErc721TokenTransferByContractAddress("0xc9849e6fdb743d08faee3e34dd2d1bc69ea11a51")
);

Expand All @@ -115,12 +148,16 @@ public async Task RunGetErc721TokenTransfersByContractAddress()
}

[Test]
public async Task RunGetBlocksValidatedByAddress() {
var result = await RetryPolicy.BscScan.ExecuteAsync(() =>
public async Task RunGetBlocksValidatedByAddress()
{
await Helpers.AvoidRateLimitAsync();

var result = await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetBlocksValidatedByAddress("0x78f3adfc719c99674c072166708589033e2d9afe")
);

foreach ( var r in result ) {
foreach (var r in result)
{
Assert.NotNull(r);
}
}
Expand Down
57 changes: 37 additions & 20 deletions BscScanner.Tests/BlocksApiTests.cs
Original file line number Diff line number Diff line change
@@ -1,54 +1,71 @@
using System;
using System.Text.Json;
using System.Threading.Tasks;
using NUnit.Framework;

namespace BscScanner.Tests;

internal sealed class BlocksApiTests {

internal sealed class BlocksApiTests
{

private static readonly IBscScanClient BscScanClient = new BscScanClient("7SYTNQ2B5SS7GR4WATVTFXP52BWSUK5PUJ");

[Test]
public async Task RunGetBlockRewardByBlock() {
var blockReward = await RetryPolicy.BscScan.ExecuteAsync(() =>
public async Task RunGetBlockRewardByBlock()
{
await Helpers.AvoidRateLimitAsync();

var blockReward = await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetBlockRewardByBlock(2150000)
);

Assert.AreEqual("2150000",blockReward.BlockNumber);
Assert.AreEqual("2150000", blockReward.BlockNumber);
Assert.AreEqual("1605122780", blockReward.TimeStamp);
}

[Test]
public async Task RunGetBlockCountdownByBlockPassed() {
var blockReward = await RetryPolicy.BscScan.ExecuteAsync(() =>
public async Task RunGetBlockCountdownByBlockPassed()
{
await Helpers.AvoidRateLimitAsync();

var blockReward = await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetBlockCountdownByBlock(8000000)
);

Assert.AreEqual(null, blockReward);
}

[Test]
public async Task RunGetBlockCountdownByBlockUpcoming() {
var blockReward = await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetBlockCountdownByBlock(80000000)
);
public async Task RunGetBlockCountdownByBlockUpcoming()
{
await Helpers.AvoidRateLimitAsync();

Assert.AreNotEqual(null, blockReward);
var blockReward = await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetBlockCountdownByBlock(6022687)
);

Assert.IsNull(blockReward);
}

[Test]
public async Task RunGetBlockNumberByTimestampLong() {
var blockReward = await RetryPolicy.BscScan.ExecuteAsync(() =>
public async Task RunGetBlockNumberByTimestampLong()
{
await Helpers.AvoidRateLimitAsync();

var blockReward = await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetBlockNumberByTimestamp(1624569213)
);

Assert.AreEqual(8586272, blockReward);
}

[Test]
public async Task RunGetBlockNumberByTimestampDateTime() {
var blockReward = await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetBlockNumberByTimestamp(new DateTime(2021, 06, 24, 9+12, 13, 33, DateTimeKind.Utc))
public async Task RunGetBlockNumberByTimestampDateTime()
{
await Helpers.AvoidRateLimitAsync();

var blockReward = await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetBlockNumberByTimestamp(new DateTime(2021, 06, 24, 9 + 12, 13, 33, DateTimeKind.Utc))
);

Assert.AreEqual(8586272, blockReward);
Expand Down
4 changes: 4 additions & 0 deletions BscScanner.Tests/ContractApiTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ internal sealed class ContractApiTests {

[Test]
public async Task RunGetAbiFromSource() {
await Helpers.AvoidRateLimitAsync();

var balance = await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetAbiFromSourceAddress("0x0000000000000000000000000000000000001004")
);
Expand All @@ -18,6 +20,8 @@ public async Task RunGetAbiFromSource() {

[Test]
public async Task RunGetSourceCodeFromSource() {
await Helpers.AvoidRateLimitAsync();

var balance = await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetSourceCodeFromSourceAddress("0x0000000000000000000000000000000000001004")
);
Expand Down
14 changes: 14 additions & 0 deletions BscScanner.Tests/Helpers.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using System.Threading.Tasks;

namespace BscScanner.Tests;

public static class Helpers
{
/// <summary>
/// Because the free tier API key is limited to 5req/s, we have to delay each test to make sure we don't fail due to getting ratelimited
/// </summary>
public static async Task AvoidRateLimitAsync()
{
await Task.Delay(2000);
}
}
2 changes: 2 additions & 0 deletions BscScanner.Tests/ParityProxyApiTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ internal sealed class ParityProxyApiTests {

[Test]
public async Task RunGetLatestBlock() {
await Helpers.AvoidRateLimitAsync();

Assert.DoesNotThrowAsync(async () => await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetLatestBlock())
);
Expand Down
6 changes: 6 additions & 0 deletions BscScanner.Tests/StatsApiTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ internal sealed class StatsApiTests {

[Test]
public async Task RunGetBnbTotalSupply() {
await Helpers.AvoidRateLimitAsync();

var amount = await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetBnbTotalSupply()
);
Expand All @@ -19,6 +21,8 @@ public async Task RunGetBnbTotalSupply() {

[Test]
public async Task RunGetBscValidators() {
await Helpers.AvoidRateLimitAsync();

var amount = await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetBscValidators()
);
Expand All @@ -28,6 +32,8 @@ public async Task RunGetBscValidators() {

[Test]
public async Task RunGetBnbLastPrice() {
await Helpers.AvoidRateLimitAsync();

var amount = await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetBnbLastPrice()
);
Expand Down
15 changes: 13 additions & 2 deletions BscScanner.Tests/TokenApiTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Threading.Tasks;
using System;
using System.Threading.Tasks;
using NUnit.Framework;

namespace BscScanner.Tests;
Expand All @@ -9,29 +10,39 @@ internal sealed class TokenApiTests {

[Test]
public async Task RunGetTokenTotalSupply() {
await Helpers.AvoidRateLimitAsync();

var supply = await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetTokenTotalSupply("0xe9e7cea3dedca5984780bafc599bd69add087d56")
);

Assert.AreEqual(double.Parse("4850999388629409465655005581"), supply);
Console.WriteLine(supply.ToString("F2"));

Assert.AreEqual(365596245875680231573946368.00, supply);
}

[Test]
public async Task RunGetTokenCirculatingSupply() {
await Helpers.AvoidRateLimitAsync();

Assert.DoesNotThrowAsync(async () => await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetTokenCirculatingSupply("0xe9e7cea3dedca5984780bafc599bd69add087d56"))
);
}

[Test]
public async Task RunGetAccountBalanceByContractAddressNull() {
await Helpers.AvoidRateLimitAsync();

Assert.CatchAsync(async () => await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetAccountBalanceByContractAddress("notatoken", "notanaddress"))
);
}

[Test]
public async Task RunGetAccountBalanceByContractAddressValid() {
await Helpers.AvoidRateLimitAsync();

var amount = await RetryPolicy.BscScan.ExecuteAsync(() =>
BscScanClient.GetAccountBalanceByContractAddress("0xc6cb12df4520b7bf83f64c79c585b8462e18b6aa", "0x59784ccC71205eF6A292F973e44f46CdC1f58306")
);
Expand Down
Loading

0 comments on commit fab1c68

Please sign in to comment.