public static IAssetRepository GetPopulatedAssetRepository() { var table = new NoSqlTableInMemory <AssetRepository.AssetEntity>(); var assets = new List <AssetRepository.AssetEntity> { new AssetRepository.AssetEntity { Id = "EUR", Name = "EUR", Accuracy = 8, }, new AssetRepository.AssetEntity { Id = "BTC", Name = "BTC", Accuracy = 8 }, new AssetRepository.AssetEntity { Id = "USD", Name = "USD", Accuracy = 8 } }; table.InsertAsync(assets).GetAwaiter().GetResult(); return(new AssetRepository(table, new ConvertService())); }
public async Task AzureStorage_WithCache_Test() { var testEntity = GetTestEntity(); var storage1 = new NoSqlTableInMemory <TestEntity>(); Parallel.For(1, 10, i => { storage1.CreateIfNotExistsAsync(testEntity).Wait(); }); var createdEntity = await storage1.GetDataAsync(testEntity.PartitionKey, testEntity.RowKey); Assert.IsNotNull(createdEntity); }
public async Task cashout_test_old_txes(string messageId, double amountToTransferD, string address) { decimal amountToTransfer = (decimal)amountToTransferD; var message = new ToSendMessageFromQueue { Id = messageId, Address = address, Amount = amountToTransfer }; var fakeRpcClient = Substitute.For <IJsonRpcClient>(); fakeRpcClient.SendToAddress(address, amountToTransfer).Returns("sometxid"); var fakeTxesStorage = new NoSqlTableInMemory <ExistingCashOutEntity>(); fakeTxesStorage.Insert(new ExistingCashOutEntity { PartitionKey = "part", RowKey = "id1" }); fakeTxesStorage.Insert(new ExistingCashOutEntity { PartitionKey = "part", RowKey = "id2" }); fakeTxesStorage.Insert(new ExistingCashOutEntity { PartitionKey = "part", RowKey = "id3" }); fakeTxesStorage.Insert(new ExistingCashOutEntity { PartitionKey = "part", RowKey = "id4" }); fakeTxesStorage.Insert(new ExistingCashOutEntity { PartitionKey = "part", RowKey = "id5" }); var fakeLogger = Substitute.For <ILog>(); var fakeSlackNotifier = Substitute.For <ISlackNotifier>(); var queueTrigger = new CashOutQueueTrigger("SolarCoinApi.Tests.CashOut", fakeRpcClient, fakeTxesStorage, fakeLogger, fakeSlackNotifier); //Act await queueTrigger.Process(message); //Assert await fakeRpcClient.Received(0).SendToAddress(Arg.Any <string>(), Arg.Any <decimal>()); }
public async Task Test_Filter_Works_For_Autogenerated_DateTime_RowKey() { const int daysToSelect = 10; var testEntity = GetTestEntity(); var storage1 = new NoSqlTableInMemory <TestEntity>(); var dt = DateTime.UtcNow; for (int i = 0; i < 100; ++i) { await storage1.InsertAndGenerateRowKeyAsDateTimeAsync(testEntity, dt); dt = dt.AddDays(1); } var selectedRecordsCount = (await storage1.WhereAsync(testEntity.PartitionKey, dt.AddDays(-daysToSelect), dt, ToIntervalOption.IncludeTo)).Count(); Assert.AreEqual(selectedRecordsCount, daysToSelect); }
public async Task Verify_InsertAndGenerate_DateTime_RowKey_Increments() { var testEntity = GetTestEntity(); var storage1 = new NoSqlTableInMemory <TestEntity>(); for (int i = 0; i < 1000; ++i) { testEntity.Counter = i; await storage1.InsertAndGenerateRowKeyAsDateTimeAsync(testEntity, DateTime.UtcNow); } int ct = 0; var allEntities = (await storage1.GetDataAsync()).OrderBy(x => x.RowKey); foreach (var entity in allEntities) { Assert.AreEqual <int>(ct, entity.Counter); ++ct; } }
public static IAssetPairsRepository GetPopulatedAssetPairsRepository() { var table = new NoSqlTableInMemory <AssetPairEntity>(); var assetPairs = new List <AssetPairEntity> { new AssetPairEntity { Id = "EURUSD", Name = "EURUSD", Accuracy = 5, BaseAssetId = "EUR", QuoteAssetId = "USD", }, new AssetPairEntity { Id = "BTCEUR", Name = "BTCEUR", Accuracy = 3, BaseAssetId = "BTC", QuoteAssetId = "EUR" }, new AssetPairEntity { Id = "BTCUSD", Name = "BTCUSD", Accuracy = 3, BaseAssetId = "BTC", QuoteAssetId = "USD" }, new AssetPairEntity { Id = "BTCCHF", Name = "BTCCHF", Accuracy = 3, BaseAssetId = "BTC", QuoteAssetId = "CHF" }, new AssetPairEntity { Id = "CHFJPY", Name = "CHFJPY", Accuracy = 3, BaseAssetId = "CHF", QuoteAssetId = "JPY" }, new AssetPairEntity { Id = "USDCHF", Name = "USDCHF", Accuracy = 3, BaseAssetId = "USD", QuoteAssetId = "CHF" }, new AssetPairEntity { Id = "EURCHF", Name = "EURCHF", Accuracy = 5, BaseAssetId = "EUR", QuoteAssetId = "CHF" }, new AssetPairEntity { Id = "BTCJPY", Name = "BTCJPY", Accuracy = 5, BaseAssetId = "BTC", QuoteAssetId = "JPY" }, new AssetPairEntity { Id = "EURJPY", Name = "EURJPY", Accuracy = 3, BaseAssetId = "EUR", QuoteAssetId = "JPY" }, new AssetPairEntity { Id = "JPYUSD", Name = "JPYUSD", Accuracy = 3, BaseAssetId = "JPY", QuoteAssetId = "USD" }, new AssetPairEntity { Id = "EURGBP", Name = "EURGBP", Accuracy = 3, BaseAssetId = "EUR", QuoteAssetId = "GBP" }, new AssetPairEntity { Id = "GBPUSD", Name = "GBPUSD", Accuracy = 3, BaseAssetId = "GBP", QuoteAssetId = "USD" }, }; foreach (var pair in assetPairs) { pair.LegalEntity = "LYKKETEST"; pair.MatchingEngineMode = MatchingEngineMode.MarketMaker; pair.StpMultiplierMarkupAsk = 1; pair.StpMultiplierMarkupBid = 1; } table.InsertAsync(assetPairs).GetAwaiter().GetResult(); return(new AssetPairsRepository(table, new ConvertService())); }
public CachedAzureTableStorageDecorator(INoSQLTableStorage <T> table) { _table = table; _cache = new NoSqlTableInMemory <T>(); Init(); }
public async Task cashin_handler_test() { long s = 100000000; // accedpted vout amounts are in satoshis, should conver to solar coins, 1 slr = 10^8 satoshis //Arrange var hotWalletAddress = Guid.NewGuid().ToString(); var txFee = 0.01m; var minTxAmount = 0.1m; //Arranging generated wallets storage var generatedWallets = new NoSqlTableInMemory <WalletStorageEntity>(); generatedWallets.Insert(new WalletStorageEntity { PartitionKey = "part", RowKey = Guid.NewGuid().ToString(), Address = "8first_generated_address", PrivateKey = "first_priv_key" }); generatedWallets.Insert(new WalletStorageEntity { PartitionKey = "part", RowKey = Guid.NewGuid().ToString(), Address = "8second_generated_address", PrivateKey = "second_priv_key" }); generatedWallets.Insert(new WalletStorageEntity { PartitionKey = "part", RowKey = Guid.NewGuid().ToString(), Address = "8third_generated_address", PrivateKey = "third_priv_key" }); generatedWallets.Insert(new WalletStorageEntity { PartitionKey = "part", RowKey = Guid.NewGuid().ToString(), Address = "8fourth_generated_address", PrivateKey = "fourth_priv_key" }); var fakeTxesQueue = Substitute.For <IQueueExt>(); var fakeRpcClient = Substitute.For <IJsonRpcClient>(); fakeRpcClient.CreateRawTransaction(Arg.Any <object[]>(), Arg.Any <Dictionary <string, decimal> >()).Returns("string"); fakeRpcClient.SignRawTransaction(Arg.Any <string>(), Arg.Any <string>()).Returns(new SignRawTransactionResponseModel()); fakeRpcClient.SendRawTransaction(Arg.Any <string>()).Returns("string"); var fakeSlackNotifier = Substitute.For <ISlackNotifier>(); var fakeLogger = Substitute.For <ILog>(); var queueTrigger = new CashInHandlerQueueTrigger("SolarCoinApi.Test.CashInHandlerJobRunner", generatedWallets, fakeLogger, fakeTxesQueue, fakeRpcClient, fakeSlackNotifier, hotWalletAddress, txFee, minTxAmount); string txId = Guid.NewGuid().ToString(); var message = new TransitQueueMessage { TxId = txId, Vouts = new List <Vout> { new Vout { Address = "8third_generated_address", Amount = (long)(2.3652m * s) }, new Vout { Address = "some_unrelated_address_1", Amount = (long)(5m * s) }, // should be ignored new Vout { Address = "some_unrelated_address_2", Amount = (long)(6.365m * s) }, // should be ignored new Vout { Address = "8third_generated_address", Amount = (long)(2.146m * s) }, new Vout { Address = "some_unrelated_address_3", Amount = (long)(9.213m * s) }, // should be ignored new Vout { Address = "8first_generated_address", Amount = (long)(0.09m * s) }, // this shouldn't be put to queue because it's less than min tx amount new Vout { Address = "8fourth_generated_address", Amount = (long)(100.2568m * s) } } }; // Act await queueTrigger.ReceiveMessage(message); // Assert // Check if all relevant outputs where put in the queue correctly await fakeTxesQueue.Received(1).PutRawMessageAsync(Arg.Is <string>(x => JsonConvert.DeserializeObject <QueueModel>(x).Equals(new QueueModel { Address = "8third_generated_address", TxId = txId, Amount = 2.3652m + 2.146m }))); await fakeTxesQueue.Received(1).PutRawMessageAsync(Arg.Is <string>(x => JsonConvert.DeserializeObject <QueueModel>(x).Equals(new QueueModel { Address = "8fourth_generated_address", TxId = txId, Amount = 100.2568m }))); await fakeTxesQueue.Received(2).PutRawMessageAsync(Arg.Any <string>()); // Check if all relevant outputs where transferred to the hot wallet await fakeRpcClient.Received(1).CreateRawTransaction( Arg.Is <object[]>( x => x.Count() == 1 && x.All(y => (string)(y.GetType().GetProperty("txid").GetValue(y)) == txId) && x.Any(y => (int)(y.GetType().GetProperty("vout").GetValue(y)) == 6)), Arg.Is <Dictionary <string, decimal> >(x => x.Count == 1 && x[hotWalletAddress] == 100.2568m - txFee)); await fakeRpcClient.Received(1).CreateRawTransaction( Arg.Is <object[]>(x => x.Count() == 2 && x.All(y => (string)(y.GetType().GetProperty("txid").GetValue(y)) == txId) && x.Any(y => (int)(y.GetType().GetProperty("vout").GetValue(y)) == 0) && x.Any(y => (int)(y.GetType().GetProperty("vout").GetValue(y)) == 3)), Arg.Is <Dictionary <string, decimal> >(x => x.Count == 1 && x[hotWalletAddress] == 2.3652m + 2.146m - txFee)); await fakeRpcClient.Received(2).CreateRawTransaction(Arg.Any <object[]>(), Arg.Any <Dictionary <string, decimal> >()); await fakeRpcClient.Received(1).SignRawTransaction(Arg.Any <string>(), "third_priv_key"); await fakeRpcClient.Received(1).SignRawTransaction(Arg.Any <string>(), "fourth_priv_key"); await fakeRpcClient.Received(2).SignRawTransaction(Arg.Any <string>(), Arg.Any <string>()); await fakeRpcClient.Received(2).SendRawTransaction(Arg.Any <string>()); }
public AzureTableStorageWithCache(string connstionString, string tableName, ILog log) { _cache = new NoSqlTableInMemory <T>(); _table = new AzureTableStorage <T>(connstionString, tableName, log); Init(); }