public void GetScaleStatus_HandlesMalformedMetrics() { // Null metrics var context = new ScaleStatusContext <DurableTaskTriggerMetrics> { WorkerCount = 1, Metrics = null, }; var recommendation = this.scaleMonitor.GetScaleStatus(context); Assert.Equal(ScaleVote.None, recommendation.Vote); // Empty metrics var heartbeats = new PerformanceHeartbeat[0]; context.Metrics = new DurableTaskTriggerMetrics[0]; this.performanceMonitor .Setup(m => m.MakeScaleRecommendation(1, heartbeats)) .Returns <ScaleRecommendation>(null); recommendation = this.scaleMonitor.GetScaleStatus(context); Assert.Equal(ScaleVote.None, recommendation.Vote); // Metrics with null properties var metrics = new DurableTaskTriggerMetrics[5]; for (int i = 0; i < metrics.Length; ++i) { metrics[i] = new DurableTaskTriggerMetrics(); } context.Metrics = metrics; heartbeats = new PerformanceHeartbeat[5]; for (int i = 0; i < heartbeats.Length; ++i) { heartbeats[i] = new PerformanceHeartbeat { ControlQueueLengths = new List <int>(), ControlQueueLatencies = new List <TimeSpan>(), }; } this.performanceMonitor .Setup(m => m.MakeScaleRecommendation(1, this.MatchEquivalentHeartbeats(heartbeats))) .Returns <ScaleRecommendation>(null); recommendation = this.scaleMonitor.GetScaleStatus(context); Assert.Equal(ScaleVote.None, recommendation.Vote); }
private void GetCorrespondingHeartbeatsAndMetrics(out PerformanceHeartbeat[] heartbeats, out DurableTaskTriggerMetrics[] metrics) { heartbeats = new PerformanceHeartbeat[] { new PerformanceHeartbeat { PartitionCount = 4, ControlQueueLengths = new List <int> { 1, 2, 3, 4 }, ControlQueueLatencies = new List <TimeSpan> { TimeSpan.FromMilliseconds(1), TimeSpan.FromMilliseconds(2), TimeSpan.FromMilliseconds(3), TimeSpan.FromMilliseconds(4), }, WorkItemQueueLength = 5, WorkItemQueueLatency = TimeSpan.FromMilliseconds(6), }, new PerformanceHeartbeat { PartitionCount = 7, ControlQueueLengths = new List <int> { 8, 9, 10, 11 }, ControlQueueLatencies = new List <TimeSpan> { TimeSpan.FromMilliseconds(12), TimeSpan.FromMilliseconds(13), TimeSpan.FromMilliseconds(14), TimeSpan.FromMilliseconds(15), }, WorkItemQueueLength = 16, WorkItemQueueLatency = TimeSpan.FromMilliseconds(17), }, }; metrics = new DurableTaskTriggerMetrics[] { new DurableTaskTriggerMetrics { PartitionCount = 4, ControlQueueLengths = "[1,2,3,4]", ControlQueueLatencies = "[\"00:00:00.0010000\",\"00:00:00.0020000\",\"00:00:00.0030000\",\"00:00:00.0040000\"]", WorkItemQueueLength = 5, WorkItemQueueLatency = "00:00:00.0060000", }, new DurableTaskTriggerMetrics { PartitionCount = 7, ControlQueueLengths = "[8,9,10,11]", ControlQueueLatencies = "[\"00:00:00.0120000\",\"00:00:00.0130000\",\"00:00:00.0140000\",\"00:00:00.0150000\"]", WorkItemQueueLength = 16, WorkItemQueueLatency = "00:00:00.0170000", }, }; }