public async Task Test__Timeout__Throws()
        {
            var logFactory = new Mock <ILogFactory>();
            var log        = new Mock <ILog>();

            logFactory.Setup(x => x.CreateLog(It.IsAny <object>())).Returns(log.Object);
            var handler = new StubHttpMessageHandler((request) =>
            {
                IsAliveResponse isAlive = new IsAliveResponse()
                {
                    Env     = "UnitTest",
                    IsDebug = false,
                    Name    = $"",
                    Version = "1.0.0"
                };

                Task.Delay(TimeSpan.FromSeconds(10)).Wait();

                var serialized      = JsonConvert.SerializeObject(isAlive);
                var responseObj     = new HttpResponseMessage(HttpStatusCode.OK);
                responseObj.Content = new StringContent(serialized, Encoding.UTF8, "application/json");

                return(responseObj);
            });

            var blockchainApiClient =
                new BlockchainApiClient(logFactory.Object, "http://localhost:5000", 2, TimeSpan.FromSeconds(1), handler);

            await Assert.ThrowsAsync <OperationCanceledException>(async() =>
            {
                var response = await blockchainApiClient.GetIsAliveAsync();
            });
        }
        public async Task Test__TimeoutOnRealApi__Works()
        {
            var logFactory = new Mock <ILogFactory>();
            var log        = new Mock <ILog>();

            logFactory.Setup(x => x.CreateLog(It.IsAny <object>())).Returns(log.Object);

            var blockchainApiClient =
                new BlockchainApiClient(logFactory.Object, "http://stellar-api.bcn.svc.cluster.local", 20);

            var response = await blockchainApiClient.GetIsAliveAsync();
        }
        public async Task Test__TimeoutOnRealApi__Throws()
        {
            var logFactory = new Mock <ILogFactory>();
            var log        = new Mock <ILog>();

            logFactory.Setup(x => x.CreateLog(It.IsAny <object>())).Returns(log.Object);

            var blockchainApiClient =
                new BlockchainApiClient(logFactory.Object, "http://stellar-api.bcn.svc.cluster.local", 20, TimeSpan.FromSeconds(1));

            await Assert.ThrowsAsync <TaskCanceledException>(async() =>
            {
                var response = await blockchainApiClient.GetIsAliveAsync();
            });
        }
        public async Task <bool> ValidateServiceUrlAsync(string serviceUrl)
        {
            var isUrlValid = false;

            try
            {
                using (var client = new BlockchainApiClient(_logFactory, serviceUrl, 3))
                {
                    var isAlive = await client.GetIsAliveAsync();

                    isUrlValid = isAlive != null;
                }
            }
            catch (Exception e)
            {
                _log.Info(nameof(ValidateHotwalletAsync), message: "Could not check api validity", context: $"{serviceUrl}", exception: e);
            }

            return(isUrlValid);
        }
        public async Task <bool> ValidateHotwalletAsync(string apiUrl, string type, string address)
        {
            var isAddressValid = false;

            try
            {
                //TODO: WAIT FOR NEW IBlockchainApiClient on 2.1 framework (httpClientFactory will be there)
                //DIRTY HACK:
                using (var client = new BlockchainApiClient(_logFactory, apiUrl, 3))
                {
                    isAddressValid = await client.IsAddressValidAsync(address);
                }
            }
            catch (Exception e)
            {
                _log.Info(nameof(ValidateHotwalletAsync), message: "Could not check validity", context: $"{apiUrl}, {type}, {address}", exception: e);
            }

            return(isAddressValid);
        }