summaryrefslogtreecommitdiffstats
path: root/toolkit/components/glean/gtest/test.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
commit2aa4a82499d4becd2284cdb482213d541b8804dd (patch)
treeb80bf8bf13c3766139fbacc530efd0dd9d54394c /toolkit/components/glean/gtest/test.rs
parentInitial commit. (diff)
downloadfirefox-upstream.tar.xz
firefox-upstream.zip
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/components/glean/gtest/test.rs')
-rw-r--r--toolkit/components/glean/gtest/test.rs44
1 files changed, 44 insertions, 0 deletions
diff --git a/toolkit/components/glean/gtest/test.rs b/toolkit/components/glean/gtest/test.rs
new file mode 100644
index 0000000000..27af068734
--- /dev/null
+++ b/toolkit/components/glean/gtest/test.rs
@@ -0,0 +1,44 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+fn nonfatal_fail(msg: String) {
+ extern "C" {
+ fn GTest_FOG_ExpectFailure(message: *const ::std::os::raw::c_char);
+ }
+ unsafe {
+ let msg = ::std::ffi::CString::new(msg).unwrap();
+ GTest_FOG_ExpectFailure(msg.as_ptr());
+ }
+}
+
+/// This macro checks if the expression evaluates to true,
+/// and causes a non-fatal GTest test failure if it doesn't.
+macro_rules! expect {
+ ($x:expr) => {
+ match (&$x) {
+ true => {}
+ false => nonfatal_fail(format!(
+ "check failed: (`{}`) at {}:{}",
+ stringify!($x),
+ file!(),
+ line!()
+ )),
+ }
+ };
+}
+
+#[no_mangle]
+pub extern "C" fn Rust_MeasureInitializeTime() {
+ // At this point FOG is already initialized.
+ // We still need for it to finish, as it is running in a separate thread.
+
+ let metric = &*fog::metrics::fog::initialization;
+ while metric.test_get_value("metrics").is_none() {
+ // We _know_ this value is recorded early, so let's just yield
+ // and try again quickly.
+ std::thread::yield_now();
+ }
+
+ let value = metric.test_get_value("metrics").unwrap();
+ expect!(value > 0);
+}