From 8876f20106b415d330c0c71aead58546d8127fb5 Mon Sep 17 00:00:00 2001 From: Alan West <3676547+alanwest@users.noreply.github.com> Date: Thu, 7 Apr 2022 11:57:25 -0700 Subject: [PATCH] Add additional tests from #3129 --- .../Metrics/MetricViewTests.cs | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/test/OpenTelemetry.Tests/Metrics/MetricViewTests.cs b/test/OpenTelemetry.Tests/Metrics/MetricViewTests.cs index c8630701e5c..3a12cd4ac05 100644 --- a/test/OpenTelemetry.Tests/Metrics/MetricViewTests.cs +++ b/test/OpenTelemetry.Tests/Metrics/MetricViewTests.cs @@ -1037,5 +1037,97 @@ public void ViewConflict_TwoIdenticalInstruments_TwoViews_DifferentHistogramBoun actualCount++; } } + + [Fact] + public void ViewConflict_TwoInstruments_OneMatchesView() + { + var exportedItems = new List(); + + using var meter = new Meter($"{Utils.GetCurrentMethodName()}"); + var meterProviderBuilder = Sdk.CreateMeterProviderBuilder() + .AddMeter(meter.Name) + .AddView((instrument) => + { + if (instrument.Name == "name") + { + return new MetricStreamConfiguration { Name = "othername", TagKeys = new[] { "key1" } }; + } + else + { + return null; + } + }) + .AddInMemoryExporter(exportedItems); + + using var meterProvider = meterProviderBuilder.Build(); + + var instrument1 = meter.CreateCounter("name"); + var instrument2 = meter.CreateCounter("othername"); + + var tags = new KeyValuePair[] + { + new("key1", "value"), + new("key2", "value"), + }; + + instrument1.Add(10, tags); + instrument2.Add(10, tags); + + meterProvider.ForceFlush(MaxTimeToAllowForFlush); + + Assert.Equal(2, exportedItems.Count); + var metric1 = new List() { exportedItems[0] }; + var metric2 = new List() { exportedItems[1] }; + + var tags1 = new List> { tags[0] }; + var tags2 = new List> { tags[0], tags[1] }; + + Assert.Equal("othername", exportedItems[0].Name); + Assert.Equal("othername", exportedItems[1].Name); + + Assert.Equal(10, GetLongSum(metric1)); + Assert.Equal(10, GetLongSum(metric2)); + + CheckTagsForNthMetricPoint(metric1, tags1, 1); + CheckTagsForNthMetricPoint(metric2, tags2, 1); + } + + [Fact] + public void ViewConflict_TwoInstruments_ConflictAvoidedBecauseSecondInstrumentIsDropped() + { + var exportedItems = new List(); + + using var meter = new Meter($"{Utils.GetCurrentMethodName()}"); + var meterProviderBuilder = Sdk.CreateMeterProviderBuilder() + .AddMeter(meter.Name) + .AddView((instrument) => + { + if (instrument.Name == "name") + { + return new MetricStreamConfiguration { Name = "othername" }; + } + else + { + return MetricStreamConfiguration.Drop; + } + }) + .AddInMemoryExporter(exportedItems); + + using var meterProvider = meterProviderBuilder.Build(); + + var instrument1 = meter.CreateCounter("name"); + var instrument2 = meter.CreateCounter("othername"); + + instrument1.Add(10); + instrument2.Add(20); + + meterProvider.ForceFlush(MaxTimeToAllowForFlush); + + Assert.Single(exportedItems); + var metric1 = new List() { exportedItems[0] }; + + Assert.Equal("othername", exportedItems[0].Name); + Assert.Equal(10, GetLongSum(metric1)); + } } }