public async Task InvalidStorageConnection_Handled() { var configuration = new ConfigurationBuilder().Build(); Assert.Null(configuration.GetWebJobsConnectionString(ConnectionStringNames.Storage)); var options = new ScaleOptions(); ILoggerFactory loggerFactory = new LoggerFactory(); loggerFactory.AddProvider(_loggerProvider); var localRepository = new TableStorageScaleMetricsRepository(configuration, _hostIdProviderMock.Object, new OptionsWrapper <ScaleOptions>(options), loggerFactory, new TestEnvironment()); var monitor1 = new TestScaleMonitor1(); var monitor2 = new TestScaleMonitor2(); var monitor3 = new TestScaleMonitor3(); var monitors = new IScaleMonitor[] { monitor1, monitor2, monitor3 }; var result = await localRepository.ReadMetricsAsync(monitors); Assert.Empty(result); var logs = _loggerProvider.GetAllLogMessages(); Assert.Single(logs); Assert.Equal("Azure Storage connection string is empty or invalid. Unable to read/write scale metrics.", logs[0].FormattedMessage); _loggerProvider.ClearAllLogMessages(); Dictionary <IScaleMonitor, ScaleMetrics> metricsMap = new Dictionary <IScaleMonitor, ScaleMetrics>(); metricsMap.Add(monitor1, new TestScaleMetrics1 { Count = 10 }); metricsMap.Add(monitor2, new TestScaleMetrics2 { Num = 50 }); metricsMap.Add(monitor3, new TestScaleMetrics3 { Length = 100 }); await localRepository.WriteMetricsAsync(metricsMap); }
public async Task WriteMetricsAsync_PersistsMetrics() { var monitor1 = new TestScaleMonitor1(); var monitor2 = new TestScaleMonitor2(); var monitor3 = new TestScaleMonitor3(); var monitors = new IScaleMonitor[] { monitor1, monitor2, monitor3 }; var result = await _repository.ReadMetricsAsync(monitors); Assert.Equal(3, result.Count); // simulate 10 sample iterations for (int i = 0; i < 10; i++) { Dictionary <IScaleMonitor, ScaleMetrics> metricsMap = new Dictionary <IScaleMonitor, ScaleMetrics>(); metricsMap.Add(monitor1, new TestScaleMetrics1 { Count = i }); metricsMap.Add(monitor2, new TestScaleMetrics2 { Num = i }); metricsMap.Add(monitor3, new TestScaleMetrics3 { Length = i }); await _repository.WriteMetricsAsync(metricsMap); } // read the metrics back result = await _repository.ReadMetricsAsync(monitors); Assert.Equal(3, result.Count); var monitorMetricsList = result[monitor1]; for (int i = 0; i < 10; i++) { var currSample = (TestScaleMetrics1)monitorMetricsList[i]; Assert.Equal(i, currSample.Count); Assert.NotEqual(default(DateTime), currSample.Timestamp); } monitorMetricsList = result[monitor2]; for (int i = 0; i < 10; i++) { var currSample = (TestScaleMetrics2)monitorMetricsList[i]; Assert.Equal(i, currSample.Num); Assert.NotEqual(default(DateTime), currSample.Timestamp); } monitorMetricsList = result[monitor3]; for (int i = 0; i < 10; i++) { var currSample = (TestScaleMetrics3)monitorMetricsList[i]; Assert.Equal(i, currSample.Length); Assert.NotEqual(default(DateTime), currSample.Timestamp); } // if no monitors are presented result will be empty monitors = new IScaleMonitor[0]; result = await _repository.ReadMetricsAsync(monitors); Assert.Equal(0, result.Count); }