public async Task AddAndEnumInParallel(int initialMetricsCount, int additionalMetrics) { var writer = Substitute.For <IMetricsWriter>(); writer.FlushAsync().ReturnsForAnyArgs((c) => Task.Delay(0)); var registry = new CollectorRegistry(); for (var i = initialMetricsCount; i > 0; i--) { registry.Add(new DummyCollector($"{i}collector", $"metric{i}")); } var tasks = Enumerable.Range(0, additionalMetrics) .Select(async i => { await Task.Yield(); registry.Add(new DummyCollector($"{i}collector_add", $"metric_add{i}")); }).ToList(); tasks.Add(registry.CollectToAsync(writer)); await Task.WhenAll(tasks); writer.ClearReceivedCalls(); await registry.CollectToAsync(writer); await writer.Received(initialMetricsCount + additionalMetrics).FlushAsync(); }
public void CannotAddDuplicatedCollectors() { var registry = new CollectorRegistry(); var collector = new DummyCollector("testName", "metric"); var collector1 = new DummyCollector("testName", "metric2"); registry.Add(collector); Assert.Throws <ArgumentException>(() => registry.Add(collector1)); }
public void CannotAddWithDuplicatedMetricNames(string[] first, string[] second) { var registry = new CollectorRegistry(); var collector1 = new DummyCollector("testName1", first); var collector2 = new DummyCollector("testName2", second); registry.Add(collector1); Assert.Throws <ArgumentException>(() => registry.Add(collector2)); }
public void CannotAddDuplicatedCollectors() { var registry = new CollectorRegistry(); var collector = Substitute.For <ICollector>(); collector.MetricNames.Returns(new[] { "metric" }); var collector1 = Substitute.For <ICollector>(); collector1.MetricNames.Returns(new[] { "metric" }); registry.Add("testName", collector); Assert.Throws <ArgumentException>(() => registry.Add("testName", collector1)); }
public void CannotAddWithDuplicatedMetricNames(string[] first, string[] second) { var registry = new CollectorRegistry(); var collector1 = Substitute.For <ICollector>(); collector1.MetricNames.Returns(first); var collector2 = Substitute.For <ICollector>(); collector2.MetricNames.Returns(second); registry.Add("collector1", collector1); Assert.Throws <ArgumentException>(() => registry.Add("collector1", collector2)); }
public void MetricNameShouldBeValid(string metricName) { var registry = new CollectorRegistry(); var collector = new DummyCollector("testName", metricName); Assert.Throws <ArgumentException>(() => registry.Add(collector)); }
public void CanRemoveCollector() { var registry = new CollectorRegistry(); var collector = new DummyCollector("collector", "metric"); registry.Add(collector); var collector1 = new DummyCollector("collector1", "metric1"); registry.Add(collector1); var res = registry.Remove(collector1); Assert.True(res); Assert.False(registry.TryGet("collector1", out var _)); Assert.True(registry.TryGet("collector", out var _)); }
public void CanRemoveCollector() { var registry = new CollectorRegistry(); var collector = Substitute.For <ICollector>(); collector.MetricNames.Returns(new[] { "metric" }); registry.Add("collector", collector); var collector1 = Substitute.For <ICollector>(); collector1.MetricNames.Returns(new[] { "metric1" }); registry.Add("metric1", collector1); registry.Remove("metric1"); Assert.True(registry.Enumerate().SequenceEqual(new[] { collector })); }
public void CollectorShouldDefineMetricNames(string[] metrics, string name) { // parameter "name" is useless in the test, but it's needed to avoid CS0182 error var registry = new CollectorRegistry(); var collector = new DummyCollector(name, metrics); Assert.Throws <ArgumentNullException>(() => registry.Add(collector)); }
public void CollectorShouldHaveName(string collectorName) { var registry = new CollectorRegistry(); var collector = Substitute.For <ICollector>(); collector.MetricNames.Returns(new[] { "metric" }); Assert.Throws <ArgumentNullException>(() => registry.Add(collectorName, collector)); }
public void MetricNameShouldBeValid(string metricName) { var registry = new CollectorRegistry(); var collector = Substitute.For <ICollector>(); collector.MetricNames.Returns(new[] { metricName }); Assert.Throws <ArgumentException>(() => registry.Add("tst", collector)); }
public void CollectorShouldDefineMetrics(string[] metrics, string name) { // parameter "name" is useless in the test, but it's needed to avoid CS0182 error var registry = new CollectorRegistry(); var collector = Substitute.For <ICollector>(); collector.MetricNames.Returns(metrics); Assert.Throws <ArgumentNullException>(() => registry.Add(name, collector)); }
public void DoNotCallFactoryIfCollectorExists() { var registry = new CollectorRegistry(); var originalCollector = new DummyCollector("testName", "metric"); var fn = Substitute.For <Func <CollectorConfiguration, ICollector> >(); registry.Add(originalCollector); var result = registry.GetOrAdd(originalCollector.Configuration, fn); Assert.Equal(originalCollector, result); fn.DidNotReceiveWithAnyArgs(); }
public void ShouldNotThrowOnRemoveByNameNonRegisteredCollector(string keyToRemove) { var registry = new CollectorRegistry(); var collector = new DummyCollector("collector", "metric"); registry.Add(collector); var res = registry.Remove(keyToRemove); Assert.Equal(null, res); Assert.True(registry.TryGet("collector", out var _)); }
public void CanRemoveCollector() { var registry = new CollectorRegistry(); var collector = Substitute.For <ICollector>(); collector.MetricNames.Returns(new[] { "metric" }); collector.Configuration.Name.Returns("collector"); registry.Add(collector); var collector1 = Substitute.For <ICollector>(); collector1.MetricNames.Returns(new[] { "metric1" }); collector1.Configuration.Name.Returns("metric1"); registry.Add(collector1); var res = registry.Remove(collector1); Assert.True(res); Assert.False(registry.TryGet("metric1", out var _)); Assert.True(registry.TryGet("collector", out var _)); }
public void DoNotCallFactoryIfCollectorExists() { var registry = new CollectorRegistry(); var originalCollector = Substitute.For <ICollector>(); originalCollector.MetricNames.Returns(new[] { "metric" }); var fn = Substitute.For <Func <CollectorConfiguration, ICollector> >(); var cfg = new CollectorConfiguration("testName"); registry.Add("testName", originalCollector); var result = registry.GetOrAdd(cfg, fn); Assert.Equal(originalCollector, result); fn.DidNotReceiveWithAnyArgs(); }
public void CanEnumerateCollectors(int count) { var registry = new CollectorRegistry(); var collectors = new List <ICollector>(); for (var i = 0; i < count; i++) { var collector = Substitute.For <ICollector>(); var name = $"metric{i}"; collector.MetricNames.Returns(new[] { name }); registry.Add(name, collector); collectors.Add(collector); } Assert.True(registry.Enumerate().SequenceEqual(collectors)); }