// // Copyright The OpenTelemetry Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // using Xunit; namespace OpenTelemetry.Metrics.Tests; public class MetricTestsBase { public static void ValidateMetricPointTags(List> expectedTags, ReadOnlyTagCollection actualTags) { int tagIndex = 0; foreach (var tag in actualTags) { Assert.Equal(expectedTags[tagIndex].Key, tag.Key); Assert.Equal(expectedTags[tagIndex].Value, tag.Value); tagIndex++; } Assert.Equal(expectedTags.Count, tagIndex); } public static long GetLongSum(List metrics) { long sum = 0; foreach (var metric in metrics) { foreach (ref readonly var metricPoint in metric.GetMetricPoints()) { if (metric.MetricType.IsSum()) { sum += metricPoint.GetSumLong(); } else { sum += metricPoint.GetGaugeLastValueLong(); } } } return sum; } public static double GetDoubleSum(List metrics) { double sum = 0; foreach (var metric in metrics) { foreach (ref readonly var metricPoint in metric.GetMetricPoints()) { if (metric.MetricType.IsSum()) { sum += metricPoint.GetSumDouble(); } else { sum += metricPoint.GetGaugeLastValueDouble(); } } } return sum; } public static int GetNumberOfMetricPoints(List metrics) { int count = 0; foreach (var metric in metrics) { foreach (ref readonly var metricPoint in metric.GetMetricPoints()) { count++; } } return count; } public static MetricPoint? GetFirstMetricPoint(List metrics) { foreach (var metric in metrics) { foreach (ref readonly var metricPoint in metric.GetMetricPoints()) { return metricPoint; } } return null; } // Provide tags input sorted by Key public static void CheckTagsForNthMetricPoint(List metrics, List> tags, int n) { var metric = metrics[0]; var metricPointEnumerator = metric.GetMetricPoints().GetEnumerator(); for (int i = 0; i < n; i++) { Assert.True(metricPointEnumerator.MoveNext()); } int index = 0; var metricPoint = metricPointEnumerator.Current; foreach (var tag in metricPoint.Tags) { Assert.Equal(tags[index].Key, tag.Key); Assert.Equal(tags[index].Value, tag.Value); index++; } } internal static Exemplar[] GetExemplars(MetricPoint mp) { return mp.GetExemplars().Where(exemplar => exemplar.Timestamp != default).ToArray(); } }