public async Task Can_browse() { IMongoDatabase database = MongoForTest.Provider.GetDatabase(); var repo = new DataAssetMongoRepository(database); DataAsset dataAsset = BuildDummyDataAsset(); await repo.AddAsync(dataAsset); await repo.BrowseAsync(new GetDataAssets()); }
public async Task Can_check_if_exists() { IMongoDatabase database = MongoForTest.Provider.GetDatabase(); var repo = new DataAssetMongoRepository(database); DataAsset dataAsset = BuildDummyDataAsset(); await repo.AddAsync(dataAsset); (await repo.ExistsAsync(dataAsset.Id)).Should().BeTrue(); }
public async Task Can_get_by_id() { IMongoDatabase database = MongoForTest.Provider.GetDatabase(); var repo = new DataAssetMongoRepository(database); DataAsset dataAsset = BuildDummyDataAsset(); await repo.AddAsync(dataAsset); DataAsset result = await repo.GetAsync(dataAsset.Id); result.Should().BeEquivalentTo(dataAsset); }
public async Task Can_browse_null_query() { IMongoDatabase database = MongoForTest.Provider.GetDatabase(); var repo = new DataAssetMongoRepository(database); DataAsset dataAsset = BuildDummyDataAsset(); await repo.AddAsync(dataAsset); var result = await repo.BrowseAsync(null); result.Items.Should().HaveCount(0); }
public async Task Can_remove_async() { IMongoDatabase database = MongoForTest.Provider.GetDatabase(); var repo = new DataAssetMongoRepository(database); DataAsset dataAsset = BuildDummyDataAsset(); await repo.AddAsync(dataAsset); await repo.RemoveAsync(dataAsset.Id); (await repo.ExistsAsync(dataAsset.Id)).Should().BeFalse(); DataAsset result = await repo.GetAsync(dataAsset.Id); result.Should().BeNull(); }
public async Task Can_browse_with_query_and_pagination() { IMongoDatabase database = MongoForTest.Provider.GetDatabase(); var repo = new DataAssetMongoRepository(database); DataAsset dataAsset = BuildDummyDataAsset(); await repo.AddAsync(dataAsset); GetDataAssets query = new GetDataAssets(); query.OnlyPublishable = true; query.Page = 0; query.Results = 10; await repo.BrowseAsync(query); }
public async Task InitAsync() { AddDecoders(); var logManager = _api.LogManager; var logger = logManager.GetClassLogger(); var skipDepositVerification = HasEnabledVariable("SKIP_DEPOSIT_VERIFICATION"); var backgroundServicesDisabled = HasEnabledVariable("BACKGROUND_SERVICES_DISABLED"); var disableSendingPaymentClaimTransaction = HasEnabledVariable("SENDING_PAYMENT_CLAIM_TRANSACTION_DISABLED"); var instantPaymentClaimVerificationEnabled = HasEnabledVariable("INSTANT_PAYMENT_CLAIM_VERIFICATION_ENABLED"); if (skipDepositVerification) { if (logger.IsWarn) { logger.Warn("*** NDM provider skipping deposit verification ***"); } } if (backgroundServicesDisabled) { if (logger.IsWarn) { logger.Warn("*** NDM provider background services are disabled ***"); } } if (disableSendingPaymentClaimTransaction) { if (logger.IsWarn) { logger.Warn("*** NDM provider sending payment claim transaction is disabled ***"); } } if (instantPaymentClaimVerificationEnabled) { if (logger.IsWarn) { logger.Warn("*** NDM provider instant payment claim verification is enabled ***"); } } var blockchainBridge = _api.BlockchainBridge; var ndmConfig = _api.NdmConfig; var txPool = _api.TxPool; var dbConfig = _api.ConfigProvider.GetConfig <IProviderDbConfig>(); var contractAddress = string.IsNullOrWhiteSpace(ndmConfig.ContractAddress) ? Address.Zero : new Address(ndmConfig.ContractAddress); _gasPriceService = _api.GasPriceService; var dbInitializer = new ProviderDbInitializer(_api.DbProvider, dbConfig, _api.RocksDbFactory, _api.MemDbFactory); await dbInitializer.Init(); var consumerRlpDecoder = new ConsumerDecoder(); var dataAssetRlpDecoder = new DataAssetDecoder(); var depositApprovalRlpDecoder = new DepositApprovalDecoder(); var paymentClaimRlpDecoder = new PaymentClaimDecoder(); var receiptRlpDecoder = new DataDeliveryReceiptDetailsDecoder(); var sessionRlpDecoder = new ProviderSessionDecoder(); var unitsRangeRlpDecoder = new UnitsRangeDecoder(); var accountAddress = string.IsNullOrWhiteSpace(ndmConfig.ProviderAddress) ? Address.Zero : new Address(ndmConfig.ProviderAddress); var coldWalletAddress = string.IsNullOrWhiteSpace(ndmConfig.ProviderColdWalletAddress) ? Address.Zero : new Address(ndmConfig.ProviderColdWalletAddress); var depositService = new DepositService(blockchainBridge, _api.AbiEncoder, _api.Wallet, contractAddress); var paymentService = new PaymentService(blockchainBridge, _api.AbiEncoder, _api.Wallet, contractAddress, logManager, txPool); var refundPolicy = new RefundPolicy(); var dataAvailabilityValidator = new DataAvailabilityValidator(); var transactionVerifier = new TransactionVerifier(blockchainBridge, ndmConfig.BlockConfirmations); var transactionService = _api.TransactionService; var timestamper = _api.Timestamper; IConsumerRepository consumerRepository; IDataAssetRepository dataAssetRepository; IProviderDepositApprovalRepository depositApprovalRepository; IPaymentClaimRepository paymentClaimRepository; IProviderSessionRepository sessionRepository; IReceiptRepository receiptRepository; switch (ndmConfig.Persistence?.ToLowerInvariant()) { case "mongo": IMongoDatabase?database = _api.MongoProvider.GetDatabase(); if (database == null) { throw new InvalidOperationException("Failed to initialize Mongo DB for NDM"); } consumerRepository = new ConsumerMongoRepository(database); dataAssetRepository = new DataAssetMongoRepository(database); depositApprovalRepository = new ProviderDepositApprovalMongoRepository(database); paymentClaimRepository = new PaymentClaimMongoRepository(database); receiptRepository = new ReceiptMongoRepository(database, "providerReceipts"); sessionRepository = new ProviderSessionMongoRepository(database); break; default: consumerRepository = new ConsumerRocksRepository(_api.Db <IDb>(ProviderDbNames.Consumers), consumerRlpDecoder); dataAssetRepository = new DataAssetRocksRepository(_api.Db <IDb>(ProviderDbNames.DataAssets), dataAssetRlpDecoder); depositApprovalRepository = new ProviderDepositApprovalRocksRepository( _api.Db <IDb>(ProviderDbNames.ProviderDepositApprovals), depositApprovalRlpDecoder); paymentClaimRepository = new PaymentClaimRocksRepository(_api.Db <IDb>(ProviderDbNames.PaymentClaims), paymentClaimRlpDecoder); receiptRepository = new ReceiptRocksRepository(_api.Db <IDb>(ProviderDbNames.ProviderReceipts), receiptRlpDecoder); sessionRepository = new ProviderSessionRocksRepository(_api.Db <IDb>(ProviderDbNames.ProviderSessions), sessionRlpDecoder); break; } var wallet = _api.Wallet; var depositHandlerFactory = new DepositNodesHandlerFactory(); _providerThresholdsService = new ProviderThresholdsService(_api.ConfigManager, ndmConfig.Id, logManager); var receiptsPolicies = new ReceiptsPolicies(_providerThresholdsService); IPaymentClaimProcessor paymentClaimProcessor = new PaymentClaimProcessor(_gasPriceService, consumerRepository, paymentClaimRepository, paymentService, coldWalletAddress, timestamper, unitsRangeRlpDecoder, logManager, disableSendingPaymentClaimTransaction); if (instantPaymentClaimVerificationEnabled) { paymentClaimProcessor = new InstantPaymentClaimProcessor(paymentClaimProcessor, paymentClaimRepository, logManager); } var receiptProcessor = new ReceiptProcessor(sessionRepository, _api.AbiEncoder, _api.EthereumEcdsa, logManager); var sessionManager = new SessionManager(sessionRepository, _api.Timestamper, logManager); _depositManager = new DepositManager(depositHandlerFactory, sessionManager, receiptsPolicies, wallet, accountAddress, receiptProcessor, paymentClaimProcessor, consumerRepository, paymentClaimRepository, receiptRepository, sessionRepository, timestamper, _gasPriceService, logManager); _providerService = new ProviderService(_api.ConfigManager, ndmConfig.Id, consumerRepository, dataAssetRepository, depositApprovalRepository, paymentClaimRepository, paymentClaimProcessor, sessionRepository, timestamper, _api.EthereumEcdsa, _api.AbiEncoder, _api.NdmDataPublisher, _gasPriceService, dataAvailabilityValidator, sessionManager, transactionVerifier, _depositManager, refundPolicy, depositService, wallet, blockchainBridge, accountAddress, coldWalletAddress, _api.Enode.PublicKey, ndmConfig.ProviderName, ndmConfig.FilesPath, ndmConfig.FileMaxSize, ndmConfig.BlockConfirmations, paymentService.GasLimit, logManager, skipDepositVerification, backgroundServicesDisabled); _reportService = new ReportService(consumerRepository, paymentClaimRepository); _providerTransactionsService = new ProviderTransactionsService(transactionService, paymentClaimRepository, timestamper, logManager); _providerGasLimitsService = new ProviderGasLimitsService(paymentService); IWebSocketsModule ndmWebSocketsModule = _api.WebSocketsManager.GetModule("ndm"); _api.NdmAccountUpdater = ndmConfig.ProviderColdWalletAddress != null ? new NdmAccountUpdater(ndmWebSocketsModule, _providerService.GetAddress(), _api.MainBlockProcessor, _api.StateProvider, new Address(ndmConfig.ProviderColdWalletAddress)) : new NdmAccountUpdater(ndmWebSocketsModule, _providerService.GetAddress(), _api.MainBlockProcessor, _api.StateProvider); }