fn with_extra_keys()

in glean-core/rlb/src/private/event.rs [126:183]


    fn with_extra_keys() {
        let _lock = lock_test();
        let _t = new_glean(None, true);

        #[derive(Default, Debug, Clone, Hash, Eq, PartialEq)]
        struct SomeExtra {
            key1: Option<String>,
            key2: Option<String>,
        }

        impl glean_core::traits::ExtraKeys for SomeExtra {
            const ALLOWED_KEYS: &'static [&'static str] = &["key1", "key2"];

            fn into_ffi_extra(self) -> HashMap<String, String> {
                let mut map = HashMap::new();
                self.key1.and_then(|key1| map.insert("key1".into(), key1));
                self.key2.and_then(|key2| map.insert("key2".into(), key2));
                map
            }
        }

        let metric: EventMetric<SomeExtra> = EventMetric::new(CommonMetricData {
            name: "event".into(),
            category: "test".into(),
            send_in_pings: vec!["store1".into()],
            ..Default::default()
        });

        let map1 = SomeExtra {
            key1: Some("1".into()),
            ..Default::default()
        };
        metric.record(map1);

        let map2 = SomeExtra {
            key1: Some("1".into()),
            key2: Some("2".into()),
        };
        metric.record(map2);

        metric.record(None);

        let data = metric.test_get_value(None).expect("no event recorded");
        assert_eq!(3, data.len());
        assert!(data[0].timestamp <= data[1].timestamp);
        assert!(data[1].timestamp <= data[2].timestamp);

        let mut map = HashMap::new();
        map.insert("key1".into(), "1".into());
        assert_eq!(Some(map), data[0].extra);

        let mut map = HashMap::new();
        map.insert("key1".into(), "1".into());
        map.insert("key2".into(), "2".into());
        assert_eq!(Some(map), data[1].extra);

        assert_eq!(None, data[2].extra);
    }