Skip to content

Commit d3e1646

Browse files
committed
test: add coverage for the new builders
1 parent 849ecf3 commit d3e1646

1 file changed

Lines changed: 145 additions & 1 deletion

File tree

  • opentelemetry-sdk/src/metrics/data

opentelemetry-sdk/src/metrics/data/mod.rs

Lines changed: 145 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1173,11 +1173,155 @@ impl<T> ExemplarBuilder<T> {
11731173
#[cfg(test)]
11741174
mod tests {
11751175

1176-
use super::{Exemplar, ExponentialHistogramDataPoint, HistogramDataPoint, SumDataPoint};
1176+
use super::*;
11771177

11781178
use opentelemetry::time::now;
11791179
use opentelemetry::KeyValue;
11801180

1181+
#[test]
1182+
fn build_resource_metrics_full_tree() {
1183+
let time = now();
1184+
let exemplar = Exemplar::builder(1.0_f64, time)
1185+
.with_filtered_attributes(vec![KeyValue::new("filtered", "attr")])
1186+
.with_span_id([1; 8])
1187+
.with_trace_id([2; 16])
1188+
.build();
1189+
1190+
let gauge_dp = GaugeDataPoint::builder(42.0_f64)
1191+
.with_attributes(vec![KeyValue::new("host", "localhost")])
1192+
.with_exemplars(vec![exemplar])
1193+
.build();
1194+
1195+
let gauge = Gauge::builder(vec![gauge_dp], time)
1196+
.with_start_time(time)
1197+
.build();
1198+
1199+
let metric = Metric::builder("my_gauge", AggregatedMetrics::F64(MetricData::Gauge(gauge)))
1200+
.with_description("a test gauge")
1201+
.with_unit("ms")
1202+
.build();
1203+
1204+
let scope_metrics = ScopeMetrics::builder().with_metrics(vec![metric]).build();
1205+
1206+
let rm = ResourceMetrics::builder()
1207+
.with_resource(Resource::builder().build())
1208+
.with_scope_metrics(vec![scope_metrics])
1209+
.build();
1210+
1211+
assert_eq!(rm.scope_metrics().count(), 1);
1212+
let sm = rm.scope_metrics().next().unwrap();
1213+
assert_eq!(sm.metrics().count(), 1);
1214+
let m = sm.metrics().next().unwrap();
1215+
assert_eq!(m.name(), "my_gauge");
1216+
assert_eq!(m.description(), "a test gauge");
1217+
assert_eq!(m.unit(), "ms");
1218+
}
1219+
1220+
#[test]
1221+
fn build_sum_with_data_points() {
1222+
let time = now();
1223+
let dp = SumDataPoint::builder(100_i64)
1224+
.with_attributes(vec![KeyValue::new("key", "value")])
1225+
.build();
1226+
1227+
let sum = Sum::builder(vec![dp], Temporality::Cumulative, true, time, time).build();
1228+
1229+
assert_eq!(sum.data_points().count(), 1);
1230+
assert!(sum.is_monotonic());
1231+
assert_eq!(sum.temporality(), Temporality::Cumulative);
1232+
let dp = sum.data_points().next().unwrap();
1233+
assert_eq!(dp.value(), 100);
1234+
assert_eq!(dp.attributes().count(), 1);
1235+
}
1236+
1237+
#[test]
1238+
fn build_histogram_with_optional_fields() {
1239+
let time = now();
1240+
let dp = HistogramDataPoint::builder(10, 42.0_f64, vec![5.0, 10.0], vec![3, 5, 2])
1241+
.with_attributes(vec![KeyValue::new("key", "val")])
1242+
.with_min(1.0)
1243+
.with_max(20.0)
1244+
.build();
1245+
1246+
let histogram = Histogram::builder(vec![dp], Temporality::Delta, time, time).build();
1247+
1248+
assert_eq!(histogram.data_points().count(), 1);
1249+
assert_eq!(histogram.temporality(), Temporality::Delta);
1250+
let dp = histogram.data_points().next().unwrap();
1251+
assert_eq!(dp.count(), 10);
1252+
assert_eq!(dp.sum(), 42.0);
1253+
assert_eq!(dp.min(), Some(1.0));
1254+
assert_eq!(dp.max(), Some(20.0));
1255+
assert_eq!(dp.bounds().collect::<Vec<_>>(), vec![5.0, 10.0]);
1256+
assert_eq!(dp.bucket_counts().collect::<Vec<_>>(), vec![3, 5, 2]);
1257+
}
1258+
1259+
#[test]
1260+
fn build_exponential_histogram() {
1261+
let time = now();
1262+
let dp = ExponentialHistogramDataPoint::builder(
1263+
5,
1264+
100.0_f64,
1265+
3,
1266+
1,
1267+
ExponentialBucket::new(0, vec![1, 2, 3]),
1268+
ExponentialBucket::new(0, vec![4, 5]),
1269+
)
1270+
.with_attributes(vec![KeyValue::new("key", "val")])
1271+
.with_min(10.0)
1272+
.with_max(50.0)
1273+
.with_zero_threshold(0.001)
1274+
.build();
1275+
1276+
let eh =
1277+
ExponentialHistogram::builder(vec![dp], Temporality::Cumulative, time, time).build();
1278+
1279+
assert_eq!(eh.data_points().count(), 1);
1280+
let dp = eh.data_points().next().unwrap();
1281+
assert_eq!(dp.count(), 5);
1282+
assert_eq!(dp.scale(), 3);
1283+
assert_eq!(dp.zero_count(), 1);
1284+
assert_eq!(dp.sum(), 100.0);
1285+
assert_eq!(dp.min(), Some(10.0));
1286+
assert_eq!(dp.max(), Some(50.0));
1287+
assert!((dp.zero_threshold() - 0.001).abs() < f64::EPSILON);
1288+
assert_eq!(dp.positive_bucket().offset(), 0);
1289+
assert_eq!(
1290+
dp.positive_bucket().counts().collect::<Vec<_>>(),
1291+
vec![1, 2, 3]
1292+
);
1293+
assert_eq!(
1294+
dp.negative_bucket().counts().collect::<Vec<_>>(),
1295+
vec![4, 5]
1296+
);
1297+
}
1298+
1299+
#[test]
1300+
fn build_exemplar_with_defaults() {
1301+
let time = now();
1302+
let exemplar = Exemplar::builder(42.0_f64, time).build();
1303+
1304+
assert_eq!(exemplar.value, 42.0);
1305+
assert_eq!(exemplar.time(), time);
1306+
assert_eq!(exemplar.span_id(), &[0; 8]);
1307+
assert_eq!(exemplar.trace_id(), &[0; 16]);
1308+
assert_eq!(exemplar.filtered_attributes().count(), 0);
1309+
}
1310+
1311+
#[test]
1312+
fn build_defaults_without_optional_fields() {
1313+
let rm = ResourceMetrics::builder().build();
1314+
assert_eq!(rm.scope_metrics().count(), 0);
1315+
1316+
let sm = ScopeMetrics::builder().build();
1317+
assert_eq!(sm.metrics().count(), 0);
1318+
1319+
let dp = GaugeDataPoint::builder(0.0_f64).build();
1320+
assert_eq!(dp.value(), 0.0);
1321+
assert_eq!(dp.attributes().count(), 0);
1322+
assert_eq!(dp.exemplars().count(), 0);
1323+
}
1324+
11811325
#[test]
11821326
fn validate_cloning_data_points() {
11831327
let data_type = SumDataPoint {

0 commit comments

Comments
 (0)