public async Task NodeFileSystemUsageShouldInvalidWhenResponseIsInvalid()
        {
            var widget = new FileSystemUsageWidget
            {
                NodeUris = new List <string>()
                {
                    "http://127.0.0.1:9200"
                },
                NodeId = nodeId
            };

            var clusterStatsResponseMock      = new Mock <ClusterStatsResponse>();
            var elasticsearchHelperMock       = new Mock <ElasticsearchHelper>();
            var elasticsearchSimpleClientMock = new Mock <ElasticsearchSimpleClient>(MockBehavior.Strict, new object[] { widget });

            clusterStatsResponseMock.Setup(response => response.IsValid).Returns(false);

            elasticsearchHelperMock.Setup(helper => helper.GetElasticClient(It.IsAny <IElasticsearchWidget>()))
            .Returns(elasticsearchSimpleClientMock.Object);

            elasticsearchSimpleClientMock.Setup(client => client.StatsAsync("nodes.fs", nodeId, It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(clusterStatsResponseMock.Object));

            var request = MetricQueryRequest.Create(widget);

            var handler = new FileSystemUsageHandler(elasticsearchHelperMock.Object);

            await handler.Handle(request, CancellationToken.None).ConfigureAwait(false);

            Assert.AreEqual(State.Invalid, widget.State);

            elasticsearchHelperMock.Verify(client => client.GetElasticClient(It.IsAny <IElasticsearchWidget>()), Times.Once());
            elasticsearchSimpleClientMock.Verify(client => client.StatsAsync("nodes.fs", nodeId, It.IsAny <CancellationToken>()), Times.Once());
        }
        public async Task NodeFileSystemUsageShouldInvalidWhenPercentageUsedHighThenErrorPercentage()
        {
            var widget = new FileSystemUsageWidget
            {
                NodeUris = new List <string>()
                {
                    "http://127.0.0.1:9200"
                },
                PercentageType  = FileSystemPercentageType.PercentageUsed,
                NodeId          = nodeId,
                ErrorPercentage = 20
            };

            var clusterStatsResponseMock      = new Mock <ClusterStatsResponse>();
            var elasticsearchHelperMock       = new Mock <ElasticsearchHelper>();
            var elasticsearchSimpleClientMock = new Mock <ElasticsearchSimpleClient>(MockBehavior.Strict, new object[] { widget });

            clusterStatsResponseMock.Setup(response => response.Nodes.FileSystem.AvailableInBytes).Returns(30);
            clusterStatsResponseMock.Setup(response => response.Nodes.FileSystem.TotalInBytes).Returns(100);
            clusterStatsResponseMock.Setup(response => response.IsValid).Returns(true);

            elasticsearchHelperMock.Setup(helper => helper.GetElasticClient(It.IsAny <IElasticsearchWidget>()))
            .Returns(elasticsearchSimpleClientMock.Object);

            elasticsearchSimpleClientMock.Setup(client => client.StatsAsync("nodes.fs", nodeId, It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(clusterStatsResponseMock.Object));

            var request = MetricQueryRequest.Create(widget);

            var handler = new FileSystemUsageHandler(elasticsearchHelperMock.Object);

            await handler.Handle(request, CancellationToken.None).ConfigureAwait(false);

            Assert.AreEqual(State.Failed, widget.State);
            Assert.AreEqual(70, widget.Progress);
            Assert.AreEqual(70, widget.Value);
            Assert.AreEqual($"Used 70%{Environment.NewLine}70 bytes used out of 100 bytes", widget.Message);

            elasticsearchHelperMock.Verify(client => client.GetElasticClient(It.IsAny <IElasticsearchWidget>()), Times.Once());
            elasticsearchSimpleClientMock.Verify(client => client.StatsAsync("nodes.fs", nodeId, It.IsAny <CancellationToken>()), Times.Once());
        }