Skip to content

Commit f3fc113

Browse files
committed
test: add coverage for the new builders
1 parent 7b50b97 commit f3fc113

1 file changed

Lines changed: 147 additions & 1 deletion

File tree

  • opentelemetry-sdk/src/metrics/data

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

Lines changed: 147 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1173,11 +1173,157 @@ 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()
1205+
.with_metrics(vec![metric])
1206+
.build();
1207+
1208+
let rm = ResourceMetrics::builder()
1209+
.with_resource(Resource::builder().build())
1210+
.with_scope_metrics(vec![scope_metrics])
1211+
.build();
1212+
1213+
assert_eq!(rm.scope_metrics().count(), 1);
1214+
let sm = rm.scope_metrics().next().unwrap();
1215+
assert_eq!(sm.metrics().count(), 1);
1216+
let m = sm.metrics().next().unwrap();
1217+
assert_eq!(m.name(), "my_gauge");
1218+
assert_eq!(m.description(), "a test gauge");
1219+
assert_eq!(m.unit(), "ms");
1220+
}
1221+
1222+
#[test]
1223+
fn build_sum_with_data_points() {
1224+
let time = now();
1225+
let dp = SumDataPoint::builder(100_i64)
1226+
.with_attributes(vec![KeyValue::new("key", "value")])
1227+
.build();
1228+
1229+
let sum = Sum::builder(
1230+
vec![dp],
1231+
Temporality::Cumulative,
1232+
true,
1233+
time,
1234+
time,
1235+
)
1236+
.build();
1237+
1238+
assert_eq!(sum.data_points().count(), 1);
1239+
assert!(sum.is_monotonic());
1240+
assert_eq!(sum.temporality(), Temporality::Cumulative);
1241+
let dp = sum.data_points().next().unwrap();
1242+
assert_eq!(dp.value(), 100);
1243+
assert_eq!(dp.attributes().count(), 1);
1244+
}
1245+
1246+
#[test]
1247+
fn build_histogram_with_optional_fields() {
1248+
let time = now();
1249+
let dp = HistogramDataPoint::builder(10, 42.0_f64, vec![5.0, 10.0], vec![3, 5, 2])
1250+
.with_attributes(vec![KeyValue::new("key", "val")])
1251+
.with_min(1.0)
1252+
.with_max(20.0)
1253+
.build();
1254+
1255+
let histogram = Histogram::builder(vec![dp], Temporality::Delta, time, time).build();
1256+
1257+
assert_eq!(histogram.data_points().count(), 1);
1258+
assert_eq!(histogram.temporality(), Temporality::Delta);
1259+
let dp = histogram.data_points().next().unwrap();
1260+
assert_eq!(dp.count(), 10);
1261+
assert_eq!(dp.sum(), 42.0);
1262+
assert_eq!(dp.min(), Some(1.0));
1263+
assert_eq!(dp.max(), Some(20.0));
1264+
assert_eq!(dp.bounds().collect::<Vec<_>>(), vec![5.0, 10.0]);
1265+
assert_eq!(dp.bucket_counts().collect::<Vec<_>>(), vec![3, 5, 2]);
1266+
}
1267+
1268+
#[test]
1269+
fn build_exponential_histogram() {
1270+
let time = now();
1271+
let dp = ExponentialHistogramDataPoint::builder(
1272+
5,
1273+
100.0_f64,
1274+
3,
1275+
1,
1276+
ExponentialBucket::new(0, vec![1, 2, 3]),
1277+
ExponentialBucket::new(0, vec![4, 5]),
1278+
)
1279+
.with_attributes(vec![KeyValue::new("key", "val")])
1280+
.with_min(10.0)
1281+
.with_max(50.0)
1282+
.with_zero_threshold(0.001)
1283+
.build();
1284+
1285+
let eh = ExponentialHistogram::builder(vec![dp], Temporality::Cumulative, time, time).build();
1286+
1287+
assert_eq!(eh.data_points().count(), 1);
1288+
let dp = eh.data_points().next().unwrap();
1289+
assert_eq!(dp.count(), 5);
1290+
assert_eq!(dp.scale(), 3);
1291+
assert_eq!(dp.zero_count(), 1);
1292+
assert_eq!(dp.sum(), 100.0);
1293+
assert_eq!(dp.min(), Some(10.0));
1294+
assert_eq!(dp.max(), Some(50.0));
1295+
assert!((dp.zero_threshold() - 0.001).abs() < f64::EPSILON);
1296+
assert_eq!(dp.positive_bucket().offset(), 0);
1297+
assert_eq!(dp.positive_bucket().counts().collect::<Vec<_>>(), vec![1, 2, 3]);
1298+
assert_eq!(dp.negative_bucket().counts().collect::<Vec<_>>(), vec![4, 5]);
1299+
}
1300+
1301+
#[test]
1302+
fn build_exemplar_with_defaults() {
1303+
let time = now();
1304+
let exemplar = Exemplar::builder(42.0_f64, time).build();
1305+
1306+
assert_eq!(exemplar.value, 42.0);
1307+
assert_eq!(exemplar.time(), time);
1308+
assert_eq!(exemplar.span_id(), &[0; 8]);
1309+
assert_eq!(exemplar.trace_id(), &[0; 16]);
1310+
assert_eq!(exemplar.filtered_attributes().count(), 0);
1311+
}
1312+
1313+
#[test]
1314+
fn build_defaults_without_optional_fields() {
1315+
let rm = ResourceMetrics::builder().build();
1316+
assert_eq!(rm.scope_metrics().count(), 0);
1317+
1318+
let sm = ScopeMetrics::builder().build();
1319+
assert_eq!(sm.metrics().count(), 0);
1320+
1321+
let dp = GaugeDataPoint::builder(0.0_f64).build();
1322+
assert_eq!(dp.value(), 0.0);
1323+
assert_eq!(dp.attributes().count(), 0);
1324+
assert_eq!(dp.exemplars().count(), 0);
1325+
}
1326+
11811327
#[test]
11821328
fn validate_cloning_data_points() {
11831329
let data_type = SumDataPoint {

0 commit comments

Comments
 (0)