summaryrefslogtreecommitdiffstats
path: root/third_party/rust/glean-core/tests/rate.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/glean-core/tests/rate.rs')
-rw-r--r--third_party/rust/glean-core/tests/rate.rs134
1 files changed, 134 insertions, 0 deletions
diff --git a/third_party/rust/glean-core/tests/rate.rs b/third_party/rust/glean-core/tests/rate.rs
new file mode 100644
index 0000000000..f81e10cb53
--- /dev/null
+++ b/third_party/rust/glean-core/tests/rate.rs
@@ -0,0 +1,134 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+mod common;
+use crate::common::*;
+
+use glean_core::metrics::*;
+use glean_core::CommonMetricData;
+use glean_core::{test_get_num_recorded_errors, ErrorType};
+
+#[test]
+fn rate_smoke() {
+ let (glean, _t) = new_glean(None);
+
+ let metric: RateMetric = RateMetric::new(CommonMetricData {
+ name: "rate".into(),
+ category: "test".into(),
+ send_in_pings: vec!["test1".into()],
+ ..Default::default()
+ });
+
+ // Adding 0 doesn't error.
+ metric.add_to_numerator_sync(&glean, 0);
+ metric.add_to_denominator_sync(&glean, 0);
+
+ assert!(test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue).is_err());
+
+ // Adding a negative value errors.
+ metric.add_to_numerator_sync(&glean, -1);
+ metric.add_to_denominator_sync(&glean, -1);
+
+ assert_eq!(
+ Ok(2),
+ test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue),
+ );
+
+ // Getting the value returns 0s if that's all we have.
+ assert_eq!(metric.get_value(&glean, None), Some((0, 0).into()));
+
+ // And normal values of course work.
+ metric.add_to_numerator_sync(&glean, 22);
+ metric.add_to_denominator_sync(&glean, 7);
+
+ assert_eq!(metric.get_value(&glean, None), Some((22, 7).into()));
+}
+
+#[test]
+fn numerator_smoke() {
+ let (glean, _t) = new_glean(None);
+
+ let metric: NumeratorMetric = NumeratorMetric::new(CommonMetricData {
+ name: "rate".into(),
+ category: "test".into(),
+ send_in_pings: vec!["test1".into()],
+ ..Default::default()
+ });
+
+ // Adding 0 doesn't error.
+ metric.add_to_numerator_sync(&glean, 0);
+
+ assert!(test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue).is_err());
+
+ // Adding a negative value errors.
+ metric.add_to_numerator_sync(&glean, -1);
+
+ assert_eq!(
+ Ok(1),
+ test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue),
+ );
+
+ // Getting the value returns 0s if that's all we have.
+ let data = metric.get_value(&glean, None).unwrap();
+ assert_eq!(0, data.numerator);
+ assert_eq!(0, data.denominator);
+
+ // And normal values of course work.
+ metric.add_to_numerator_sync(&glean, 22);
+
+ let data = metric.get_value(&glean, None).unwrap();
+ assert_eq!(22, data.numerator);
+ assert_eq!(0, data.denominator);
+}
+
+#[test]
+fn denominator_smoke() {
+ let (glean, _t) = new_glean(None);
+
+ let meta1 = CommonMetricData {
+ name: "rate1".into(),
+ category: "test".into(),
+ send_in_pings: vec!["test1".into()],
+ ..Default::default()
+ };
+
+ let meta2 = CommonMetricData {
+ name: "rate2".into(),
+ category: "test".into(),
+ send_in_pings: vec!["test1".into()],
+ ..Default::default()
+ };
+
+ // This acts like a normal counter.
+ let denom: DenominatorMetric = DenominatorMetric::new(
+ CommonMetricData {
+ name: "counter".into(),
+ category: "test".into(),
+ send_in_pings: vec!["test1".into()],
+ ..Default::default()
+ },
+ vec![meta1.clone(), meta2.clone()],
+ );
+
+ let num1 = NumeratorMetric::new(meta1);
+ let num2 = NumeratorMetric::new(meta2);
+
+ num1.add_to_numerator_sync(&glean, 3);
+ num2.add_to_numerator_sync(&glean, 5);
+
+ denom.add_sync(&glean, 7);
+
+ // no errors.
+ assert!(test_get_num_recorded_errors(&glean, num1.meta(), ErrorType::InvalidValue).is_err());
+ assert!(test_get_num_recorded_errors(&glean, num2.meta(), ErrorType::InvalidValue).is_err());
+
+ // Getting the value returns 0s if that's all we have.
+ let data = num1.get_value(&glean, None).unwrap();
+ assert_eq!(3, data.numerator);
+ assert_eq!(7, data.denominator);
+
+ let data = num2.get_value(&glean, None).unwrap();
+ assert_eq!(5, data.numerator);
+ assert_eq!(7, data.denominator);
+}