From 83ad41fdd6f23c55590d7a135afd7d7a2ee901b0 Mon Sep 17 00:00:00 2001 From: Jan-Erik Rediger Date: Fri, 13 Dec 2024 13:50:28 +0000 Subject: [PATCH] Bug 1933939 - Integrate changed API of Glean v63.0.0 r=android-reviewers,chutten,pollymce,afranchuk This also standardizes on using the defined "test-ping" for metrics in tests. Differential Revision: https://phabricator.services.mozilla.com/D230527 --- .../components/protocolhandler/metrics.yaml | 2 - .../browser_UsageTelemetry_interaction.js | 2 + .../service/GleanCrashReporterServiceTest.kt | 27 +++++- .../samples/glean/pings.yaml | 11 +++ .../mozilla/fenix/components/GleanHelper.kt | 6 ++ .../components/metrics/GleanMetricsService.kt | 4 +- .../fenix/AppRequestInterceptorTest.kt | 4 +- .../org/mozilla/fenix/FenixApplicationTest.kt | 4 +- .../org/mozilla/fenix/HomeActivityTest.kt | 4 +- .../fenix/IntentReceiverActivityTest.kt | 4 +- .../components/BackgroundServicesTest.kt | 4 +- .../components/ReviewPromptControllerTest.kt | 4 +- .../menu/MenuTelemetryMiddlewareTest.kt | 4 +- .../InstallReferrerMetricsServiceTest.kt | 4 +- .../metrics/MetricControllerTest.kt | 4 +- .../toolbar/BrowserToolbarCFRPresenterTest.kt | 4 +- ...DefaultBrowserToolbarMenuControllerTest.kt | 4 +- .../experiments/RecordedNimbusContextTest.kt | 4 +- .../fenix/helpers/FenixGleanTestRule.kt | 82 +++++++++++++++++++ .../DefaultSessionControlControllerTest.kt | 4 +- .../mozilla/fenix/home/HomeMenuViewTest.kt | 4 +- .../mozilla/fenix/home/TabCounterViewTest.kt | 4 +- .../DefaultBookmarksControllerTest.kt | 4 +- .../intent/ReEngagementIntentProcessorTest.kt | 4 +- .../intent/StartSearchIntentProcessorTest.kt | 4 +- .../DefaultPocketStoriesControllerTest.kt | 4 +- .../RecentSyncedTabFeatureTest.kt | 4 +- .../DefaultRecentSyncedTabControllerTest.kt | 4 +- .../controller/RecentTabControllerTest.kt | 4 +- .../controller/RecentVisitsControllerTest.kt | 4 +- .../toolbar/DefaultToolbarControllerTest.kt | 4 +- .../topsites/TopSiteItemViewHolderTest.kt | 4 +- .../BookmarkFragmentInteractorTest.kt | 4 +- .../state/HistoryTelemetryMiddlewareTest.kt | 4 +- .../HistoryMetadataGroupControllerTest.kt | 4 +- .../DefaultRecentlyClosedControllerTest.kt | 4 +- .../lifecycle/StoreLifecycleObserverTest.kt | 4 +- .../messaging/DefaultMessageControllerTest.kt | 4 +- .../MicrosurveyMessageControllerTest.kt | 4 +- .../fenix/perf/StartupTypeTelemetryTest.kt | 4 +- .../fenix/perf/StorageStatsMetricsTest.kt | 4 +- .../search/SearchDialogControllerTest.kt | 4 +- .../SearchSelectorToolbarActionTest.kt | 4 +- .../settings/address/AddressEditorViewTest.kt | 4 +- .../DefaultCreditCardEditorControllerTest.kt | 4 +- ...aultCreditCardsManagementInteractorTest.kt | 4 +- .../logins/LoginsListControllerTest.kt | 4 +- .../DefaultQuickSettingsControllerTest.kt | 4 +- ...efaultCookieBannerDetailsControllerTest.kt | 4 +- .../TrustPanelTelemetryMiddlewareTest.kt | 4 +- .../fenix/share/SaveToPDFMiddlewareTest.kt | 4 +- .../fenix/share/ShareControllerTest.kt | 4 +- .../DefaultReviewQualityCheckServiceTest.kt | 4 +- ...viewQualityCheckTelemetryMiddlewareTest.kt | 4 +- .../tabstray/DefaultTabsTrayControllerTest.kt | 4 +- .../tabstray/NavigationInteractorTest.kt | 4 +- .../fenix/tabstray/TabsTrayFragmentTest.kt | 4 +- .../TabsTrayTelemetryMiddlewareTest.kt | 4 +- .../AbstractBrowserTabViewHolderTest.kt | 4 +- .../telemetry/TelemetryMiddlewareTest.kt | 4 +- .../TrackingProtectionPanelViewTest.kt | 4 +- .../focus/telemetry/GleanMetricsService.kt | 2 +- .../components/glean/api/src/common_test.rs | 13 +++ toolkit/components/glean/api/src/ffi/ping.rs | 5 ++ .../glean/api/src/private/boolean.rs | 6 +- .../glean/api/src/private/counter.rs | 4 +- .../api/src/private/custom_distribution.rs | 4 +- .../glean/api/src/private/datetime.rs | 6 +- .../glean/api/src/private/denominator.rs | 4 +- .../components/glean/api/src/private/event.rs | 8 +- .../glean/api/src/private/labeled.rs | 41 ++++++---- .../glean/api/src/private/labeled_boolean.rs | 7 +- .../glean/api/src/private/labeled_counter.rs | 10 ++- .../api/src/private/memory_distribution.rs | 6 +- .../glean/api/src/private/numerator.rs | 4 +- .../components/glean/api/src/private/ping.rs | 26 +++++- .../glean/api/src/private/quantity.rs | 2 +- .../components/glean/api/src/private/rate.rs | 4 +- .../glean/api/src/private/string.rs | 4 +- .../glean/api/src/private/string_list.rs | 4 +- .../components/glean/api/src/private/text.rs | 7 +- .../glean/api/src/private/timespan.rs | 4 +- .../api/src/private/timing_distribution.rs | 4 +- .../components/glean/api/src/private/url.rs | 4 +- .../components/glean/api/src/private/uuid.rs | 4 +- .../components/glean/bindings/jog/src/lib.rs | 6 ++ .../glean/bindings/private/Ping.cpp | 8 ++ .../components/glean/bindings/private/Ping.h | 10 +++ .../build_scripts/glean_parser_ext/jog.py | 3 +- .../templates/jog_factory.jinja2 | 3 +- .../templates/rust_pings.jinja2 | 14 ++++ toolkit/components/glean/src/init/mod.rs | 3 + .../components/glean/src/init/upload_pref.rs | 4 +- .../components/glean/tests/gtest/TestFog.cpp | 11 +-- .../glean/tests/pytest/jogfile_output | 18 ++-- .../glean/tests/pytest/pings_test_output | 22 +++++ .../components/glean/tests/test_metrics.yaml | 52 ++++++------ .../glean/tests/xpcshell/test_GIFFTIPC.js | 2 +- .../glean/tests/xpcshell/test_Glean.js | 4 +- .../glean/tests/xpcshell/test_GleanIPC.js | 2 +- .../glean/tests/xpcshell/test_JOG.js | 73 +++++++++-------- .../glean/tests/xpcshell/test_JOGIPC.js | 34 ++++---- toolkit/components/glean/xpcom/FOG.cpp | 6 +- toolkit/components/glean/xpcom/nsIFOG.idl | 3 +- .../components/glean/xpcom/nsIGleanPing.idl | 10 +++ toolkit/crashreporter/client/app/src/glean.rs | 6 ++ toolkit/crashreporter/client/app/src/main.rs | 6 ++ toolkit/mozapps/handling/metrics.yaml | 1 - 108 files changed, 557 insertions(+), 277 deletions(-) create mode 100644 mobile/android/fenix/app/src/test/java/org/mozilla/fenix/helpers/FenixGleanTestRule.kt diff --git a/browser/components/protocolhandler/metrics.yaml b/browser/components/protocolhandler/metrics.yaml index 252725aeb3ce..200cd2f73553 100644 --- a/browser/components/protocolhandler/metrics.yaml +++ b/browser/components/protocolhandler/metrics.yaml @@ -34,7 +34,6 @@ protocolhandler.mailto: - set_local_default - dismiss_local_default send_in_pings: - - active - metrics handler_prompt_shown: @@ -53,5 +52,4 @@ protocolhandler.mailto: - os_default - fx_default send_in_pings: - - active - metrics diff --git a/browser/modules/test/browser/browser_UsageTelemetry_interaction.js b/browser/modules/test/browser/browser_UsageTelemetry_interaction.js index 008f40a2d1ab..47290883de72 100644 --- a/browser/modules/test/browser/browser_UsageTelemetry_interaction.js +++ b/browser/modules/test/browser/browser_UsageTelemetry_interaction.js @@ -97,6 +97,8 @@ add_task(async function toolbarButtons() { Services.telemetry.getSnapshotForKeyedScalars("main", true); Services.fog.testResetFOG(); + // We want to record events into this ping, so it has to be enabled. + GleanPings.prototypeNoCodeEvents.setEnabled(true); let newTab = await BrowserTestUtils.openNewForegroundTab(gBrowser); let tabClose = BrowserTestUtils.waitForTabClosing(newTab); diff --git a/mobile/android/android-components/components/lib/crash/src/test/java/mozilla/components/lib/crash/service/GleanCrashReporterServiceTest.kt b/mobile/android/android-components/components/lib/crash/src/test/java/mozilla/components/lib/crash/service/GleanCrashReporterServiceTest.kt index 8a9baa7ca2c5..4c6b79186938 100644 --- a/mobile/android/android-components/components/lib/crash/src/test/java/mozilla/components/lib/crash/service/GleanCrashReporterServiceTest.kt +++ b/mobile/android/android-components/components/lib/crash/src/test/java/mozilla/components/lib/crash/service/GleanCrashReporterServiceTest.kt @@ -7,6 +7,7 @@ package mozilla.components.lib.crash.service import android.content.Context import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.work.testing.WorkManagerTestInitHelper import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonArray import kotlinx.serialization.json.JsonObject @@ -16,12 +17,15 @@ import mozilla.components.concept.base.crash.Breadcrumb import mozilla.components.lib.crash.Crash import mozilla.components.lib.crash.GleanMetrics.CrashMetrics import mozilla.components.support.test.whenever -import mozilla.telemetry.glean.testing.GleanTestRule +import mozilla.telemetry.glean.Glean +import mozilla.telemetry.glean.config.Configuration +import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull import org.junit.Assert.assertTrue +import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.rules.TemporaryFolder @@ -41,8 +45,25 @@ class GleanCrashReporterServiceTest { private val context: Context get() = ApplicationProvider.getApplicationContext() - @get:Rule - val gleanRule = GleanTestRule(context) + @Before + fun setUp() { + // We're using the WorkManager in a bunch of places, and Glean will crash + // in tests without this line. Let's simply put it here. + WorkManagerTestInitHelper.initializeTestWorkManager(context) + Glean.registerPings(GleanPings) + Glean.resetGlean( + context = context, + config = Configuration(), + clearStores = true, + ) + } + + @After + fun tearDown() { + // This closes the database to help prevent leaking it during tests. + // See Bug1719905 for more info. + WorkManagerTestInitHelper.closeWorkDatabase() + } @get:Rule val tempFolder = TemporaryFolder() diff --git a/mobile/android/android-components/samples/glean/pings.yaml b/mobile/android/android-components/samples/glean/pings.yaml index 7f998f774810..84fba541ff4e 100644 --- a/mobile/android/android-components/samples/glean/pings.yaml +++ b/mobile/android/android-components/samples/glean/pings.yaml @@ -19,3 +19,14 @@ sample: - N/A notification_emails: - CHANGE-ME@example.com + +test-string-list: + description: | + A test custom ping. + include_client_id: true + bugs: + - https://bugzilla.mozilla.org/123456789 + data_reviews: + - N/A + notification_emails: + - CHANGE-ME@example.com diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/GleanHelper.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/GleanHelper.kt index 580216463ad6..cf45895ae00a 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/GleanHelper.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/GleanHelper.kt @@ -13,6 +13,7 @@ import mozilla.telemetry.glean.config.Configuration import org.mozilla.fenix.BuildConfig import org.mozilla.fenix.Config import org.mozilla.fenix.GleanMetrics.GleanBuildInfo +import org.mozilla.fenix.GleanMetrics.Pings import org.mozilla.fenix.ext.getCustomGleanServerUrlIfAvailable import org.mozilla.fenix.ext.setCustomEndpointIfAvailable import org.mozilla.fenix.nimbus.FxNimbus @@ -48,6 +49,11 @@ fun initializeGlean(applicationContext: Context, logger: Logger, isTelemetryUplo pingSchedule = mapOf("baseline" to listOf("usage-reporting")), ) + // Since Glean v63.0.0, custom pings need to be registered prior to Glean init + // in order to ensure they are enabled and able to collect data. + // See https://bugzilla.mozilla.org/1934931 for more information. + Glean.registerPings(Pings) + // Set the metric configuration from Nimbus. Glean.applyServerKnobsConfig(FxNimbus.features.glean.value().metricsEnabled.toString()) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt index 87628bb83628..93aabb4244b5 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt @@ -79,7 +79,7 @@ class GleanMetricsService( override fun start() { logger.debug("Enabling Glean.") // Initialization of Glean already happened in FenixApplication. - Glean.setUploadEnabled(true) + Glean.setCollectionEnabled(true) if (initialized) return initialized = true @@ -101,7 +101,7 @@ class GleanMetricsService( } override fun stop() { - Glean.setUploadEnabled(false) + Glean.setCollectionEnabled(false) unsetUsageProfileId() } diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/AppRequestInterceptorTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/AppRequestInterceptorTest.kt index 6aac2eee2d38..f633f234b2c8 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/AppRequestInterceptorTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/AppRequestInterceptorTest.kt @@ -14,7 +14,6 @@ import mozilla.components.browser.errorpages.ErrorPages import mozilla.components.browser.errorpages.ErrorType import mozilla.components.concept.engine.request.RequestInterceptor import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Rule @@ -25,13 +24,14 @@ import org.mozilla.fenix.AppRequestInterceptor.Companion.LOW_AND_MEDIUM_RISK_ERR import org.mozilla.fenix.GleanMetrics.ErrorPage import org.mozilla.fenix.ext.isOnline import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner @RunWith(FenixRobolectricTestRunner::class) class AppRequestInterceptorTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) private lateinit var interceptor: RequestInterceptor private lateinit var navigationController: NavController diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/FenixApplicationTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/FenixApplicationTest.kt index 07c74222019e..cf1d6028cb27 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/FenixApplicationTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/FenixApplicationTest.kt @@ -20,7 +20,6 @@ import mozilla.components.concept.engine.webextension.WebExtension import mozilla.components.feature.addons.migration.DefaultSupportedAddonsChecker import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.utils.BrowsersCache -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull @@ -36,6 +35,7 @@ import org.mozilla.fenix.GleanMetrics.SearchDefaultEngine import org.mozilla.fenix.GleanMetrics.TopSites import org.mozilla.fenix.components.metrics.MozillaProductDetector import org.mozilla.fenix.components.toolbar.ToolbarPosition +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.utils.Settings import org.robolectric.Shadows.shadowOf @@ -44,7 +44,7 @@ import org.robolectric.annotation.Config @RunWith(FenixRobolectricTestRunner::class) class FenixApplicationTest { - @get:Rule val gleanTestRule = GleanTestRule(ApplicationProvider.getApplicationContext()) + @get:Rule val gleanTestRule = FenixGleanTestRule(ApplicationProvider.getApplicationContext()) private lateinit var application: FenixApplication private lateinit var browsersCache: BrowsersCache diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/HomeActivityTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/HomeActivityTest.kt index 809b9112bb2a..54e5bea7c0ea 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/HomeActivityTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/HomeActivityTest.kt @@ -16,7 +16,6 @@ import io.mockk.spyk import io.mockk.verify import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.utils.toSafeIntent -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertNotEquals @@ -34,6 +33,7 @@ import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.getIntentSource import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.systemGesturesInsets +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.helpers.perf.TestStrictModeManager import org.mozilla.fenix.utils.Settings @@ -41,7 +41,7 @@ import org.mozilla.fenix.utils.Settings @RunWith(FenixRobolectricTestRunner::class) class HomeActivityTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) private lateinit var activity: HomeActivity diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/IntentReceiverActivityTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/IntentReceiverActivityTest.kt index d2728194467a..e320ee6fdcae 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/IntentReceiverActivityTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/IntentReceiverActivityTest.kt @@ -21,7 +21,6 @@ import io.mockk.verify import kotlinx.coroutines.test.runTest import mozilla.components.feature.intent.processing.IntentProcessor import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull @@ -37,6 +36,7 @@ import org.mozilla.fenix.components.IntentProcessors import org.mozilla.fenix.customtabs.ExternalAppBrowserActivity import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.helpers.perf.TestStrictModeManager import org.mozilla.fenix.shortcut.NewTabShortcutIntentProcessor @@ -52,7 +52,7 @@ class IntentReceiverActivityTest { private lateinit var intentProcessors: IntentProcessors @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @Before fun setup() { diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/BackgroundServicesTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/BackgroundServicesTest.kt index 3723d4977249..fa6bcce03f31 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/BackgroundServicesTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/BackgroundServicesTest.kt @@ -19,7 +19,6 @@ import mozilla.components.concept.sync.OAuthAccount import mozilla.components.service.nimbus.NimbusApi import mozilla.components.support.base.observer.ObserverRegistry import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Rule @@ -27,6 +26,7 @@ import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.GleanMetrics.SyncAuth import org.mozilla.fenix.ext.components +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.utils.Settings @@ -35,7 +35,7 @@ import org.mozilla.fenix.utils.Settings class BackgroundServicesTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @MockK private lateinit var context: Context diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/ReviewPromptControllerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/ReviewPromptControllerTest.kt index ed89e094d24c..b369fe640a8e 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/ReviewPromptControllerTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/ReviewPromptControllerTest.kt @@ -8,7 +8,6 @@ import com.google.android.play.core.review.ReviewManager import com.google.android.play.core.review.ReviewManagerFactory import kotlinx.coroutines.test.runTest import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertNull @@ -19,6 +18,7 @@ import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.GleanMetrics.ReviewPrompt import org.mozilla.fenix.HomeActivity +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import java.text.SimpleDateFormat import java.util.Date @@ -37,7 +37,7 @@ class TestReviewSettings( class ReviewPromptControllerTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) private lateinit var reviewManager: ReviewManager diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/menu/MenuTelemetryMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/menu/MenuTelemetryMiddlewareTest.kt index f18a61744ce8..83877a997624 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/menu/MenuTelemetryMiddlewareTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/menu/MenuTelemetryMiddlewareTest.kt @@ -13,7 +13,6 @@ import mozilla.components.support.test.robolectric.testContext import mozilla.telemetry.glean.internal.CounterMetric import mozilla.telemetry.glean.private.EventMetricType import mozilla.telemetry.glean.private.NoExtras -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull @@ -32,12 +31,13 @@ import org.mozilla.fenix.components.menu.store.BrowserMenuState import org.mozilla.fenix.components.menu.store.MenuAction import org.mozilla.fenix.components.menu.store.MenuState import org.mozilla.fenix.components.menu.store.MenuStore +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.robolectric.RobolectricTestRunner @RunWith(RobolectricTestRunner::class) class MenuTelemetryMiddlewareTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @Test fun `WHEN adding a bookmark THEN record the bookmark browser menu telemetry`() { diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/metrics/InstallReferrerMetricsServiceTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/metrics/InstallReferrerMetricsServiceTest.kt index 83c490ae60bd..3c3c6c215d02 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/metrics/InstallReferrerMetricsServiceTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/metrics/InstallReferrerMetricsServiceTest.kt @@ -7,7 +7,6 @@ package org.mozilla.fenix.components.metrics import android.content.Context import androidx.test.core.app.ApplicationProvider import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertNull @@ -17,6 +16,7 @@ import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.GleanMetrics.MetaAttribution import org.mozilla.fenix.GleanMetrics.PlayStoreAttribution +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.utils.Settings import org.robolectric.RobolectricTestRunner @@ -25,7 +25,7 @@ internal class InstallReferrerMetricsServiceTest { val context: Context = ApplicationProvider.getApplicationContext() @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @Test fun `WHEN retrieving minimum UTM params from setting THEN result should match`() { diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt index 2731ecf9287e..dfc7326ff581 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt @@ -34,7 +34,6 @@ import mozilla.components.support.base.facts.Fact import mozilla.components.support.base.log.logger.Logger import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.webextensions.facts.WebExtensionFacts -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull @@ -55,6 +54,7 @@ import org.mozilla.fenix.GleanMetrics.ProgressiveWebApp import org.mozilla.fenix.GleanMetrics.SitePermissions import org.mozilla.fenix.GleanMetrics.SyncedTabs import org.mozilla.fenix.components.metrics.ReleaseMetricController.Companion +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.search.awesomebar.ShortcutsSuggestionProvider import org.mozilla.fenix.utils.Settings @@ -64,7 +64,7 @@ import mozilla.components.compose.browser.awesomebar.AwesomeBarFacts as ComposeA class MetricControllerTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @MockK(relaxUnitFun = true) private lateinit var dataService1: MetricsService diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/toolbar/BrowserToolbarCFRPresenterTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/toolbar/BrowserToolbarCFRPresenterTest.kt index de6d5ef8c191..c5ce67766a0b 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/toolbar/BrowserToolbarCFRPresenterTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/toolbar/BrowserToolbarCFRPresenterTest.kt @@ -28,7 +28,6 @@ import mozilla.components.concept.engine.EngineSession import mozilla.components.support.test.ext.joinBlocking import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.rule.MainCoroutineRule -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.After import org.junit.Assert.assertNotNull import org.junit.Before @@ -38,6 +37,7 @@ import org.junit.runner.RunWith import org.mozilla.fenix.R import org.mozilla.fenix.browser.tabstrip.isTabStripEnabled import org.mozilla.fenix.ext.isLargeWindow +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.utils.Settings @@ -47,7 +47,7 @@ class BrowserToolbarCFRPresenterTest { val coroutinesTestRule = MainCoroutineRule() @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @Before fun setup() { diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarMenuControllerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarMenuControllerTest.kt index 2ef85b5b6fb0..20b7f50c3c7d 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarMenuControllerTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarMenuControllerTest.kt @@ -51,7 +51,6 @@ import mozilla.components.support.test.ext.joinBlocking import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.rule.MainCoroutineRule import mozilla.components.support.test.rule.runTestOnMain -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull @@ -80,6 +79,7 @@ import org.mozilla.fenix.components.appstate.AppAction.ShortcutAction import org.mozilla.fenix.compose.snackbar.Snackbar import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.directionsEq +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.settings.deletebrowsingdata.deleteAndQuit import org.mozilla.fenix.utils.Settings @@ -91,7 +91,7 @@ class DefaultBrowserToolbarMenuControllerTest { val coroutinesTestRule = MainCoroutineRule() @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @MockK private lateinit var snackbarParent: ViewGroup diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/experiments/RecordedNimbusContextTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/experiments/RecordedNimbusContextTest.kt index 7c5c059e159e..8fe960d7e8f0 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/experiments/RecordedNimbusContextTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/experiments/RecordedNimbusContextTest.kt @@ -12,13 +12,13 @@ import kotlinx.serialization.json.jsonObject import kotlinx.serialization.json.put import kotlinx.serialization.json.putJsonObject import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mozilla.experiments.nimbus.internal.validateEventQueries +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.GleanMetrics.NimbusSystem as GleanNimbus @@ -26,7 +26,7 @@ import org.mozilla.fenix.GleanMetrics.NimbusSystem as GleanNimbus class RecordedNimbusContextTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @Test fun `GIVEN a nimbusApi object WHEN recorded context with eventQueries is supplied THEN the event queries must be valid`() { diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/helpers/FenixGleanTestRule.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/helpers/FenixGleanTestRule.kt new file mode 100644 index 000000000000..427770168eff --- /dev/null +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/helpers/FenixGleanTestRule.kt @@ -0,0 +1,82 @@ +/* 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 http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.helpers + +import android.content.Context +import androidx.annotation.VisibleForTesting +import androidx.work.testing.WorkManagerTestInitHelper +import mozilla.telemetry.glean.Glean +import mozilla.telemetry.glean.config.Configuration +import org.junit.rules.TestWatcher +import org.junit.runner.Description +import org.mozilla.fenix.GleanMetrics.Pings + +/** + * This implements a JUnit rule for writing tests for Glean SDK metrics. + * + * The rule takes care of resetting the Glean SDK between tests and + * initializing all the required dependencies. + * + * Example usage: + * + * ``` + * // Add the following lines to you test class. + * @get:Rule + * val gleanRule = GleanTestRule(ApplicationProvider.getApplicationContext()) + * ``` + * + * @param context the application context + * @param configToUse an optional [Configuration] to initialize the Glean SDK with + */ +@VisibleForTesting(otherwise = VisibleForTesting.NONE) +class FenixGleanTestRule( + val context: Context, + val configToUse: Configuration = Configuration(), +) : TestWatcher() { + /** + * Invoked when a test is about to start. + */ + override fun starting(description: Description?) { + // We're using the WorkManager in a bunch of places, and Glean will crash + // in tests without this line. Let's simply put it here. + WorkManagerTestInitHelper.initializeTestWorkManager(context) + + /** + * Always skip the first metrics ping, which would otherwise be overdue. + * Tests should explicitly destroy Glean and recreate it to test the metrics ping scheduler. + * This is the same as `delayMetricsPing` from `TestUtils.kt`, + * but now part of the publicly available test rule. + */ + +// // Set the current system time to a known datetime. +// val fakeNow = Calendar.getInstance() +// fakeNow.clear() +// @Suppress("MagicNumber") // it's a fixed date only used in tests. +// fakeNow.set(2015, 6, 11, 2, 0, 0) +// SystemClock.setCurrentTimeMillis(fakeNow.timeInMillis) +// +// // Set the last sent date to yesterday. +// val buildInfo = BuildInfo(versionCode = "0.0.1", versionName = "0.0.1", buildDate = Calendar.getInstance()) +// val mps = MetricsPingScheduler(context, buildInfo) +// +// mps.updateSentDate(getISOTimeString(fakeNow, truncateTo = TimeUnit.DAY)) + + Glean.registerPings(Pings) + + Glean.resetGlean( + context = context, + config = configToUse, + clearStores = true, + ) + } + + override fun finished(description: Description?) { + // This closes the database to help prevent leaking it during tests. + // See Bug1719905 for more info. + WorkManagerTestInitHelper.closeWorkDatabase() + + super.finished(description) + } +} diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt index d5aa5a240c8c..effb607076b0 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt @@ -34,7 +34,6 @@ import mozilla.components.service.nimbus.messaging.Message import mozilla.components.support.test.ext.joinBlocking import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.rule.MainCoroutineRule -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertNotNull @@ -62,6 +61,7 @@ import org.mozilla.fenix.components.appstate.AppAction import org.mozilla.fenix.components.appstate.AppState import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.home.bookmarks.Bookmark import org.mozilla.fenix.home.recenttabs.RecentTab @@ -82,7 +82,7 @@ class DefaultSessionControlControllerTest { val coroutinesTestRule = MainCoroutineRule() @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) private val activity: HomeActivity = mockk(relaxed = true) private val filesDir: File = mockk(relaxed = true) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/HomeMenuViewTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/HomeMenuViewTest.kt index 81524f08b6f7..c7beb5507f82 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/HomeMenuViewTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/HomeMenuViewTest.kt @@ -13,7 +13,6 @@ import io.mockk.verify import mozilla.appservices.places.BookmarkRoot import mozilla.components.browser.menu.view.MenuButton import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull @@ -29,6 +28,7 @@ import org.mozilla.fenix.R import org.mozilla.fenix.components.accounts.AccountState import org.mozilla.fenix.components.accounts.FenixFxAEntryPoint import org.mozilla.fenix.ext.nav +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.settings.SupportUtils import org.mozilla.fenix.whatsnew.WhatsNew @@ -39,7 +39,7 @@ import org.mozilla.fenix.GleanMetrics.HomeMenu as HomeMenuMetrics class HomeMenuViewTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) private lateinit var view: View private lateinit var lifecycleOwner: LifecycleOwner diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/TabCounterViewTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/TabCounterViewTest.kt index c30128187437..3177194c11f2 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/TabCounterViewTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/TabCounterViewTest.kt @@ -17,7 +17,6 @@ import mozilla.components.browser.state.state.createTab import mozilla.components.support.test.robolectric.testContext import mozilla.components.ui.tabcounter.TabCounter import mozilla.components.ui.tabcounter.TabCounterMenu -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull @@ -33,6 +32,7 @@ import org.mozilla.fenix.browser.browsingmode.BrowsingModeManager import org.mozilla.fenix.browser.browsingmode.DefaultBrowsingModeManager import org.mozilla.fenix.ext.nav import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.utils.Settings @@ -40,7 +40,7 @@ import org.mozilla.fenix.utils.Settings class TabCounterViewTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) private lateinit var navController: NavController private lateinit var browsingModeManager: BrowsingModeManager diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/bookmarks/DefaultBookmarksControllerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/bookmarks/DefaultBookmarksControllerTest.kt index e5fced4130f7..be3f2c26bfcf 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/bookmarks/DefaultBookmarksControllerTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/bookmarks/DefaultBookmarksControllerTest.kt @@ -20,7 +20,6 @@ import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.rule.MainCoroutineRule import mozilla.components.support.test.rule.runTestOnMain -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull import org.junit.Before @@ -31,6 +30,7 @@ import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.GleanMetrics.HomeBookmarks import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.home.HomeFragmentDirections import org.mozilla.fenix.home.bookmarks.controller.DefaultBookmarksController @@ -39,7 +39,7 @@ import org.mozilla.fenix.home.bookmarks.controller.DefaultBookmarksController class DefaultBookmarksControllerTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @get:Rule val coroutinesTestRule = MainCoroutineRule() diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/intent/ReEngagementIntentProcessorTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/intent/ReEngagementIntentProcessorTest.kt index a80954cc5b5e..dae0d45405f9 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/intent/ReEngagementIntentProcessorTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/intent/ReEngagementIntentProcessorTest.kt @@ -12,7 +12,6 @@ import io.mockk.mockk import io.mockk.verify import mozilla.components.concept.engine.EngineSession import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertFalse import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull @@ -24,6 +23,7 @@ import org.mozilla.fenix.GleanMetrics.Events import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.NavGraphDirections import org.mozilla.fenix.browser.browsingmode.BrowsingModeManager +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.onboarding.ReEngagementNotificationWorker import org.mozilla.fenix.utils.Settings @@ -32,7 +32,7 @@ import org.mozilla.fenix.utils.Settings class ReEngagementIntentProcessorTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @Test fun `do not process blank intents`() { diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/intent/StartSearchIntentProcessorTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/intent/StartSearchIntentProcessorTest.kt index 581f3924b3bb..d5009ac376b1 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/intent/StartSearchIntentProcessorTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/intent/StartSearchIntentProcessorTest.kt @@ -11,7 +11,6 @@ import io.mockk.Called import io.mockk.mockk import io.mockk.verify import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Rule @@ -23,13 +22,14 @@ import org.mozilla.fenix.NavGraphDirections import org.mozilla.fenix.R import org.mozilla.fenix.components.metrics.MetricsUtils import org.mozilla.fenix.ext.nav +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner @RunWith(FenixRobolectricTestRunner::class) class StartSearchIntentProcessorTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) private val navController: NavController = mockk(relaxed = true) private val out: Intent = mockk(relaxed = true) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/pocket/DefaultPocketStoriesControllerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/pocket/DefaultPocketStoriesControllerTest.kt index 6b5dd06de606..25c58d6426c5 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/pocket/DefaultPocketStoriesControllerTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/pocket/DefaultPocketStoriesControllerTest.kt @@ -16,7 +16,6 @@ import mozilla.components.service.pocket.PocketStory.PocketRecommendedStory import mozilla.components.service.pocket.PocketStory.PocketSponsoredStory import mozilla.components.service.pocket.ext.getCurrentFlightImpressions import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull @@ -35,6 +34,7 @@ import org.mozilla.fenix.components.appstate.AppState import org.mozilla.fenix.components.appstate.recommendations.ContentRecommendationsState import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.home.pocket.controller.DefaultPocketStoriesController import org.mozilla.fenix.utils.Settings @@ -43,7 +43,7 @@ import org.mozilla.fenix.utils.Settings class DefaultPocketStoriesControllerTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) private val homeActivity: HomeActivity = mockk(relaxed = true) private val settings: Settings = mockk(relaxed = true) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/recentsyncedtabs/RecentSyncedTabFeatureTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/recentsyncedtabs/RecentSyncedTabFeatureTest.kt index 57705545e54b..9472922cd2ba 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/recentsyncedtabs/RecentSyncedTabFeatureTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/recentsyncedtabs/RecentSyncedTabFeatureTest.kt @@ -38,7 +38,6 @@ import mozilla.components.service.fxa.sync.SyncReason import mozilla.components.support.test.libstate.ext.waitUntilIdle import mozilla.components.support.test.robolectric.testContext import mozilla.telemetry.glean.internal.ErrorType -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull @@ -49,12 +48,13 @@ import org.junit.runner.RunWith import org.mozilla.fenix.GleanMetrics.RecentSyncedTabs import org.mozilla.fenix.components.AppStore import org.mozilla.fenix.components.appstate.AppAction +import org.mozilla.fenix.helpers.FenixGleanTestRule @RunWith(AndroidJUnit4::class) class RecentSyncedTabFeatureTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) private val earliestTime = 100L private val earlierTime = 250L diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/recentsyncedtabs/controller/DefaultRecentSyncedTabControllerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/recentsyncedtabs/controller/DefaultRecentSyncedTabControllerTest.kt index 3fac7ee82aea..554ffd94a613 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/recentsyncedtabs/controller/DefaultRecentSyncedTabControllerTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/recentsyncedtabs/controller/DefaultRecentSyncedTabControllerTest.kt @@ -20,7 +20,6 @@ import mozilla.components.concept.sync.DeviceType import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.support.test.libstate.ext.waitUntilIdle import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotEquals import org.junit.Before @@ -31,6 +30,7 @@ import org.mozilla.fenix.GleanMetrics.RecentSyncedTabs import org.mozilla.fenix.R import org.mozilla.fenix.components.AppStore import org.mozilla.fenix.components.appstate.AppAction +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.home.HomeFragmentDirections import org.mozilla.fenix.home.recentsyncedtabs.RecentSyncedTab import org.mozilla.fenix.tabstray.Page @@ -40,7 +40,7 @@ import org.mozilla.fenix.tabstray.TabsTrayAccessPoint class DefaultRecentSyncedTabControllerTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) private val tabsUseCases: TabsUseCases = mockk() private val navController: NavController = mockk() diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/recenttabs/controller/RecentTabControllerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/recenttabs/controller/RecentTabControllerTest.kt index 7e7a57bc7d65..bfb8058578f2 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/recenttabs/controller/RecentTabControllerTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/recenttabs/controller/RecentTabControllerTest.kt @@ -20,7 +20,6 @@ import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.support.test.ext.joinBlocking import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.rule.MainCoroutineRule -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull import org.junit.Before @@ -30,6 +29,7 @@ import org.junit.runner.RunWith import org.mozilla.fenix.GleanMetrics.RecentTabs import org.mozilla.fenix.R import org.mozilla.fenix.components.AppStore +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner @OptIn(ExperimentalCoroutinesApi::class) @@ -40,7 +40,7 @@ class RecentTabControllerTest { val coroutinesTestRule = MainCoroutineRule() @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) private val navController: NavController = mockk(relaxed = true) private val selectTabUseCase: TabsUseCases = mockk(relaxed = true) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/recentvisits/controller/RecentVisitsControllerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/recentvisits/controller/RecentVisitsControllerTest.kt index 4347a5bfa92d..b506609932a8 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/recentvisits/controller/RecentVisitsControllerTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/recentvisits/controller/RecentVisitsControllerTest.kt @@ -25,7 +25,6 @@ import mozilla.components.feature.tabs.TabsUseCases.SelectOrAddUseCase import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.rule.MainCoroutineRule import mozilla.components.support.test.rule.runTestOnMain -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull import org.junit.Before @@ -36,6 +35,7 @@ import org.mozilla.fenix.GleanMetrics.RecentSearches import org.mozilla.fenix.R import org.mozilla.fenix.components.AppStore import org.mozilla.fenix.components.appstate.AppAction +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.home.HomeFragmentDirections import org.mozilla.fenix.home.recentvisits.RecentlyVisitedItem.RecentHistoryGroup @@ -46,7 +46,7 @@ import org.mozilla.fenix.home.recentvisits.RecentlyVisitedItem.RecentHistoryHigh class RecentVisitsControllerTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @get:Rule val coroutinesTestRule = MainCoroutineRule() diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/toolbar/DefaultToolbarControllerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/toolbar/DefaultToolbarControllerTest.kt index 15cea1f7bd01..086fda38c54a 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/toolbar/DefaultToolbarControllerTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/toolbar/DefaultToolbarControllerTest.kt @@ -15,7 +15,6 @@ import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.state.SearchState import mozilla.components.browser.state.store.BrowserStore import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull @@ -28,6 +27,7 @@ import org.mozilla.fenix.GleanMetrics.Events import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.utils.Settings @@ -35,7 +35,7 @@ import org.mozilla.fenix.utils.Settings class DefaultToolbarControllerTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) private val activity: HomeActivity = mockk(relaxed = true) private val navController: NavController = mockk(relaxed = true) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/topsites/TopSiteItemViewHolderTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/topsites/TopSiteItemViewHolderTest.kt index 9cf7492beec3..c8e469cde1a6 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/topsites/TopSiteItemViewHolderTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/topsites/TopSiteItemViewHolderTest.kt @@ -12,7 +12,6 @@ import io.mockk.verify import mozilla.components.browser.icons.BrowserIcons import mozilla.components.feature.top.sites.TopSite import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull @@ -26,6 +25,7 @@ import org.mozilla.fenix.GleanMetrics.TopSites import org.mozilla.fenix.components.AppStore import org.mozilla.fenix.databinding.TopSiteItemBinding import org.mozilla.fenix.ext.components +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.home.sessioncontrol.TopSiteInteractor @@ -33,7 +33,7 @@ import org.mozilla.fenix.home.sessioncontrol.TopSiteInteractor class TopSiteItemViewHolderTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) private lateinit var binding: TopSiteItemBinding private lateinit var interactor: TopSiteInteractor diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentInteractorTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentInteractorTest.kt index 0c477d3fdd52..7a2c3731293e 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentInteractorTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentInteractorTest.kt @@ -9,7 +9,6 @@ import io.mockk.verify import mozilla.components.concept.storage.BookmarkNode import mozilla.components.concept.storage.BookmarkNodeType import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull @@ -19,6 +18,7 @@ import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.GleanMetrics.BookmarksManagement import org.mozilla.fenix.browser.browsingmode.BrowsingMode +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner @SuppressWarnings("TooManyFunctions", "LargeClass") @@ -26,7 +26,7 @@ import org.mozilla.fenix.helpers.FenixRobolectricTestRunner class BookmarkFragmentInteractorTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) private lateinit var interactor: BookmarkFragmentInteractor diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/library/history/state/HistoryTelemetryMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/library/history/state/HistoryTelemetryMiddlewareTest.kt index a031beacecbf..b0a78901c493 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/library/history/state/HistoryTelemetryMiddlewareTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/library/history/state/HistoryTelemetryMiddlewareTest.kt @@ -6,12 +6,12 @@ package org.mozilla.fenix.library.history.state import mozilla.components.support.test.ext.joinBlocking import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.library.history.History import org.mozilla.fenix.library.history.HistoryFragmentAction import org.mozilla.fenix.library.history.HistoryFragmentState @@ -24,7 +24,7 @@ import org.mozilla.fenix.GleanMetrics.History as GleanHistory @RunWith(RobolectricTestRunner::class) class HistoryTelemetryMiddlewareTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) private val middleware = HistoryTelemetryMiddleware(isInPrivateMode = false) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/library/historymetadata/controller/HistoryMetadataGroupControllerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/library/historymetadata/controller/HistoryMetadataGroupControllerTest.kt index 2493b4ed7c8b..129ddf6020c7 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/library/historymetadata/controller/HistoryMetadataGroupControllerTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/library/historymetadata/controller/HistoryMetadataGroupControllerTest.kt @@ -20,7 +20,6 @@ import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.rule.MainCoroutineRule import mozilla.components.support.test.rule.runTestOnMain -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertNotNull @@ -35,6 +34,7 @@ import org.mozilla.fenix.R import org.mozilla.fenix.components.AppStore import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.directionsEq +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.library.history.History import org.mozilla.fenix.library.history.HistoryItemTimeGroup @@ -47,7 +47,7 @@ import org.mozilla.fenix.GleanMetrics.History as GleanHistory class HistoryMetadataGroupControllerTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @get:Rule val coroutinesTestRule = MainCoroutineRule() diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/library/recentlyclosed/DefaultRecentlyClosedControllerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/library/recentlyclosed/DefaultRecentlyClosedControllerTest.kt index 57caa895d443..d7df962202a7 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/library/recentlyclosed/DefaultRecentlyClosedControllerTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/library/recentlyclosed/DefaultRecentlyClosedControllerTest.kt @@ -24,7 +24,6 @@ import mozilla.components.concept.engine.prompt.ShareData import mozilla.components.feature.recentlyclosed.RecentlyClosedTabsStorage import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull @@ -38,6 +37,7 @@ import org.mozilla.fenix.R import org.mozilla.fenix.browser.browsingmode.BrowsingMode import org.mozilla.fenix.ext.directionsEq import org.mozilla.fenix.ext.optionsEq +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner @RunWith(FenixRobolectricTestRunner::class) @@ -49,7 +49,7 @@ class DefaultRecentlyClosedControllerTest { private val tabsUseCases: TabsUseCases = mockk(relaxed = true) @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @Before fun setUp() { diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/lifecycle/StoreLifecycleObserverTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/lifecycle/StoreLifecycleObserverTest.kt index 7c1fa2cc2b98..a24c744673b3 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/lifecycle/StoreLifecycleObserverTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/lifecycle/StoreLifecycleObserverTest.kt @@ -9,18 +9,18 @@ import io.mockk.mockk import io.mockk.verifySequence import mozilla.components.browser.state.action.AppLifecycleAction import mozilla.components.browser.state.store.BrowserStore -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.components.AppStore import org.mozilla.fenix.components.appstate.AppAction +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner @RunWith(FenixRobolectricTestRunner::class) class StoreLifecycleObserverTest { @get:Rule - val gleanRule = GleanTestRule(ApplicationProvider.getApplicationContext()) + val gleanRule = FenixGleanTestRule(ApplicationProvider.getApplicationContext()) @Test fun `WHEN onPause is called THEN dispatch PauseAction`() { diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/messaging/DefaultMessageControllerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/messaging/DefaultMessageControllerTest.kt index d94c96dfc40d..0015cd3ba192 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/messaging/DefaultMessageControllerTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/messaging/DefaultMessageControllerTest.kt @@ -12,7 +12,6 @@ import mozilla.components.service.nimbus.messaging.Message import mozilla.components.service.nimbus.messaging.MessageData import mozilla.components.service.nimbus.messaging.NimbusMessagingControllerInterface import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Before import org.junit.Rule import org.junit.Test @@ -21,13 +20,14 @@ import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.components.AppStore import org.mozilla.fenix.components.appstate.AppAction import org.mozilla.fenix.components.appstate.AppAction.MessagingAction.MessageClicked +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner @RunWith(FenixRobolectricTestRunner::class) class DefaultMessageControllerTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) private val homeActivity: HomeActivity = mockk(relaxed = true) private val messagingController: NimbusMessagingControllerInterface = mockk(relaxed = true) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/messaging/MicrosurveyMessageControllerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/messaging/MicrosurveyMessageControllerTest.kt index a4f042087479..c844d4798caa 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/messaging/MicrosurveyMessageControllerTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/messaging/MicrosurveyMessageControllerTest.kt @@ -8,7 +8,6 @@ import io.mockk.mockk import io.mockk.verify import mozilla.components.service.nimbus.messaging.Message import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Before import org.junit.Rule import org.junit.Test @@ -23,6 +22,7 @@ import org.mozilla.fenix.components.appstate.AppAction.MessagingAction.Microsurv import org.mozilla.fenix.components.appstate.AppAction.MessagingAction.MicrosurveyAction.OnPrivacyNoticeTapped import org.mozilla.fenix.components.appstate.AppAction.MessagingAction.MicrosurveyAction.SentConfirmationShown import org.mozilla.fenix.components.appstate.AppAction.MessagingAction.MicrosurveyAction.Shown +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.settings.SupportUtils @@ -34,7 +34,7 @@ private val PRIVACY_POLICY_URL = class MicrosurveyMessageControllerTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) private val homeActivity: HomeActivity = mockk(relaxed = true) private val message: Message = mockk(relaxed = true) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/perf/StartupTypeTelemetryTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/perf/StartupTypeTelemetryTest.kt index d7f8c53e1439..3ee674e507a5 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/perf/StartupTypeTelemetryTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/perf/StartupTypeTelemetryTest.kt @@ -17,7 +17,6 @@ import mozilla.components.support.ktx.kotlin.crossProduct import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.rule.MainCoroutineRule import mozilla.components.support.test.rule.runTestOnMain -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNull import org.junit.Before @@ -26,6 +25,7 @@ import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.GleanMetrics.PerfStartup import org.mozilla.fenix.HomeActivity +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.perf.StartupPathProvider.StartupPath import org.mozilla.fenix.perf.StartupStateProvider.StartupState @@ -45,7 +45,7 @@ class StartupTypeTelemetryTest { val coroutinesTestRule = MainCoroutineRule() @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) private lateinit var telemetry: StartupTypeTelemetry private lateinit var callbacks: StartupTypeTelemetry.StartupTypeLifecycleObserver diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/perf/StorageStatsMetricsTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/perf/StorageStatsMetricsTest.kt index ff13950d5e84..5cd70031bf11 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/perf/StorageStatsMetricsTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/perf/StorageStatsMetricsTest.kt @@ -12,13 +12,13 @@ import io.mockk.MockKAnnotations import io.mockk.every import io.mockk.impl.annotations.RelaxedMockK import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.GleanMetrics.StorageStats as Metrics @@ -26,7 +26,7 @@ import org.mozilla.fenix.GleanMetrics.StorageStats as Metrics class StorageStatsMetricsTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @RelaxedMockK private lateinit var mockContext: Context diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/SearchDialogControllerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/SearchDialogControllerTest.kt index cefd3e141271..dae47fc1813e 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/SearchDialogControllerTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/SearchDialogControllerTest.kt @@ -29,7 +29,6 @@ import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.support.test.libstate.ext.waitUntilIdle import mozilla.components.support.test.middleware.CaptureActionsMiddleware import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse @@ -49,6 +48,7 @@ import org.mozilla.fenix.browser.browsingmode.BrowsingMode import org.mozilla.fenix.components.Core import org.mozilla.fenix.components.metrics.MetricsUtils import org.mozilla.fenix.ext.components +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.search.SearchDialogFragmentDirections.Companion.actionGlobalAddonsManagementFragment import org.mozilla.fenix.search.SearchDialogFragmentDirections.Companion.actionGlobalSearchEngineFragment @@ -77,7 +77,7 @@ class SearchDialogControllerTest { private lateinit var browserStore: BrowserStore @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @Before fun setUp() { diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/toolbar/SearchSelectorToolbarActionTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/toolbar/SearchSelectorToolbarActionTest.kt index 39961ddd6e3b..b8366895705f 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/toolbar/SearchSelectorToolbarActionTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/toolbar/SearchSelectorToolbarActionTest.kt @@ -25,7 +25,6 @@ import mozilla.components.concept.menu.Orientation import mozilla.components.support.test.libstate.ext.waitUntilIdle import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.rule.MainCoroutineRule -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull import org.junit.Assert.assertTrue @@ -38,6 +37,7 @@ import org.mozilla.fenix.R import org.mozilla.fenix.browser.browsingmode.BrowsingMode import org.mozilla.fenix.components.metrics.MetricsUtils import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.search.SearchDialogFragmentStore import org.mozilla.fenix.search.SearchEngineSource @@ -62,7 +62,7 @@ class SearchSelectorToolbarActionTest { val coroutinesTestRule = MainCoroutineRule() @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @Before fun setup() { diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/address/AddressEditorViewTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/address/AddressEditorViewTest.kt index 3bad32339a10..24b7267f367e 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/address/AddressEditorViewTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/address/AddressEditorViewTest.kt @@ -15,7 +15,6 @@ import mozilla.components.browser.state.search.RegionState import mozilla.components.concept.storage.Address import mozilla.components.concept.storage.UpdatableAddressFields import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotEquals import org.junit.Assert.assertNotNull @@ -27,6 +26,7 @@ import org.junit.runner.RunWith import org.mozilla.fenix.GleanMetrics.Addresses import org.mozilla.fenix.R import org.mozilla.fenix.databinding.FragmentAddressEditorBinding +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.settings.address.interactor.AddressEditorInteractor import org.mozilla.fenix.settings.address.view.AddressEditorView @@ -41,7 +41,7 @@ class AddressEditorViewTest { private lateinit var address: Address @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @Before fun setup() { diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/creditcards/DefaultCreditCardEditorControllerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/creditcards/DefaultCreditCardEditorControllerTest.kt index 5400b321f14c..1cc56b6354b3 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/creditcards/DefaultCreditCardEditorControllerTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/creditcards/DefaultCreditCardEditorControllerTest.kt @@ -19,7 +19,6 @@ import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.rule.MainCoroutineRule import mozilla.components.support.test.rule.runTestOnMain import mozilla.components.support.utils.CreditCardNetworkType -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull import org.junit.Before @@ -27,6 +26,7 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.GleanMetrics.CreditCards +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.settings.creditcards.controller.DefaultCreditCardEditorController @@ -34,7 +34,7 @@ import org.mozilla.fenix.settings.creditcards.controller.DefaultCreditCardEditor class DefaultCreditCardEditorControllerTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) private val storage: AutofillCreditCardsAddressesStorage = mockk(relaxed = true) private val navController: NavController = mockk(relaxed = true) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/creditcards/DefaultCreditCardsManagementInteractorTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/creditcards/DefaultCreditCardsManagementInteractorTest.kt index a85e50f16576..214be6ccfc73 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/creditcards/DefaultCreditCardsManagementInteractorTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/creditcards/DefaultCreditCardsManagementInteractorTest.kt @@ -8,7 +8,6 @@ import io.mockk.mockk import io.mockk.verify import mozilla.components.concept.storage.CreditCard import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull import org.junit.Before @@ -16,6 +15,7 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.GleanMetrics.CreditCards +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.settings.creditcards.controller.CreditCardsManagementController import org.mozilla.fenix.settings.creditcards.interactor.DefaultCreditCardsManagementInteractor @@ -24,7 +24,7 @@ import org.mozilla.fenix.settings.creditcards.interactor.DefaultCreditCardsManag class DefaultCreditCardsManagementInteractorTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) private val controller: CreditCardsManagementController = mockk(relaxed = true) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/logins/LoginsListControllerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/logins/LoginsListControllerTest.kt index 44469d33b4e6..0f12838809e3 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/logins/LoginsListControllerTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/logins/LoginsListControllerTest.kt @@ -8,7 +8,6 @@ import androidx.navigation.NavController import io.mockk.mockk import io.mockk.verifyAll import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull @@ -17,6 +16,7 @@ import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.GleanMetrics.Logins +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.settings.SupportUtils import org.mozilla.fenix.settings.logins.controller.LoginsListController @@ -26,7 +26,7 @@ import org.mozilla.fenix.utils.Settings @RunWith(FenixRobolectricTestRunner::class) class LoginsListControllerTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) private val store: LoginsFragmentStore = mockk(relaxed = true) private val settings: Settings = mockk(relaxed = true) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/quicksettings/DefaultQuickSettingsControllerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/quicksettings/DefaultQuickSettingsControllerTest.kt index e957e30780c9..505aeb732137 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/quicksettings/DefaultQuickSettingsControllerTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/quicksettings/DefaultQuickSettingsControllerTest.kt @@ -28,7 +28,6 @@ import mozilla.components.feature.session.TrackingProtectionUseCases import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.rule.MainCoroutineRule import mozilla.components.support.test.rule.runTestOnMain -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertArrayEquals import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull @@ -44,6 +43,7 @@ import org.mozilla.fenix.GleanMetrics.TrackingProtection import org.mozilla.fenix.components.PermissionStorage import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.directionsEq +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.settings.PhoneFeature import org.mozilla.fenix.settings.quicksettings.ext.shouldBeEnabled @@ -85,7 +85,7 @@ class DefaultQuickSettingsControllerTest { private lateinit var controller: DefaultQuickSettingsController @get:Rule - val gleanRule = GleanTestRule(testContext) + val gleanRule = FenixGleanTestRule(testContext) @get:Rule val coroutinesTestRule = MainCoroutineRule() diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/DefaultCookieBannerDetailsControllerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/DefaultCookieBannerDetailsControllerTest.kt index 3c82e6d0e8a8..424700fc5438 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/DefaultCookieBannerDetailsControllerTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/DefaultCookieBannerDetailsControllerTest.kt @@ -34,7 +34,6 @@ import mozilla.components.lib.publicsuffixlist.PublicSuffixList import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.rule.MainCoroutineRule import mozilla.components.support.test.rule.runTestOnMain -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull @@ -46,6 +45,7 @@ import org.mozilla.fenix.GleanMetrics.CookieBanners import org.mozilla.fenix.GleanMetrics.Pings import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.trackingprotection.CookieBannerUIMode import org.mozilla.fenix.trackingprotection.ProtectionsAction @@ -93,7 +93,7 @@ internal class DefaultCookieBannerDetailsControllerTest { private val scope = coroutinesTestRule.scope @get:Rule - val gleanRule = GleanTestRule(testContext) + val gleanRule = FenixGleanTestRule(testContext) @Before fun setUp() { diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/trustpanel/TrustPanelTelemetryMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/trustpanel/TrustPanelTelemetryMiddlewareTest.kt index abf394f741ca..ffd2f05b3d7f 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/trustpanel/TrustPanelTelemetryMiddlewareTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/trustpanel/TrustPanelTelemetryMiddlewareTest.kt @@ -6,13 +6,13 @@ package org.mozilla.fenix.settings.trustpanel import mozilla.components.support.test.ext.joinBlocking import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.GleanMetrics.TrackingProtection +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.settings.trustpanel.middleware.TrustPanelTelemetryMiddleware import org.mozilla.fenix.settings.trustpanel.store.TrustPanelAction import org.mozilla.fenix.settings.trustpanel.store.TrustPanelState @@ -23,7 +23,7 @@ import org.robolectric.RobolectricTestRunner class TrustPanelTelemetryMiddlewareTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @Test fun `GIVEN tracking protection is enabled WHEN toggle tracking protection action is dispatched THEN record tracking protection exception added telemetry`() { diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/share/SaveToPDFMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/share/SaveToPDFMiddlewareTest.kt index 4716a68194ba..e86bb398b20d 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/share/SaveToPDFMiddlewareTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/share/SaveToPDFMiddlewareTest.kt @@ -18,7 +18,6 @@ import mozilla.components.support.test.libstate.ext.waitUntilIdle import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.rule.MainCoroutineRule import mozilla.components.support.test.rule.runTestOnMain -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Before @@ -32,6 +31,7 @@ import org.mozilla.fenix.components.AppStore import org.mozilla.fenix.components.appstate.AppAction import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.recordEventInNimbus +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.geckoview.GeckoSession import java.io.IOException @@ -41,7 +41,7 @@ class SaveToPDFMiddlewareTest { private lateinit var appStore: AppStore @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @get:Rule val mainCoroutineTestRule = MainCoroutineRule() diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/share/ShareControllerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/share/ShareControllerTest.kt index 3dffa7c2799a..d905e2658d08 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/share/ShareControllerTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/share/ShareControllerTest.kt @@ -29,7 +29,6 @@ import mozilla.components.feature.share.RecentAppsStorage import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.rule.MainCoroutineRule import mozilla.components.support.test.rule.runTestOnMain -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull @@ -44,6 +43,7 @@ import org.mozilla.fenix.components.AppStore import org.mozilla.fenix.components.accounts.FenixFxAEntryPoint import org.mozilla.fenix.components.appstate.AppAction.ShareAction import org.mozilla.fenix.ext.nav +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.share.listadapters.AppShareOption @@ -72,7 +72,7 @@ class ShareControllerTest { private val recentAppStorage = mockk(relaxed = true) @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @get:Rule val coroutinesTestRule = MainCoroutineRule() diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/shopping/middleware/DefaultReviewQualityCheckServiceTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/shopping/middleware/DefaultReviewQualityCheckServiceTest.kt index b41f771a74ab..485ee1511bd1 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/shopping/middleware/DefaultReviewQualityCheckServiceTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/shopping/middleware/DefaultReviewQualityCheckServiceTest.kt @@ -16,7 +16,6 @@ import mozilla.components.concept.engine.shopping.ProductAnalysis import mozilla.components.concept.engine.shopping.ProductRecommendation import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.rule.MainCoroutineRule -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull @@ -24,6 +23,7 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.GleanMetrics.Shopping +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.shopping.ProductAnalysisTestData import org.mozilla.fenix.shopping.ProductRecommendationTestData @@ -35,7 +35,7 @@ class DefaultReviewQualityCheckServiceTest { val coroutinesTestRule = MainCoroutineRule() @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @Test fun `GIVEN fetch is called WHEN onResult is invoked with the expected type THEN product analysis returns the same data`() = diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/shopping/middleware/ReviewQualityCheckTelemetryMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/shopping/middleware/ReviewQualityCheckTelemetryMiddlewareTest.kt index 5e0e307da298..bd5912e99093 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/shopping/middleware/ReviewQualityCheckTelemetryMiddlewareTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/shopping/middleware/ReviewQualityCheckTelemetryMiddlewareTest.kt @@ -12,7 +12,6 @@ import mozilla.components.support.test.ext.joinBlocking import mozilla.components.support.test.libstate.ext.waitUntilIdle import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.rule.MainCoroutineRule -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull @@ -24,6 +23,7 @@ import org.mozilla.fenix.GleanMetrics.Shopping import org.mozilla.fenix.components.AppStore import org.mozilla.fenix.components.appstate.AppState import org.mozilla.fenix.components.appstate.shopping.ShoppingState +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.shopping.ProductAnalysisTestData import org.mozilla.fenix.shopping.fake.FakeReviewQualityCheckTelemetryService @@ -38,7 +38,7 @@ import org.mozilla.fenix.shopping.store.ReviewQualityCheckStore class ReviewQualityCheckTelemetryMiddlewareTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @get:Rule val coroutinesTestRule = MainCoroutineRule() diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/tabstray/DefaultTabsTrayControllerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/tabstray/DefaultTabsTrayControllerTest.kt index 0eb7f2c60b87..49e6a7fa9cfd 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/tabstray/DefaultTabsTrayControllerTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/tabstray/DefaultTabsTrayControllerTest.kt @@ -44,7 +44,6 @@ import mozilla.components.support.test.middleware.CaptureActionsMiddleware import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.rule.MainCoroutineRule import mozilla.components.support.test.rule.runTestOnMain -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertNotEquals @@ -72,6 +71,7 @@ import org.mozilla.fenix.components.TabCollectionStorage import org.mozilla.fenix.components.appstate.AppAction import org.mozilla.fenix.ext.maxActiveTime import org.mozilla.fenix.ext.potentialInactiveTabs +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.home.HomeFragment import org.mozilla.fenix.utils.Settings @@ -113,7 +113,7 @@ class DefaultTabsTrayControllerTest { private val coroutinesTestRule: MainCoroutineRule = MainCoroutineRule() private val testDispatcher = coroutinesTestRule.testDispatcher - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @get:Rule val chain: RuleChain = RuleChain.outerRule(gleanTestRule).around(coroutinesTestRule) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/tabstray/NavigationInteractorTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/tabstray/NavigationInteractorTest.kt index 8778ce83aeac..e52b164dd23a 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/tabstray/NavigationInteractorTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/tabstray/NavigationInteractorTest.kt @@ -21,7 +21,6 @@ import mozilla.components.browser.state.store.BrowserStore import mozilla.components.service.fxa.manager.FxaAccountManager import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.rule.MainCoroutineRule -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull import org.junit.Assert.assertTrue @@ -33,6 +32,7 @@ import org.junit.runner.RunWith import org.mozilla.fenix.GleanMetrics.Events import org.mozilla.fenix.GleanMetrics.TabsTray import org.mozilla.fenix.components.accounts.FenixFxAEntryPoint +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import mozilla.components.browser.state.state.createTab as createStateTab @@ -44,7 +44,7 @@ class NavigationInteractorTest { private val accountManager: FxaAccountManager = mockk(relaxed = true) val coroutinesTestRule: MainCoroutineRule = MainCoroutineRule() - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @get:Rule val chain: RuleChain = RuleChain.outerRule(gleanTestRule).around(coroutinesTestRule) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/tabstray/TabsTrayFragmentTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/tabstray/TabsTrayFragmentTest.kt index 29c7d0d66087..a6b73805ec9e 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/tabstray/TabsTrayFragmentTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/tabstray/TabsTrayFragmentTest.kt @@ -34,7 +34,6 @@ import mozilla.components.browser.state.state.ContentState import mozilla.components.browser.state.state.TabSessionState import mozilla.components.browser.state.store.BrowserStore import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertNotNull @@ -52,6 +51,7 @@ import org.mozilla.fenix.databinding.ComponentTabstrayFabBinding import org.mozilla.fenix.databinding.FragmentTabTrayDialogBinding import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.helpers.MockkRetryTestRule import org.mozilla.fenix.home.HomeScreenViewModel @@ -71,7 +71,7 @@ class TabsTrayFragmentTest { val mockkRule = MockkRetryTestRule() @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @Before fun setup() { diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/tabstray/TabsTrayTelemetryMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/tabstray/TabsTrayTelemetryMiddlewareTest.kt index b580ff2b2c3f..8547eb98ebbd 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/tabstray/TabsTrayTelemetryMiddlewareTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/tabstray/TabsTrayTelemetryMiddlewareTest.kt @@ -7,7 +7,6 @@ package org.mozilla.fenix.tabstray import io.mockk.mockk import mozilla.components.support.test.libstate.ext.waitUntilIdle import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull @@ -17,6 +16,7 @@ import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.GleanMetrics.Metrics import org.mozilla.fenix.GleanMetrics.TabsTray +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner @RunWith(FenixRobolectricTestRunner::class) // for gleanTestRule @@ -26,7 +26,7 @@ class TabsTrayTelemetryMiddlewareTest { private lateinit var tabsTrayTelemetryMiddleware: TabsTrayTelemetryMiddleware @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) @Before fun setup() { diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/tabstray/browser/AbstractBrowserTabViewHolderTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/tabstray/browser/AbstractBrowserTabViewHolderTest.kt index 5fab000b1850..0245bee57db7 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/tabstray/browser/AbstractBrowserTabViewHolderTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/tabstray/browser/AbstractBrowserTabViewHolderTest.kt @@ -19,7 +19,6 @@ import mozilla.components.concept.base.images.ImageLoader import mozilla.components.concept.engine.mediasession.MediaSession import mozilla.components.lib.publicsuffixlist.PublicSuffixList import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull @@ -29,6 +28,7 @@ import org.junit.runner.RunWith import org.mozilla.fenix.GleanMetrics.Tab import org.mozilla.fenix.R import org.mozilla.fenix.ext.components +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.selection.SelectionHolder import org.mozilla.fenix.tabstray.TabsTrayInteractor @@ -37,7 +37,7 @@ import org.mozilla.fenix.tabstray.TabsTrayStore @RunWith(FenixRobolectricTestRunner::class) class AbstractBrowserTabViewHolderTest { @get:Rule - val gleanTestRule = GleanTestRule(testContext) + val gleanTestRule = FenixGleanTestRule(testContext) val store = TabsTrayStore() val browserStore = BrowserStore() diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/telemetry/TelemetryMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/telemetry/TelemetryMiddlewareTest.kt index a99262eaf191..11886d027154 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/telemetry/TelemetryMiddlewareTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/telemetry/TelemetryMiddlewareTest.kt @@ -29,7 +29,6 @@ import mozilla.components.support.test.ext.joinBlocking import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.rule.MainCoroutineRule import mozilla.telemetry.glean.internal.TimerId -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse @@ -49,6 +48,7 @@ import org.mozilla.fenix.components.appstate.AppAction import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.ext.components +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.utils.Settings import org.robolectric.shadows.ShadowLooper @@ -68,7 +68,7 @@ class TelemetryMiddlewareTest { val coroutinesTestRule = MainCoroutineRule() @get:Rule - val gleanRule = GleanTestRule(ApplicationProvider.getApplicationContext()) + val gleanRule = FenixGleanTestRule(ApplicationProvider.getApplicationContext()) private val clock = FakeClock() private val metrics: MetricController = mockk() diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/trackingprotection/TrackingProtectionPanelViewTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/trackingprotection/TrackingProtectionPanelViewTest.kt index 673a8915303a..277746f263e6 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/trackingprotection/TrackingProtectionPanelViewTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/trackingprotection/TrackingProtectionPanelViewTest.kt @@ -13,7 +13,6 @@ import io.mockk.mockk import io.mockk.mockkStatic import io.mockk.verify import mozilla.components.support.test.robolectric.testContext -import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertNotNull @@ -27,6 +26,7 @@ import org.mozilla.fenix.GleanMetrics.TrackingProtection import org.mozilla.fenix.R import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.helpers.FenixGleanTestRule import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.trackingprotection.TrackingProtectionCategory.CROSS_SITE_TRACKING_COOKIES import org.mozilla.fenix.trackingprotection.TrackingProtectionCategory.SOCIAL_MEDIA_TRACKERS @@ -48,7 +48,7 @@ class TrackingProtectionPanelViewTest { ) @get:Rule - val gleanRule = GleanTestRule(testContext) + val gleanRule = FenixGleanTestRule(testContext) @Before fun setup() { diff --git a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/telemetry/GleanMetricsService.kt b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/telemetry/GleanMetricsService.kt index 00e041589e38..bef9b175362e 100644 --- a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/telemetry/GleanMetricsService.kt +++ b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/telemetry/GleanMetricsService.kt @@ -177,7 +177,7 @@ class GleanMetricsService(context: Context) : MetricsService { * @param enabled true if enabling upload, false if disabling it. */ fun setUploadEnabled(enabled: Boolean) { - Glean.setUploadEnabled(enabled) + Glean.setCollectionEnabled(enabled) if (enabled) { checkAndSetUsageProfileId() } else { diff --git a/toolkit/components/glean/api/src/common_test.rs b/toolkit/components/glean/api/src/common_test.rs index 50cbc2f805f4..2b0b752a300d 100644 --- a/toolkit/components/glean/api/src/common_test.rs +++ b/toolkit/components/glean/api/src/common_test.rs @@ -4,6 +4,7 @@ use std::sync::{Mutex, MutexGuard}; +use crate::private::Ping; use once_cell::sync::Lazy; const GLOBAL_APPLICATION_ID: &str = "org.mozilla.firefox.test"; @@ -16,6 +17,18 @@ pub fn lock_test() -> (MutexGuard<'static, ()>, tempfile::TempDir) { let lock = GLOBAL_LOCK.lock().unwrap(); + _ = Ping::new( + "test-ping", + true, + false, + true, + true, + true, + vec![], + vec![], + true, + ); + let dir = setup_glean(None); (lock, dir) } diff --git a/toolkit/components/glean/api/src/ffi/ping.rs b/toolkit/components/glean/api/src/ffi/ping.rs index 2834655a03cd..ff286940be25 100644 --- a/toolkit/components/glean/api/src/ffi/ping.rs +++ b/toolkit/components/glean/api/src/ffi/ping.rs @@ -16,3 +16,8 @@ pub extern "C" fn fog_submit_ping_by_id(id: u32, reason: &nsACString) { }; pings::submit_ping_by_id(id, reason.as_deref()); } + +#[no_mangle] +pub extern "C" fn fog_set_ping_enabled(id: u32, value: bool) { + pings::set_ping_enabled(id, value); +} diff --git a/toolkit/components/glean/api/src/private/boolean.rs b/toolkit/components/glean/api/src/private/boolean.rs index 04833b429605..c09c455ffe8f 100644 --- a/toolkit/components/glean/api/src/private/boolean.rs +++ b/toolkit/components/glean/api/src/private/boolean.rs @@ -216,7 +216,7 @@ mod test { let metric = &metrics::test_only_ipc::a_bool; metric.set(true); - assert!(metric.test_get_value("store1").unwrap()); + assert!(metric.test_get_value("test-ping").unwrap()); } #[test] @@ -244,7 +244,7 @@ mod test { assert!(ipc::replay_from_buf(&ipc::take_buf().unwrap()).is_ok()); assert!( - false == parent_metric.test_get_value("store1").unwrap(), + false == parent_metric.test_get_value("test-ping").unwrap(), "Boolean metrics should only work in the parent process" ); } @@ -270,7 +270,7 @@ mod test { assert!(ipc::replay_from_buf(&ipc::take_buf().unwrap()).is_ok()); assert!( - !parent_metric.test_get_value("store1").unwrap(), + !parent_metric.test_get_value("test-ping").unwrap(), "Boolean metrics can unsafely work in child processes" ); } diff --git a/toolkit/components/glean/api/src/private/counter.rs b/toolkit/components/glean/api/src/private/counter.rs index b59717446bea..59bcf6966b7e 100644 --- a/toolkit/components/glean/api/src/private/counter.rs +++ b/toolkit/components/glean/api/src/private/counter.rs @@ -199,7 +199,7 @@ mod test { let metric = &metrics::test_only_ipc::a_counter; metric.add(1); - assert_eq!(1, metric.test_get_value("store1").unwrap()); + assert_eq!(1, metric.test_get_value("test-ping").unwrap()); } #[test] @@ -233,7 +233,7 @@ mod test { assert!(ipc::replay_from_buf(&ipc::take_buf().unwrap()).is_ok()); assert!( - 45 == parent_metric.test_get_value("store1").unwrap(), + 45 == parent_metric.test_get_value("test-ping").unwrap(), "Values from the 'processes' should be summed" ); } diff --git a/toolkit/components/glean/api/src/private/custom_distribution.rs b/toolkit/components/glean/api/src/private/custom_distribution.rs index 9fa5db0ddefb..754a80a2a79c 100644 --- a/toolkit/components/glean/api/src/private/custom_distribution.rs +++ b/toolkit/components/glean/api/src/private/custom_distribution.rs @@ -219,7 +219,7 @@ mod test { metric.accumulate_samples_signed(vec![1, 2, 3]); - assert!(metric.test_get_value("store1").is_some()); + assert!(metric.test_get_value("test-ping").is_some()); } #[test] @@ -243,7 +243,7 @@ mod test { assert!(ipc::replay_from_buf(&buf).is_ok()); let data = parent_metric - .test_get_value("store1") + .test_get_value("test-ping") .expect("should have some data"); assert_eq!(2, data.values[&1], "Low bucket has 2 values"); diff --git a/toolkit/components/glean/api/src/private/datetime.rs b/toolkit/components/glean/api/src/private/datetime.rs index c5516f9352df..f4f431268f80 100644 --- a/toolkit/components/glean/api/src/private/datetime.rs +++ b/toolkit/components/glean/api/src/private/datetime.rs @@ -327,7 +327,7 @@ mod test { let expected: glean::Datetime = DateTime::parse_from_rfc3339("2020-05-07T11:58:00+05:00") .unwrap() .into(); - assert_eq!(expected, metric.test_get_value("store1").unwrap()); + assert_eq!(expected, metric.test_get_value("test-ping").unwrap()); } #[test] @@ -341,7 +341,7 @@ mod test { let expected: glean::Datetime = DateTime::parse_from_rfc3339("2020-05-07T11:58:00+05:00") .unwrap() .into(); - assert_eq!(expected, metric.test_get_value("store1").unwrap()); + assert_eq!(expected, metric.test_get_value("test-ping").unwrap()); } #[test] @@ -374,6 +374,6 @@ mod test { let expected: glean::Datetime = DateTime::parse_from_rfc3339("2020-10-13T16:41:00+05:00") .unwrap() .into(); - assert_eq!(expected, parent_metric.test_get_value("store1").unwrap()); + assert_eq!(expected, parent_metric.test_get_value("test-ping").unwrap()); } } diff --git a/toolkit/components/glean/api/src/private/denominator.rs b/toolkit/components/glean/api/src/private/denominator.rs index 9d5e3899db1b..840ec8331273 100644 --- a/toolkit/components/glean/api/src/private/denominator.rs +++ b/toolkit/components/glean/api/src/private/denominator.rs @@ -128,7 +128,7 @@ mod test { let metric = &metrics::test_only_ipc::an_external_denominator; metric.add(1); - assert_eq!(1, metric.test_get_value("store1").unwrap()); + assert_eq!(1, metric.test_get_value("test-ping").unwrap()); } #[test] @@ -164,7 +164,7 @@ mod test { assert_eq!( 45, - parent_metric.test_get_value("store1").unwrap(), + parent_metric.test_get_value("test-ping").unwrap(), "Values from the 'processes' should be summed" ); } diff --git a/toolkit/components/glean/api/src/private/event.rs b/toolkit/components/glean/api/src/private/event.rs index a1e650344b8b..4002acf3094b 100644 --- a/toolkit/components/glean/api/src/private/event.rs +++ b/toolkit/components/glean/api/src/private/event.rs @@ -244,7 +244,7 @@ mod test { CommonMetricData { name: "event_metric".into(), category: "telemetry".into(), - send_in_pings: vec!["store1".into()], + send_in_pings: vec!["test-ping".into()], disabled: false, ..Default::default() }, @@ -253,7 +253,7 @@ mod test { // No extra keys metric.record(None); - let recorded = metric.test_get_value("store1").unwrap(); + let recorded = metric.test_get_value("test-ping").unwrap(); assert!(recorded.iter().any(|e| e.name == "event_metric")); } @@ -293,7 +293,7 @@ mod test { assert!(ipc::replay_from_buf(&ipc::take_buf().unwrap()).is_ok()); - let events = parent_metric.test_get_value("store1").unwrap(); + let events = parent_metric.test_get_value("test-ping").unwrap(); assert_eq!(events.len(), 4); // Events from the child process are last, they might get sorted later by Glean. @@ -318,7 +318,7 @@ mod test { }; event.record(extra); - let recorded = event.test_get_value("store1").unwrap(); + let recorded = event.test_get_value("test-ping").unwrap(); assert_eq!(recorded.len(), 1); assert!(recorded[0].extra.as_ref().unwrap().get("extra1").unwrap() == "a-valid-value"); diff --git a/toolkit/components/glean/api/src/private/labeled.rs b/toolkit/components/glean/api/src/private/labeled.rs index 901167856b5c..9d9bd4b38e66 100644 --- a/toolkit/components/glean/api/src/private/labeled.rs +++ b/toolkit/components/glean/api/src/private/labeled.rs @@ -453,7 +453,7 @@ mod test { cmd: CommonMetricData { name: "global".into(), category: "metric".into(), - send_in_pings: vec!["ping".into()], + send_in_pings: vec!["test-ping".into()], disabled: false, ..Default::default() }, @@ -469,14 +469,17 @@ mod test { GLOBAL_METRIC.get("a_value").set(true); assert_eq!( true, - GLOBAL_METRIC.get("a_value").test_get_value("ping").unwrap() + GLOBAL_METRIC + .get("a_value") + .test_get_value("test-ping") + .unwrap() ); } #[test] fn sets_labeled_bool_metrics() { let _lock = lock_test(); - let store_names: Vec = vec!["store1".into()]; + let store_names: Vec = vec!["test-ping".into()]; let metric: LabeledMetric = LabeledMetric::new( 0.into(), @@ -494,14 +497,14 @@ mod test { metric.get("upload").set(true); - assert!(metric.get("upload").test_get_value("store1").unwrap()); - assert_eq!(None, metric.get("download").test_get_value("store1")); + assert!(metric.get("upload").test_get_value("test-ping").unwrap()); + assert_eq!(None, metric.get("download").test_get_value("test-ping")); } #[test] fn sets_labeled_string_metrics() { let _lock = lock_test(); - let store_names: Vec = vec!["store1".into()]; + let store_names: Vec = vec!["test-ping".into()]; let metric: LabeledMetric = LabeledMetric::new( 0.into(), @@ -521,15 +524,15 @@ mod test { assert_eq!( "Glean", - metric.get("upload").test_get_value("store1").unwrap() + metric.get("upload").test_get_value("test-ping").unwrap() ); - assert_eq!(None, metric.get("download").test_get_value("store1")); + assert_eq!(None, metric.get("download").test_get_value("test-ping")); } #[test] fn sets_labeled_counter_metrics() { let _lock = lock_test(); - let store_names: Vec = vec!["store1".into()]; + let store_names: Vec = vec!["test-ping".into()]; let metric: LabeledMetric = LabeledMetric::new( 0.into(), @@ -547,14 +550,17 @@ mod test { metric.get("upload").add(10); - assert_eq!(10, metric.get("upload").test_get_value("store1").unwrap()); - assert_eq!(None, metric.get("download").test_get_value("store1")); + assert_eq!( + 10, + metric.get("upload").test_get_value("test-ping").unwrap() + ); + assert_eq!(None, metric.get("download").test_get_value("test-ping")); } #[test] fn records_errors() { let _lock = lock_test(); - let store_names: Vec = vec!["store1".into()]; + let store_names: Vec = vec!["test-ping".into()]; let metric: LabeledMetric = LabeledMetric::new( 0.into(), @@ -581,7 +587,7 @@ mod test { #[test] fn predefined_labels() { let _lock = lock_test(); - let store_names: Vec = vec!["store1".into()]; + let store_names: Vec = vec!["test-ping".into()]; #[allow(dead_code)] enum MetricLabels { @@ -606,15 +612,18 @@ mod test { metric.get("label2").set(false); metric.get("not_a_label").set(true); - assert_eq!(true, metric.get("label1").test_get_value("store1").unwrap()); + assert_eq!( + true, + metric.get("label1").test_get_value("test-ping").unwrap() + ); assert_eq!( false, - metric.get("label2").test_get_value("store1").unwrap() + metric.get("label2").test_get_value("test-ping").unwrap() ); // The label not in the predefined set is recorded to the `other` bucket. assert_eq!( true, - metric.get("__other__").test_get_value("store1").unwrap() + metric.get("__other__").test_get_value("test-ping").unwrap() ); assert_eq!( diff --git a/toolkit/components/glean/api/src/private/labeled_boolean.rs b/toolkit/components/glean/api/src/private/labeled_boolean.rs index 68998d06fdb1..49e9acad9465 100644 --- a/toolkit/components/glean/api/src/private/labeled_boolean.rs +++ b/toolkit/components/glean/api/src/private/labeled_boolean.rs @@ -92,7 +92,7 @@ mod test { let metric = &metrics::test_only_ipc::an_unordered_labeled_boolean; metric.get("a_label").set(true); - assert!(metric.get("a_label").test_get_value("store1").unwrap()); + assert!(metric.get("a_label").test_get_value("test-ping").unwrap()); } #[test] @@ -159,7 +159,10 @@ mod test { assert!(ipc::replay_from_buf(&ipc::take_buf().unwrap()).is_ok()); assert!( - !parent_metric.get(label).test_get_value("store1").unwrap(), + !parent_metric + .get(label) + .test_get_value("test-ping") + .unwrap(), "Later value takes precedence." ); } diff --git a/toolkit/components/glean/api/src/private/labeled_counter.rs b/toolkit/components/glean/api/src/private/labeled_counter.rs index 38286bcdceea..23167e2bb2e7 100644 --- a/toolkit/components/glean/api/src/private/labeled_counter.rs +++ b/toolkit/components/glean/api/src/private/labeled_counter.rs @@ -143,7 +143,10 @@ mod test { let metric = &metrics::test_only_ipc::a_labeled_counter; metric.get("a_label").add(1); - assert_eq!(1, metric.get("a_label").test_get_value("store1").unwrap()); + assert_eq!( + 1, + metric.get("a_label").test_get_value("test-ping").unwrap() + ); } #[test] @@ -205,7 +208,10 @@ mod test { assert_eq!( 45, - parent_metric.get(label).test_get_value("store1").unwrap(), + parent_metric + .get(label) + .test_get_value("test-ping") + .unwrap(), "Values from the 'processes' should be summed" ); } diff --git a/toolkit/components/glean/api/src/private/memory_distribution.rs b/toolkit/components/glean/api/src/private/memory_distribution.rs index 234141650c0e..2f29d20599b8 100644 --- a/toolkit/components/glean/api/src/private/memory_distribution.rs +++ b/toolkit/components/glean/api/src/private/memory_distribution.rs @@ -255,7 +255,7 @@ mod test { CommonMetricData { name: "memory_distribution_metric".into(), category: "telemetry".into(), - send_in_pings: vec!["store1".into()], + send_in_pings: vec!["test-ping".into()], disabled: false, ..Default::default() }, @@ -264,7 +264,7 @@ mod test { metric.accumulate(42); - let metric_data = metric.test_get_value("store1").unwrap(); + let metric_data = metric.test_get_value("test-ping").unwrap(); assert_eq!(1, metric_data.values[&42494]); assert_eq!(43008, metric_data.sum); } @@ -284,7 +284,7 @@ mod test { child_metric.accumulate(13 * 9); } - let metric_data = parent_metric.test_get_value("store1").unwrap(); + let metric_data = parent_metric.test_get_value("test-ping").unwrap(); assert_eq!(1, metric_data.values[&42494]); assert_eq!(43008, metric_data.sum); diff --git a/toolkit/components/glean/api/src/private/numerator.rs b/toolkit/components/glean/api/src/private/numerator.rs index 059996834cdb..9214a32e75ef 100644 --- a/toolkit/components/glean/api/src/private/numerator.rs +++ b/toolkit/components/glean/api/src/private/numerator.rs @@ -126,7 +126,7 @@ mod test { let metric = &metrics::test_only_ipc::rate_with_external_denominator; metric.add_to_numerator(1); - assert_eq!(1, metric.test_get_value("store1").unwrap().numerator); + assert_eq!(1, metric.test_get_value("test-ping").unwrap().numerator); } #[test] @@ -159,7 +159,7 @@ mod test { assert!(ipc::replay_from_buf(&ipc::take_buf().unwrap()).is_ok()); assert!( - 45 == parent_metric.test_get_value("store1").unwrap().numerator, + 45 == parent_metric.test_get_value("test-ping").unwrap().numerator, "Values from the 'processes' should be summed" ); } diff --git a/toolkit/components/glean/api/src/private/ping.rs b/toolkit/components/glean/api/src/private/ping.rs index 6ceb52b7282d..4e01817ba753 100644 --- a/toolkit/components/glean/api/src/private/ping.rs +++ b/toolkit/components/glean/api/src/private/ping.rs @@ -34,6 +34,7 @@ impl Ping { enabled: bool, schedules_pings: Vec, reason_codes: Vec, + follows_collection_enabled: bool, ) -> Self { if need_ipc() { Ping::Child @@ -48,10 +49,20 @@ impl Ping { enabled, schedules_pings, reason_codes, + follows_collection_enabled, )) } } + pub fn set_enabled(&self, enabled: bool) { + match self { + Ping::Parent(p) => p.set_enabled(enabled), + Ping::Child => { + panic!("Cannot use ping set_enabled API from non-parent process!"); + } + } + } + /// **Test-only API** /// /// Attach a callback to be called right before a new ping is submitted. @@ -109,8 +120,19 @@ mod test { }; // Smoke test for what should be the generated code. - static PROTOTYPE_PING: Lazy = - Lazy::new(|| Ping::new("prototype", false, true, true, true, true, vec![], vec![])); + static PROTOTYPE_PING: Lazy = Lazy::new(|| { + Ping::new( + "prototype", + false, + true, + true, + true, + true, + vec![], + vec![], + true, + ) + }); #[test] fn smoke_test_custom_ping() { diff --git a/toolkit/components/glean/api/src/private/quantity.rs b/toolkit/components/glean/api/src/private/quantity.rs index acda5d60fff6..fb09937c4588 100644 --- a/toolkit/components/glean/api/src/private/quantity.rs +++ b/toolkit/components/glean/api/src/private/quantity.rs @@ -141,7 +141,7 @@ mod test { let metric = &metrics::test_only_ipc::a_quantity; metric.set(14); - assert_eq!(14, metric.test_get_value("store1").unwrap()); + assert_eq!(14, metric.test_get_value("test-ping").unwrap()); } #[test] diff --git a/toolkit/components/glean/api/src/private/rate.rs b/toolkit/components/glean/api/src/private/rate.rs index 59c93f986816..9e8641779721 100644 --- a/toolkit/components/glean/api/src/private/rate.rs +++ b/toolkit/components/glean/api/src/private/rate.rs @@ -166,7 +166,7 @@ mod test { numerator: 1, denominator: 100 }, - metric.test_get_value("store1").unwrap() + metric.test_get_value("test-ping").unwrap() ); } @@ -207,7 +207,7 @@ mod test { numerator: 45, denominator: 33 }, - parent_metric.test_get_value("store1").unwrap(), + parent_metric.test_get_value("test-ping").unwrap(), "Values from the 'processes' should be summed" ); } diff --git a/toolkit/components/glean/api/src/private/string.rs b/toolkit/components/glean/api/src/private/string.rs index f0f9801c9562..96236b8c5b4c 100644 --- a/toolkit/components/glean/api/src/private/string.rs +++ b/toolkit/components/glean/api/src/private/string.rs @@ -172,7 +172,7 @@ mod test { assert_eq!( "test_string_value", - metric.test_get_value("store1").unwrap() + metric.test_get_value("test-ping").unwrap() ); } @@ -200,7 +200,7 @@ mod test { assert!(ipc::replay_from_buf(&ipc::take_buf().unwrap()).is_ok()); assert!( - "test_parent_value" == parent_metric.test_get_value("store1").unwrap(), + "test_parent_value" == parent_metric.test_get_value("test-ping").unwrap(), "String metrics should only work in the parent process" ); } diff --git a/toolkit/components/glean/api/src/private/string_list.rs b/toolkit/components/glean/api/src/private/string_list.rs index 80ed0ff07f52..dd0f067719cb 100644 --- a/toolkit/components/glean/api/src/private/string_list.rs +++ b/toolkit/components/glean/api/src/private/string_list.rs @@ -202,7 +202,7 @@ mod test { assert_eq!( vec!["test_string_value", "another test value"], - metric.test_get_value("store1").unwrap() + metric.test_get_value("test-ping").unwrap() ); } @@ -235,7 +235,7 @@ mod test { assert!(ipc::replay_from_buf(&ipc::take_buf().unwrap()).is_ok()); assert_eq!( vec!["test_string_value", "another test value"], - parent_metric.test_get_value("store1").unwrap() + parent_metric.test_get_value("test-ping").unwrap() ); } } diff --git a/toolkit/components/glean/api/src/private/text.rs b/toolkit/components/glean/api/src/private/text.rs index 7ea0f9439ffe..a5658257df6a 100644 --- a/toolkit/components/glean/api/src/private/text.rs +++ b/toolkit/components/glean/api/src/private/text.rs @@ -166,7 +166,10 @@ mod test { metric.set("test_text_value"); - assert_eq!("test_text_value", metric.test_get_value("store1").unwrap()); + assert_eq!( + "test_text_value", + metric.test_get_value("test-ping").unwrap() + ); } #[test] @@ -193,7 +196,7 @@ mod test { assert!(ipc::replay_from_buf(&ipc::take_buf().unwrap()).is_ok()); assert!( - "test_parent_value" == parent_metric.test_get_value("store1").unwrap(), + "test_parent_value" == parent_metric.test_get_value("test-ping").unwrap(), "Text metrics should only work in the parent process" ); } diff --git a/toolkit/components/glean/api/src/private/timespan.rs b/toolkit/components/glean/api/src/private/timespan.rs index f448029c4bd8..3422c6c7788b 100644 --- a/toolkit/components/glean/api/src/private/timespan.rs +++ b/toolkit/components/glean/api/src/private/timespan.rs @@ -307,7 +307,7 @@ mod test { CommonMetricData { name: "timespan_metric".into(), category: "telemetry".into(), - send_in_pings: vec!["store1".into()], + send_in_pings: vec!["test-ping".into()], disabled: false, ..Default::default() }, @@ -320,7 +320,7 @@ mod test { // So let's cancel and make sure nothing blows up. metric.cancel(); - assert_eq!(None, metric.test_get_value("store1")); + assert_eq!(None, metric.test_get_value("test-ping")); } #[test] diff --git a/toolkit/components/glean/api/src/private/timing_distribution.rs b/toolkit/components/glean/api/src/private/timing_distribution.rs index 712232c2e9ef..f524a232520a 100644 --- a/toolkit/components/glean/api/src/private/timing_distribution.rs +++ b/toolkit/components/glean/api/src/private/timing_distribution.rs @@ -705,7 +705,7 @@ mod test { metric.cancel(id); // We can't inspect the values yet. - assert!(metric.test_get_value("store1").is_none()); + assert!(metric.test_get_value("test-ping").is_none()); } #[test] @@ -737,7 +737,7 @@ mod test { assert!(ipc::replay_from_buf(&buf).is_ok()); let data = parent_metric - .test_get_value("store1") + .test_get_value("test-ping") .expect("should have some data"); // No guarantees from timers means no guarantees on buckets. diff --git a/toolkit/components/glean/api/src/private/url.rs b/toolkit/components/glean/api/src/private/url.rs index 1b7f699df3fd..9de480994d39 100644 --- a/toolkit/components/glean/api/src/private/url.rs +++ b/toolkit/components/glean/api/src/private/url.rs @@ -161,7 +161,7 @@ mod test { assert_eq!( "https://example.com", - metric.test_get_value("store1").unwrap() + metric.test_get_value("test-ping").unwrap() ); } @@ -189,7 +189,7 @@ mod test { assert!(ipc::replay_from_buf(&ipc::take_buf().unwrap()).is_ok()); assert!( - "https://example.com/parent" == parent_metric.test_get_value("store1").unwrap(), + "https://example.com/parent" == parent_metric.test_get_value("test-ping").unwrap(), "Url metrics should only work in the parent process" ); } diff --git a/toolkit/components/glean/api/src/private/uuid.rs b/toolkit/components/glean/api/src/private/uuid.rs index 84a279d66dbe..2e0b736fdb2e 100644 --- a/toolkit/components/glean/api/src/private/uuid.rs +++ b/toolkit/components/glean/api/src/private/uuid.rs @@ -175,7 +175,7 @@ mod test { let expected = Uuid::new_v4(); metric.set(expected.clone()); - assert_eq!(expected, metric.test_get_value("store1").unwrap()); + assert_eq!(expected, metric.test_get_value("test-ping").unwrap()); } #[test] @@ -201,7 +201,7 @@ mod test { assert_eq!( expected, - parent_metric.test_get_value("store1").unwrap(), + parent_metric.test_get_value("test-ping").unwrap(), "UUID metrics should only work in the parent process" ); } diff --git a/toolkit/components/glean/bindings/jog/src/lib.rs b/toolkit/components/glean/bindings/jog/src/lib.rs index 6525e99518e6..f63076194e11 100644 --- a/toolkit/components/glean/bindings/jog/src/lib.rs +++ b/toolkit/components/glean/bindings/jog/src/lib.rs @@ -144,6 +144,7 @@ pub extern "C" fn jog_test_register_ping( enabled: bool, schedules_pings: &ThinVec, reason_codes: &ThinVec, + follows_collection_enabled: bool, ) -> u32 { let ping_name = name.to_string(); let reason_codes = reason_codes @@ -163,6 +164,7 @@ pub extern "C" fn jog_test_register_ping( enabled, schedules_pings, reason_codes, + follows_collection_enabled, ) .expect("Creation or registration of ping failed.") // permitted to panic in test-only method. } @@ -177,6 +179,7 @@ fn create_and_register_ping( enabled: bool, schedules_pings: Vec, reason_codes: Vec, + follows_collection_enabled: bool, ) -> Result> { let ns_name = nsCString::from(&ping_name); let ping_id = factory::create_and_register_ping( @@ -188,6 +191,7 @@ fn create_and_register_ping( enabled, schedules_pings, reason_codes, + follows_collection_enabled, ); extern "C" { fn JOG_RegisterPing(name: &nsACString, ping_id: u32); @@ -237,6 +241,7 @@ struct PingDefinitionData { enabled: bool, schedules_pings: Option>, reason_codes: Option>, + follows_collection_enabled: bool, } /// Read the file at the provided location, interpret it as a jogfile, @@ -286,6 +291,7 @@ pub extern "C" fn jog_load_jogfile(jogfile_path: &nsAString) -> bool { ping.enabled, ping.schedules_pings.unwrap_or_else(Vec::new), ping.reason_codes.unwrap_or_else(Vec::new), + ping.follows_collection_enabled, ); } true diff --git a/toolkit/components/glean/bindings/private/Ping.cpp b/toolkit/components/glean/bindings/private/Ping.cpp index 8dbb31612893..c576ad5c66cd 100644 --- a/toolkit/components/glean/bindings/private/Ping.cpp +++ b/toolkit/components/glean/bindings/private/Ping.cpp @@ -52,6 +52,8 @@ void Ping::Submit(const nsACString& aReason) const { fog_submit_ping_by_id(mId, &aReason); } +void Ping::SetEnabled(bool aValue) const { fog_set_ping_enabled(mId, aValue); } + void Ping::TestBeforeNextSubmit(PingTestCallback&& aCallback) const { { GetCallbackMapLock().apply( @@ -70,6 +72,12 @@ GleanPing::Submit(const nsACString& aReason) { return NS_OK; } +NS_IMETHODIMP +GleanPing::SetEnabled(bool aValue) { + mPing.SetEnabled(aValue); + return NS_OK; +} + NS_IMETHODIMP GleanPing::TestBeforeNextSubmit(nsIGleanPingTestCallback* aCallback) { if (NS_WARN_IF(!aCallback)) { diff --git a/toolkit/components/glean/bindings/private/Ping.h b/toolkit/components/glean/bindings/private/Ping.h index 2a92d87995ec..e6c807daa527 100644 --- a/toolkit/components/glean/bindings/private/Ping.h +++ b/toolkit/components/glean/bindings/private/Ping.h @@ -59,6 +59,16 @@ class Ping { */ void TestBeforeNextSubmit(PingTestCallback&& aCallback) const; + /** + * Enable or disable a ping. + * + * Disabling a ping causes all data for that ping to be removed from storage + * and all pending pings of that type to be deleted. + * + * @param aValue When true, enable metric collection. + */ + void SetEnabled(bool aValue) const; + private: const uint32_t mId; }; diff --git a/toolkit/components/glean/build_scripts/glean_parser_ext/jog.py b/toolkit/components/glean/build_scripts/glean_parser_ext/jog.py index 000a86f43806..30a11eed0ace 100644 --- a/toolkit/components/glean/build_scripts/glean_parser_ext/jog.py +++ b/toolkit/components/glean/build_scripts/glean_parser_ext/jog.py @@ -55,7 +55,7 @@ known_metadata = [ "permit_non_commutative_operations_over_ipc", ] -# List of all ping-specific args that JOG undertsands. +# List of all ping-specific args that JOG understands. known_ping_args = [ "name", "include_client_id", @@ -65,6 +65,7 @@ known_ping_args = [ "enabled", "schedules_pings", "reason_codes", + "follows_collection_enabled", ] diff --git a/toolkit/components/glean/build_scripts/glean_parser_ext/templates/jog_factory.jinja2 b/toolkit/components/glean/build_scripts/glean_parser_ext/templates/jog_factory.jinja2 index 20b34c68123a..93469a216d65 100644 --- a/toolkit/components/glean/build_scripts/glean_parser_ext/templates/jog_factory.jinja2 +++ b/toolkit/components/glean/build_scripts/glean_parser_ext/templates/jog_factory.jinja2 @@ -198,9 +198,10 @@ pub fn create_and_register_ping( enabled: bool, schedules_pings: Vec, reason_codes: Vec, + follows_collection_enabled: bool, ) -> Result> { let ping_id = NEXT_PING_ID.fetch_add(1, Ordering::SeqCst); - let ping = Ping::new(ping_name, include_client_id, send_if_empty, precise_timestamps, include_info_sections, enabled, schedules_pings, reason_codes); + let ping = Ping::new(ping_name, include_client_id, send_if_empty, precise_timestamps, include_info_sections, enabled, schedules_pings, reason_codes, follows_collection_enabled); assert!( __jog_metric_maps::PING_MAP.write()?.insert(ping_id.into(), ping).is_none(), "We should never insert a runtime ping with an already-used id." diff --git a/toolkit/components/glean/build_scripts/glean_parser_ext/templates/rust_pings.jinja2 b/toolkit/components/glean/build_scripts/glean_parser_ext/templates/rust_pings.jinja2 index aee8bb6926c8..6d1e07973ffb 100644 --- a/toolkit/components/glean/build_scripts/glean_parser_ext/templates/rust_pings.jinja2 +++ b/toolkit/components/glean/build_scripts/glean_parser_ext/templates/rust_pings.jinja2 @@ -24,6 +24,7 @@ pub static {{ obj.name|snake_case }}: Lazy = Lazy::new(|| { {{ obj.enabled|rust }}, {{ obj.schedules_pings|rust }}, {{ obj.reason_codes|rust }}, + {{ obj.follows_collection_enabled|rust }}, ) }); @@ -92,3 +93,16 @@ pub(crate) fn submit_ping_by_id(id: u32, reason: Option<&str>) { } } } + +#[cfg(feature = "with_gecko")] +pub(crate) fn set_ping_enabled(id: u32, enabled: bool) { + match id { +{% for obj in all_objs['pings'].values() %} + {{ obj.name|ping_id }} => {{ obj.name | snake_case }}.set_enabled(enabled), +{% endfor %} + _ => { + // TODO: instrument this error. + log::error!("Cannot set_enabled on unknown ping {} by id.", id); + } + } +} diff --git a/toolkit/components/glean/src/init/mod.rs b/toolkit/components/glean/src/init/mod.rs index a78b7264b143..441048499f82 100644 --- a/toolkit/components/glean/src/init/mod.rs +++ b/toolkit/components/glean/src/init/mod.rs @@ -358,6 +358,9 @@ fn fog_test_reset_internal( // I'd prefer to reuse the uploader, but it gets moved into Glean so we build anew. conf.uploader = Some(Box::new(ViaductUploader) as Box); + // Register all custom pings before we initialize. + pings::register_pings(None); + glean::test_reset_glean(conf, client_info, true); Ok(()) } diff --git a/toolkit/components/glean/src/init/upload_pref.rs b/toolkit/components/glean/src/init/upload_pref.rs index 737230c16c7d..b687bad193ad 100644 --- a/toolkit/components/glean/src/init/upload_pref.rs +++ b/toolkit/components/glean/src/init/upload_pref.rs @@ -90,10 +90,10 @@ impl UploadPrefObserver { // ensure Glean is told to wipe the stores. // This may send a "deletion-request" ping for a client_id that's never sent // any other pings. - glean::set_upload_enabled(false); + glean::set_collection_enabled(false); } RECORDING_ENABLED.store(recording_enabled, Ordering::SeqCst); - glean::set_upload_enabled(upload_enabled || recording_enabled); + glean::set_collection_enabled(upload_enabled || recording_enabled); NS_OK } } diff --git a/toolkit/components/glean/tests/gtest/TestFog.cpp b/toolkit/components/glean/tests/gtest/TestFog.cpp index b9cb9140819f..347690de74b2 100644 --- a/toolkit/components/glean/tests/gtest/TestFog.cpp +++ b/toolkit/components/glean/tests/gtest/TestFog.cpp @@ -125,13 +125,14 @@ using std::tuple; TEST_F(FOGFixture, TestCppEventWorks) { test_only_ipc::no_extra_event.Record(); - ASSERT_TRUE(test_only_ipc::no_extra_event.TestGetValue("store1"_ns) + ASSERT_TRUE(test_only_ipc::no_extra_event.TestGetValue("test-ping"_ns) .unwrap() .isSome()); AnEventExtra extra = {.extra1 = Some("can set extras"_ns)}; test_only_ipc::an_event.Record(Some(extra)); - auto optEvents = test_only_ipc::an_event.TestGetValue("store1"_ns).unwrap(); + auto optEvents = + test_only_ipc::an_event.TestGetValue("test-ping"_ns).unwrap(); ASSERT_TRUE(optEvents.isSome()); auto events = optEvents.extract(); @@ -149,7 +150,7 @@ TEST_F(FOGFixture, TestCppEventsWithDifferentExtraTypes) { .extra3LongerName = Some(false)}; test_only_ipc::event_with_extra.Record(Some(extra)); auto optEvents = - test_only_ipc::event_with_extra.TestGetValue("store1"_ns).unwrap(); + test_only_ipc::event_with_extra.TestGetValue("test-ping"_ns).unwrap(); ASSERT_TRUE(optEvents.isSome()); auto events = optEvents.extract(); @@ -197,7 +198,7 @@ TEST_F(FOGFixture, TestCppCustomDistWorks) { test_only_ipc::a_custom_dist.AccumulateSamples({7, 268435458}); DistributionData data = - test_only_ipc::a_custom_dist.TestGetValue("store1"_ns).unwrap().ref(); + test_only_ipc::a_custom_dist.TestGetValue("test-ping"_ns).unwrap().ref(); ASSERT_EQ(data.sum, 7UL + 268435458); ASSERT_EQ(data.count, 2UL); for (const auto& entry : data.values) { @@ -471,7 +472,7 @@ TEST_F(FOGFixture, TestCppUrlWorks) { mozilla::glean::test_only_ipc::a_url.Set(kValue); ASSERT_STREQ(kValue.get(), - mozilla::glean::test_only_ipc::a_url.TestGetValue("store1"_ns) + mozilla::glean::test_only_ipc::a_url.TestGetValue("test-ping"_ns) .unwrap() .value() .get()); diff --git a/toolkit/components/glean/tests/pytest/jogfile_output b/toolkit/components/glean/tests/pytest/jogfile_output index 1b504b2813e1..c15de58e4023 100644 --- a/toolkit/components/glean/tests/pytest/jogfile_output +++ b/toolkit/components/glean/tests/pytest/jogfile_output @@ -353,7 +353,8 @@ "background", "dirty_startup", "foreground" - ] + ], + true ], [ "not-deletion-request", @@ -363,7 +364,8 @@ true, true, [], - [] + [], + true ], [ "not-events", @@ -377,7 +379,8 @@ "background", "max_capacity", "startup" - ] + ], + true ], [ "not-metrics", @@ -393,7 +396,8 @@ "today", "tomorrow", "upgrade" - ] + ], + true ], [ "not-ohttp", @@ -403,7 +407,8 @@ false, true, [], - [] + [], + true ], [ "ridealong-test", @@ -413,7 +418,8 @@ true, true, [], - [] + [], + true ] ] } \ No newline at end of file diff --git a/toolkit/components/glean/tests/pytest/pings_test_output b/toolkit/components/glean/tests/pytest/pings_test_output index 762339faa129..f69c0aee836f 100644 --- a/toolkit/components/glean/tests/pytest/pings_test_output +++ b/toolkit/components/glean/tests/pytest/pings_test_output @@ -24,6 +24,7 @@ pub static not_baseline: Lazy = Lazy::new(|| { true, vec![], vec!["background".into(), "dirty_startup".into(), "foreground".into()], + true, ) }); @@ -43,6 +44,7 @@ pub static not_deletion_request: Lazy = Lazy::new(|| { true, vec![], vec![], + true, ) }); @@ -60,6 +62,7 @@ pub static not_events: Lazy = Lazy::new(|| { true, vec![], vec!["background".into(), "max_capacity".into(), "startup".into()], + true, ) }); @@ -81,6 +84,7 @@ pub static not_metrics: Lazy = Lazy::new(|| { true, vec![], vec!["overdue".into(), "reschedule".into(), "today".into(), "tomorrow".into(), "upgrade".into()], + true, ) }); @@ -96,6 +100,7 @@ pub static not_ohttp: Lazy = Lazy::new(|| { true, vec![], vec![], + true, ) }); @@ -111,6 +116,7 @@ pub static ridealong_test: Lazy = Lazy::new(|| { true, vec![], vec![], + true, ) }); @@ -174,3 +180,19 @@ pub(crate) fn submit_ping_by_id(id: u32, reason: Option<&str>) { } } } + +#[cfg(feature = "with_gecko")] +pub(crate) fn set_ping_enabled(id: u32, enabled: bool) { + match id { + 1 => not_baseline.set_enabled(enabled), + 2 => not_deletion_request.set_enabled(enabled), + 3 => not_events.set_enabled(enabled), + 4 => not_metrics.set_enabled(enabled), + 5 => not_ohttp.set_enabled(enabled), + 6 => ridealong_test.set_enabled(enabled), + _ => { + // TODO: instrument this error. + log::error!("Cannot set_enabled on unknown ping {} by id.", id); + } + } +} diff --git a/toolkit/components/glean/tests/test_metrics.yaml b/toolkit/components/glean/tests/test_metrics.yaml index 3de1bbe1b63c..e64f100fbeec 100644 --- a/toolkit/components/glean/tests/test_metrics.yaml +++ b/toolkit/components/glean/tests/test_metrics.yaml @@ -770,7 +770,7 @@ test_only.ipc: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping no_lint: - COMMON_PREFIX telemetry_mirror: TELEMETRY_TEST_MIRROR_FOR_COUNTER @@ -791,7 +791,7 @@ test_only.ipc: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping no_lint: - COMMON_PREFIX telemetry_mirror: h#TELEMETRY_TEST_COUNT @@ -812,7 +812,7 @@ test_only.ipc: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping no_lint: - COMMON_PREFIX labels: @@ -837,7 +837,7 @@ test_only.ipc: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping no_lint: - COMMON_PREFIX telemetry_mirror: TELEMETRY_TEST_MIRROR_FOR_UNORDERED_BOOL @@ -857,7 +857,7 @@ test_only.ipc: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping no_lint: - COMMON_PREFIX telemetry_mirror: TELEMETRY_TEST_BOOLEAN_KIND @@ -878,7 +878,7 @@ test_only.ipc: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping no_lint: - COMMON_PREFIX telemetry_mirror: TELEMETRY_TEST_MIRROR_FOR_UNORDERED_LABELED_BOOL @@ -899,7 +899,7 @@ test_only.ipc: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping no_lint: - COMMON_PREFIX telemetry_mirror: TELEMETRY_TEST_MIRROR_FOR_DATE @@ -919,7 +919,7 @@ test_only.ipc: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping no_lint: - COMMON_PREFIX telemetry_mirror: TELEMETRY_TEST_MULTIPLE_STORES_STRING @@ -938,7 +938,7 @@ test_only.ipc: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping no_lint: - COMMON_PREFIX a_memory_dist: @@ -958,7 +958,7 @@ test_only.ipc: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping no_lint: - COMMON_PREFIX telemetry_mirror: TELEMETRY_TEST_LINEAR @@ -978,7 +978,7 @@ test_only.ipc: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping no_lint: - COMMON_PREFIX telemetry_mirror: TELEMETRY_TEST_EXPONENTIAL @@ -997,7 +997,7 @@ test_only.ipc: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping no_lint: - COMMON_PREFIX range_min: 1 @@ -1021,7 +1021,7 @@ test_only.ipc: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping no_lint: - COMMON_PREFIX telemetry_mirror: TELEMETRY_TEST_KEYED_BOOLEAN_KIND @@ -1051,7 +1051,7 @@ test_only.ipc: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping no_lint: - COMMON_PREFIX telemetry_mirror: TelemetryTest_MirrorWithExtra_Object1 @@ -1084,7 +1084,7 @@ test_only.ipc: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping no_lint: - COMMON_PREFIX no_extra_event: @@ -1103,7 +1103,7 @@ test_only.ipc: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping telemetry_mirror: TelemetryTest_NotExpiredOptout_Object1 a_uuid: type: uuid @@ -1121,7 +1121,7 @@ test_only.ipc: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping no_lint: - COMMON_PREFIX telemetry_mirror: TELEMETRY_TEST_STRING_KIND @@ -1141,7 +1141,7 @@ test_only.ipc: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping no_lint: - COMMON_PREFIX telemetry_mirror: TELEMETRY_TEST_ANOTHER_MIRROR_FOR_LABELED_COUNTER @@ -1162,7 +1162,7 @@ test_only.ipc: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping no_lint: - COMMON_PREFIX telemetry_mirror: TELEMETRY_TEST_MIRROR_FOR_LABELED_COUNTER @@ -1182,7 +1182,7 @@ test_only.ipc: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping no_lint: - COMMON_PREFIX irate: @@ -1200,7 +1200,7 @@ test_only.ipc: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping telemetry_mirror: TELEMETRY_TEST_MIRROR_FOR_RATE rate_with_external_denominator: type: rate @@ -1218,7 +1218,7 @@ test_only.ipc: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping an_external_denominator: type: counter description: | @@ -1234,7 +1234,7 @@ test_only.ipc: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping no_lint: - COMMON_PREFIX a_url: @@ -1252,7 +1252,7 @@ test_only.ipc: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping no_lint: - COMMON_PREFIX telemetry_mirror: TELEMETRY_TEST_MIRROR_FOR_URL @@ -1274,7 +1274,7 @@ test_only.jog: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping an_event: type: event @@ -1299,4 +1299,4 @@ test_only.jog: - glean-team@mozilla.com expires: never send_in_pings: - - store1 + - test-ping diff --git a/toolkit/components/glean/tests/xpcshell/test_GIFFTIPC.js b/toolkit/components/glean/tests/xpcshell/test_GIFFTIPC.js index 47ca80d78a85..f59a3754a8b4 100644 --- a/toolkit/components/glean/tests/xpcshell/test_GIFFTIPC.js +++ b/toolkit/components/glean/tests/xpcshell/test_GIFFTIPC.js @@ -188,7 +188,7 @@ add_task( // custom_distribution const customSampleSum = CUSTOM_SAMPLES.reduce((acc, a) => acc + a, 0); - const customData = Glean.testOnlyIpc.aCustomDist.testGetValue("store1"); + const customData = Glean.testOnlyIpc.aCustomDist.testGetValue("test-ping"); Assert.equal(customSampleSum, customData.sum, "Sum's correct"); for (let [bucket, count] of Object.entries(customData.values)) { Assert.ok( diff --git a/toolkit/components/glean/tests/xpcshell/test_Glean.js b/toolkit/components/glean/tests/xpcshell/test_Glean.js index 528cf5e91a59..e3f357479859 100644 --- a/toolkit/components/glean/tests/xpcshell/test_Glean.js +++ b/toolkit/components/glean/tests/xpcshell/test_Glean.js @@ -211,7 +211,7 @@ add_task(async function test_fog_memory_distribution_works() { add_task(async function test_fog_custom_distribution_works() { Glean.testOnlyIpc.aCustomDist.accumulateSamples([7, 268435458]); - let data = Glean.testOnlyIpc.aCustomDist.testGetValue("store1"); + let data = Glean.testOnlyIpc.aCustomDist.testGetValue("test-ping"); Assert.equal(2, data.count, "Count of entries is correct"); Assert.equal(7 + 268435458, data.sum, "Sum's correct"); for (let [bucket, count] of Object.entries(data.values)) { @@ -451,7 +451,7 @@ add_task(async function test_fog_url_works() { const value = "https://www.example.com/fog"; Glean.testOnlyIpc.aUrl.set(value); - Assert.equal(value, Glean.testOnlyIpc.aUrl.testGetValue("store1")); + Assert.equal(value, Glean.testOnlyIpc.aUrl.testGetValue("test-ping")); }); add_task(async function test_fog_text_works() { diff --git a/toolkit/components/glean/tests/xpcshell/test_GleanIPC.js b/toolkit/components/glean/tests/xpcshell/test_GleanIPC.js index f356e9745023..7090d2027f73 100644 --- a/toolkit/components/glean/tests/xpcshell/test_GleanIPC.js +++ b/toolkit/components/glean/tests/xpcshell/test_GleanIPC.js @@ -123,7 +123,7 @@ add_task( Assert.ok(count == 1 && MEMORY_BUCKETS.includes(bucket)); } - const customData = Glean.testOnlyIpc.aCustomDist.testGetValue("store1"); + const customData = Glean.testOnlyIpc.aCustomDist.testGetValue("test-ping"); Assert.equal(3 + 4, customData.sum, "Sum's correct"); for (let [bucket, count] of Object.entries(customData.values)) { Assert.ok( diff --git a/toolkit/components/glean/tests/xpcshell/test_JOG.js b/toolkit/components/glean/tests/xpcshell/test_JOG.js index fc981ce83d8a..229c21318d3a 100644 --- a/toolkit/components/glean/tests/xpcshell/test_JOG.js +++ b/toolkit/components/glean/tests/xpcshell/test_JOG.js @@ -32,7 +32,7 @@ add_task(function test_jog_counter_works() { "counter", "jog_cat", "jog_counter", - ["test-only"], + ["test-ping"], `"ping"`, false ); @@ -46,7 +46,7 @@ add_task(async function test_jog_string_works() { "string", "jog_cat", "jog_string", - ["test-only"], + ["test-ping"], `"ping"`, false ); @@ -63,7 +63,7 @@ add_task(async function test_jog_string_list_works() { "string_list", "jog_cat", "jog_string_list", - ["test-only"], + ["test-ping"], `"ping"`, false ); @@ -85,7 +85,7 @@ add_task(async function test_jog_timespan_works() { "timespan", "jog_cat", "jog_timespan", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ time_unit: "millisecond" }) @@ -109,7 +109,7 @@ add_task(async function test_jog_uuid_works() { "uuid", "jog_cat", "jog_uuid", - ["test-only"], + ["test-ping"], `"ping"`, false ); @@ -128,7 +128,7 @@ add_task(function test_jog_datetime_works() { "datetime", "jog_cat", "jog_datetime", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ time_unit: "nanosecond" }) @@ -145,7 +145,7 @@ add_task(function test_jog_boolean_works() { "boolean", "jog_cat", "jog_bool", - ["test-only"], + ["test-ping"], `"ping"`, false ); @@ -158,7 +158,7 @@ add_task(async function test_jog_event_works() { "event", "jog_cat", "jog_event_no_extra", - ["test-only"], + ["test-ping"], `"ping"`, false ); @@ -172,7 +172,7 @@ add_task(async function test_jog_event_works() { "event", "jog_cat", "jog_event", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ allowed_extra_keys: ["extra1", "extra2"] }) @@ -189,7 +189,7 @@ add_task(async function test_jog_event_works() { "event", "jog_cat", "jog_event_with_extra", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ @@ -230,7 +230,7 @@ add_task(async function test_jog_memory_distribution_works() { "memory_distribution", "jog_cat", "jog_memory_dist", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ memory_unit: "megabyte" }) @@ -254,7 +254,7 @@ add_task(async function test_jog_custom_distribution_works() { "custom_distribution", "jog_cat", "jog_custom_dist", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ @@ -297,7 +297,8 @@ add_task(async function test_jog_custom_pings() { true, true, [], - [] + [], + true ); Assert.ok("jogPing" in GleanPings); let submitted = false; @@ -317,7 +318,7 @@ add_task(async function test_jog_timing_distribution_works() { "timing_distribution", "jog_cat", "jog_timing_dist", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ time_unit: "microsecond" }) @@ -360,7 +361,7 @@ add_task(async function test_jog_labeled_boolean_works() { "labeled_boolean", "jog_cat", "jog_labeled_bool", - ["test-only"], + ["test-ping"], `"ping"`, false ); @@ -390,7 +391,7 @@ add_task(async function test_jog_labeled_boolean_with_static_labels_works() { "labeled_boolean", "jog_cat", "jog_labeled_bool_with_labels", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ ordered_labels: ["label_1", "label_2"] }) @@ -428,7 +429,7 @@ add_task(async function test_jog_labeled_counter_works() { "labeled_counter", "jog_cat", "jog_labeled_counter", - ["test-only"], + ["test-ping"], `"ping"`, false ); @@ -459,7 +460,7 @@ add_task(async function test_jog_labeled_counter_with_static_labels_works() { "labeled_counter", "jog_cat", "jog_labeled_counter_with_labels", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ ordered_labels: ["label_1", "label_2"] }) @@ -502,7 +503,7 @@ add_task(async function test_jog_labeled_string_works() { "labeled_string", "jog_cat", "jog_labeled_string", - ["test-only"], + ["test-ping"], `"ping"`, false ); @@ -532,7 +533,7 @@ add_task(async function test_jog_labeled_string_with_labels_works() { "labeled_string", "jog_cat", "jog_labeled_string_with_labels", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ ordered_labels: ["label_1", "label_2"] }) @@ -574,7 +575,7 @@ add_task(function test_jog_quantity_works() { "quantity", "jog_cat", "jog_quantity", - ["test-only"], + ["test-ping"], `"ping"`, false ); @@ -587,7 +588,7 @@ add_task(function test_jog_rate_works() { "rate", "jog_cat", "jog_rate", - ["test-only"], + ["test-ping"], `"ping"`, false ); @@ -603,7 +604,7 @@ add_task(function test_jog_rate_works() { "denominator", "jog_cat", "jog_denominator", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ @@ -611,7 +612,7 @@ add_task(function test_jog_rate_works() { { name: "jog_rate_ext", category: "jog_cat", - send_in_pings: ["test-only"], + send_in_pings: ["test-ping"], lifetime: "ping", disabled: false, }, @@ -622,7 +623,7 @@ add_task(function test_jog_rate_works() { "rate", "jog_cat", "jog_rate_ext", - ["test-only"], + ["test-ping"], `"ping"`, false ); @@ -641,7 +642,7 @@ add_task(function test_jog_dotted_categories_work() { "counter", "jog_cat.dotted", "jog_counter", - ["test-only"], + ["test-ping"], `"ping"`, false ); @@ -659,7 +660,8 @@ add_task(async function test_jog_ping_works() { true, true, [], - [kReason] + [kReason], + true ); let submitted = false; GleanPings.myPing.testBeforeNextSubmit(reason => { @@ -680,7 +682,8 @@ add_task(async function test_jog_noinfo_ping_works() { false, true, [], - [kReason] + [kReason], + true ); let submitted = false; GleanPings.noinfoPing.testBeforeNextSubmit(reason => { @@ -703,7 +706,7 @@ add_task(function test_jog_name_collision() { "counter", "test_only.jog", "a_counter", - ["store1"], + ["test-ping"], `"ping"`, true // changing the metric to disabled. ); @@ -730,7 +733,7 @@ add_task(function test_jog_name_collision() { "event", "test_only.jog", "an_event", - ["store1"], + ["test-ping"], `"ping"`, false, JSON.stringify({ allowed_extra_keys: ["extra1", "extra2", "extra3"] }) // New extra key just dropped @@ -757,7 +760,7 @@ add_task(async function test_jog_text_works() { "text", "test_only.jog", "a_text", - ["test-only"], + ["test-ping"], `"ping"`, false ); @@ -771,7 +774,7 @@ add_task(async function test_jog_custom_distribution_works() { "labeled_custom_distribution", "jog_cat", "jog_labeled_custom_dist", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ @@ -805,7 +808,7 @@ add_task(async function test_jog_labeled_memory_distribution_works() { "labeled_memory_distribution", "jog_cat", "jog_labeled_memory_dist", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ memory_unit: "megabyte" }) @@ -829,7 +832,7 @@ add_task(async function test_jog_labeled_timing_distribution_works() { "labeled_timing_distribution", "jog_cat", "jog_labeled_timing_dist", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ time_unit: "microsecond" }) @@ -869,7 +872,7 @@ add_task(async function test_jog_labeled_quantity_works() { "labeled_quantity", "jog_cat", "jog_labeled_quantity", - ["test-only"], + ["test-ping"], `"ping"`, false ); diff --git a/toolkit/components/glean/tests/xpcshell/test_JOGIPC.js b/toolkit/components/glean/tests/xpcshell/test_JOGIPC.js index 3ea054aae14a..f8954ac8a12a 100644 --- a/toolkit/components/glean/tests/xpcshell/test_JOGIPC.js +++ b/toolkit/components/glean/tests/xpcshell/test_JOGIPC.js @@ -40,14 +40,14 @@ const INVALID_COUNTERS = 7; // It is CRUCIAL that we register metrics in the same order in the parent and // in the child or their metric ids will not line up and ALL WILL EXPLODE. const METRICS = [ - ["counter", "jog_ipc", "jog_counter", ["test-only"], `"ping"`, false], - ["string_list", "jog_ipc", "jog_string_list", ["test-only"], `"ping"`, false], - ["event", "jog_ipc", "jog_event_no_extra", ["test-only"], `"ping"`, false], + ["counter", "jog_ipc", "jog_counter", ["test-ping"], `"ping"`, false], + ["string_list", "jog_ipc", "jog_string_list", ["test-ping"], `"ping"`, false], + ["event", "jog_ipc", "jog_event_no_extra", ["test-ping"], `"ping"`, false], [ "event", "jog_ipc", "jog_event", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ allowed_extra_keys: ["extra1"] }), @@ -56,7 +56,7 @@ const METRICS = [ "memory_distribution", "jog_ipc", "jog_memory_dist", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ memory_unit: "megabyte" }), @@ -65,7 +65,7 @@ const METRICS = [ "timing_distribution", "jog_ipc", "jog_timing_dist", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ time_unit: "nanosecond" }), @@ -74,7 +74,7 @@ const METRICS = [ "custom_distribution", "jog_ipc", "jog_custom_dist", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ @@ -88,7 +88,7 @@ const METRICS = [ "labeled_counter", "jog_ipc", "jog_labeled_counter", - ["test-only"], + ["test-ping"], `"ping"`, false, ], @@ -96,7 +96,7 @@ const METRICS = [ "labeled_counter", "jog_ipc", "jog_labeled_counter_err", - ["test-only"], + ["test-ping"], `"ping"`, false, ], @@ -104,7 +104,7 @@ const METRICS = [ "labeled_counter", "jog_ipc", "jog_labeled_counter_with_labels", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ ordered_labels: ["label_1", "label_2"] }), @@ -113,17 +113,17 @@ const METRICS = [ "labeled_counter", "jog_ipc", "jog_labeled_counter_with_labels_err", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ ordered_labels: ["label_1", "label_2"] }), ], - ["rate", "jog_ipc", "jog_rate", ["test-only"], `"ping"`, false], + ["rate", "jog_ipc", "jog_rate", ["test-ping"], `"ping"`, false], [ "labeled_custom_distribution", "jog_ipc", "jog_labeled_custom_dist", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ @@ -137,7 +137,7 @@ const METRICS = [ "labeled_memory_distribution", "jog_ipc", "jog_labeled_memory_dist", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ memory_unit: "megabyte" }), @@ -146,7 +146,7 @@ const METRICS = [ "labeled_timing_distribution", "jog_ipc", "jog_labeled_timing_dist", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ time_unit: "nanosecond" }), @@ -155,7 +155,7 @@ const METRICS = [ "boolean", "jog_ipc", "jog_unordered_bool", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ permit_non_commutative_operations_over_ipc: true }), @@ -164,7 +164,7 @@ const METRICS = [ "labeled_boolean", "jog_ipc", "jog_unordered_labeled_bool", - ["test-only"], + ["test-ping"], `"ping"`, false, JSON.stringify({ permit_non_commutative_operations_over_ipc: true }), diff --git a/toolkit/components/glean/xpcom/FOG.cpp b/toolkit/components/glean/xpcom/FOG.cpp index 80a33f7260e4..a460a5ab8862 100644 --- a/toolkit/components/glean/xpcom/FOG.cpp +++ b/toolkit/components/glean/xpcom/FOG.cpp @@ -422,11 +422,13 @@ FOG::TestRegisterRuntimePing( const bool aSendIfEmpty, const bool aPreciseTimestamps, const bool aIncludeInfoSections, const bool aEnabled, const nsTArray& aSchedulesPings, - const nsTArray& aReasonCodes, uint32_t* aPingIdOut) { + const nsTArray& aReasonCodes, + const bool aFollowsCollectionEnabled, uint32_t* aPingIdOut) { *aPingIdOut = 0; *aPingIdOut = glean::jog::jog_test_register_ping( &aName, aIncludeClientId, aSendIfEmpty, aPreciseTimestamps, - aIncludeInfoSections, aEnabled, &aSchedulesPings, &aReasonCodes); + aIncludeInfoSections, aEnabled, &aSchedulesPings, &aReasonCodes, + aFollowsCollectionEnabled); return NS_OK; } diff --git a/toolkit/components/glean/xpcom/nsIFOG.idl b/toolkit/components/glean/xpcom/nsIFOG.idl index 86409b2f6d92..93099bdae9ff 100644 --- a/toolkit/components/glean/xpcom/nsIFOG.idl +++ b/toolkit/components/glean/xpcom/nsIFOG.idl @@ -194,5 +194,6 @@ interface nsIFOG : nsISupports in boolean aIncludeInfoSections, in boolean aEnabled, in Array aSchedulesPings, - in Array aReasonCodes); + in Array aReasonCodes, + in boolean aFollowsCollectionEnabled); }; diff --git a/toolkit/components/glean/xpcom/nsIGleanPing.idl b/toolkit/components/glean/xpcom/nsIGleanPing.idl index 59d1aa845344..93bcace65e77 100644 --- a/toolkit/components/glean/xpcom/nsIGleanPing.idl +++ b/toolkit/components/glean/xpcom/nsIGleanPing.idl @@ -48,4 +48,14 @@ interface nsIGleanPing : nsISupports * @param aCallback - The callback to call on the next submit. */ void testBeforeNextSubmit(in nsIGleanPingTestCallback aCallback); + + /** + * Enable or disable a ping. + * + * Disabling a ping causes all data for that ping to be removed from storage + * and all pending pings of that type to be deleted. + * + * @param aValue When true, enable metric collection. + */ + void setEnabled(in boolean aValue); }; diff --git a/toolkit/crashreporter/client/app/src/glean.rs b/toolkit/crashreporter/client/app/src/glean.rs index be26234f9b44..165f22133c02 100644 --- a/toolkit/crashreporter/client/app/src/glean.rs +++ b/toolkit/crashreporter/client/app/src/glean.rs @@ -23,6 +23,12 @@ const TELEMETRY_SERVER: &str = if cfg!(mock) { /// When mocking, this should be called on a thread where the mock data is present. #[cfg_attr(test, allow(dead_code))] pub fn init(cfg: &Config) { + // Since Glean v63.0.0, custom pings are required to be instantiated prior to Glean init + // in order to ensure they are enabled and able to collect data. This is due to the data + // collection state being determined at the ping level now instead of just by the global + // Glean collection enabled flag. See Bug 1934931 for more information. + _ = &*crash; + glean::initialize(config(cfg), client_info_metrics(cfg)); } diff --git a/toolkit/crashreporter/client/app/src/main.rs b/toolkit/crashreporter/client/app/src/main.rs index b16f3a68cfd9..83d70cc9a3ee 100644 --- a/toolkit/crashreporter/client/app/src/main.rs +++ b/toolkit/crashreporter/client/app/src/main.rs @@ -243,6 +243,12 @@ fn try_run(config: &mut Arc) -> anyhow::Result { extra }; + // Since Glean v63.0.0, custom pings are required to be instantiated prior to Glean init + // in order to ensure they are enabled and able to collect data. This is due to the data + // collection state being determined at the ping level now instead of just by the global + // Glean collection enabled flag. See Bug 1934931 for more information. + _ = &*glean::crash; + // Initialize glean here since it relies on the data directory (which will not change after // this point). We could potentially initialize it even later (only just before we need // it), however we may use it for more than just the crash ping in the future, in which diff --git a/toolkit/mozapps/handling/metrics.yaml b/toolkit/mozapps/handling/metrics.yaml index 2466f0993cd4..7296afd7ff1c 100644 --- a/toolkit/mozapps/handling/metrics.yaml +++ b/toolkit/mozapps/handling/metrics.yaml @@ -32,6 +32,5 @@ protocolhandler.mailto: the callee comes from within Firefox, this value is false type: boolean send_in_pings: - - active - events - metrics