From fab1c68d372cd3cb8c0a3635966c2f7af90d0974 Mon Sep 17 00:00:00 2001 From: Jonathan Ruffles Date: Thu, 19 Dec 2024 23:08:53 +0000 Subject: [PATCH] fix: ratelimiting to test cases --- BscScanner.Tests/AccountsApiTests.cs | 91 +++++++++++++++++-------- BscScanner.Tests/BlocksApiTests.cs | 57 ++++++++++------ BscScanner.Tests/ContractApiTests.cs | 4 ++ BscScanner.Tests/Helpers.cs | 14 ++++ BscScanner.Tests/ParityProxyApiTests.cs | 2 + BscScanner.Tests/StatsApiTests.cs | 6 ++ BscScanner.Tests/TokenApiTests.cs | 15 +++- BscScanner.Tests/TransactionApiTests.cs | 2 + 8 files changed, 142 insertions(+), 49 deletions(-) create mode 100644 BscScanner.Tests/Helpers.cs diff --git a/BscScanner.Tests/AccountsApiTests.cs b/BscScanner.Tests/AccountsApiTests.cs index e3f3601..4c4a742 100644 --- a/BscScanner.Tests/AccountsApiTests.cs +++ b/BscScanner.Tests/AccountsApiTests.cs @@ -3,13 +3,17 @@ 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") ); @@ -17,9 +21,13 @@ public async Task RunSingleBalanceTest() { } [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", @@ -28,51 +36,68 @@ 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); } } @@ -80,7 +105,9 @@ public async Task RunGetBep20TokenTransfersByAddress() { [Test] public async Task RunGetBep20TokenTransfersByContractAddress() { - var result = await RetryPolicy.BscScan.ExecuteAsync(() => + await Helpers.AvoidRateLimitAsync(); + + var result = await RetryPolicy.BscScan.ExecuteAsync(() => BscScanClient.GetBep20TokenTransferByContractAddress("0x7bb89460599dbf32ee3aa50798bbceae2a5f7f6a") ); @@ -91,12 +118,16 @@ 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); } } @@ -104,7 +135,9 @@ public async Task RunGetErc721TokenTransfersByAddress() { [Test] public async Task RunGetErc721TokenTransfersByContractAddress() { - var result = await RetryPolicy.BscScan.ExecuteAsync(() => + await Helpers.AvoidRateLimitAsync(); + + var result = await RetryPolicy.BscScan.ExecuteAsync(() => BscScanClient.GetErc721TokenTransferByContractAddress("0xc9849e6fdb743d08faee3e34dd2d1bc69ea11a51") ); @@ -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); } } diff --git a/BscScanner.Tests/BlocksApiTests.cs b/BscScanner.Tests/BlocksApiTests.cs index e196b1a..f8852ee 100644 --- a/BscScanner.Tests/BlocksApiTests.cs +++ b/BscScanner.Tests/BlocksApiTests.cs @@ -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); diff --git a/BscScanner.Tests/ContractApiTests.cs b/BscScanner.Tests/ContractApiTests.cs index 64abe12..eb9ad88 100644 --- a/BscScanner.Tests/ContractApiTests.cs +++ b/BscScanner.Tests/ContractApiTests.cs @@ -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") ); @@ -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") ); diff --git a/BscScanner.Tests/Helpers.cs b/BscScanner.Tests/Helpers.cs new file mode 100644 index 0000000..55c7b28 --- /dev/null +++ b/BscScanner.Tests/Helpers.cs @@ -0,0 +1,14 @@ +using System.Threading.Tasks; + +namespace BscScanner.Tests; + +public static class Helpers +{ + /// + /// 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 + /// + public static async Task AvoidRateLimitAsync() + { + await Task.Delay(2000); + } +} \ No newline at end of file diff --git a/BscScanner.Tests/ParityProxyApiTests.cs b/BscScanner.Tests/ParityProxyApiTests.cs index c75c4ff..a35c6f5 100644 --- a/BscScanner.Tests/ParityProxyApiTests.cs +++ b/BscScanner.Tests/ParityProxyApiTests.cs @@ -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()) ); diff --git a/BscScanner.Tests/StatsApiTests.cs b/BscScanner.Tests/StatsApiTests.cs index 3b55217..d00bc5d 100644 --- a/BscScanner.Tests/StatsApiTests.cs +++ b/BscScanner.Tests/StatsApiTests.cs @@ -10,6 +10,8 @@ internal sealed class StatsApiTests { [Test] public async Task RunGetBnbTotalSupply() { + await Helpers.AvoidRateLimitAsync(); + var amount = await RetryPolicy.BscScan.ExecuteAsync(() => BscScanClient.GetBnbTotalSupply() ); @@ -19,6 +21,8 @@ public async Task RunGetBnbTotalSupply() { [Test] public async Task RunGetBscValidators() { + await Helpers.AvoidRateLimitAsync(); + var amount = await RetryPolicy.BscScan.ExecuteAsync(() => BscScanClient.GetBscValidators() ); @@ -28,6 +32,8 @@ public async Task RunGetBscValidators() { [Test] public async Task RunGetBnbLastPrice() { + await Helpers.AvoidRateLimitAsync(); + var amount = await RetryPolicy.BscScan.ExecuteAsync(() => BscScanClient.GetBnbLastPrice() ); diff --git a/BscScanner.Tests/TokenApiTests.cs b/BscScanner.Tests/TokenApiTests.cs index 309edb1..69f8277 100644 --- a/BscScanner.Tests/TokenApiTests.cs +++ b/BscScanner.Tests/TokenApiTests.cs @@ -1,4 +1,5 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; using NUnit.Framework; namespace BscScanner.Tests; @@ -9,15 +10,21 @@ 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")) ); @@ -25,6 +32,8 @@ public async Task RunGetTokenCirculatingSupply() { [Test] public async Task RunGetAccountBalanceByContractAddressNull() { + await Helpers.AvoidRateLimitAsync(); + Assert.CatchAsync(async () => await RetryPolicy.BscScan.ExecuteAsync(() => BscScanClient.GetAccountBalanceByContractAddress("notatoken", "notanaddress")) ); @@ -32,6 +41,8 @@ public async Task RunGetAccountBalanceByContractAddressNull() { [Test] public async Task RunGetAccountBalanceByContractAddressValid() { + await Helpers.AvoidRateLimitAsync(); + var amount = await RetryPolicy.BscScan.ExecuteAsync(() => BscScanClient.GetAccountBalanceByContractAddress("0xc6cb12df4520b7bf83f64c79c585b8462e18b6aa", "0x59784ccC71205eF6A292F973e44f46CdC1f58306") ); diff --git a/BscScanner.Tests/TransactionApiTests.cs b/BscScanner.Tests/TransactionApiTests.cs index 12a3a07..bb8fa82 100644 --- a/BscScanner.Tests/TransactionApiTests.cs +++ b/BscScanner.Tests/TransactionApiTests.cs @@ -10,6 +10,8 @@ internal sealed class TransactionApiTests { [Test] public async Task RunGetTransactionReceiptStatus() { + await Helpers.AvoidRateLimitAsync(); + var balance = await RetryPolicy.BscScan.ExecuteAsync(() => BscScanClient.GetTransactionReceiptStatus("0xe9975702518c79caf81d5da65dea689dcac701fcdd063f848d4f03c85392fd00") );