commit 82cae826f866869c31e8152558b91f091035648f
parent 2d74e4851148fa49486c06eb0bb8ddbb6dde0f8a
Author: Delia Pop <dpop@mozilla.com>
Date: Wed, 10 Dec 2025 07:12:03 +0000
Bug 2004920 - Remove obsolete BaselinePingTest file from Fenix r=aaronmt
Removing the BaselinePingTest.kt file from Fenix based on Travis's [[ https://bugzilla.mozilla.org/show_bug.cgi?id=2003993#c8 | comment ]] in bug 2003993.
Differential Revision: https://phabricator.services.mozilla.com/D275609
Diffstat:
1 file changed, 0 insertions(+), 189 deletions(-)
diff --git a/mobile/android/fenix/app/src/androidTest/java/org/mozilla/fenix/glean/BaselinePingTest.kt b/mobile/android/fenix/app/src/androidTest/java/org/mozilla/fenix/glean/BaselinePingTest.kt
@@ -1,189 +0,0 @@
-/* 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/. */
-
-@file:Suppress("DEPRECATION")
-
-package org.mozilla.fenix.glean
-
-import android.content.Context
-import androidx.test.core.app.ApplicationProvider
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.platform.app.InstrumentationRegistry
-import androidx.test.rule.ActivityTestRule
-import androidx.test.uiautomator.UiDevice
-import androidx.test.uiautomator.UiSelector
-import kotlinx.coroutines.DelicateCoroutinesApi
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.GlobalScope
-import kotlinx.coroutines.launch
-import mozilla.components.browser.engine.gecko.fetch.GeckoViewFetchClient
-import mozilla.components.service.glean.net.ConceptFetchHttpUploader
-import mozilla.telemetry.glean.Glean
-import mozilla.telemetry.glean.config.Configuration
-import mozilla.telemetry.glean.testing.GleanTestLocalServer
-import okhttp3.mockwebserver.RecordedRequest
-import org.json.JSONObject
-import org.junit.Assert.assertFalse
-import org.junit.Assert.assertTrue
-import org.junit.Before
-import org.junit.BeforeClass
-import org.junit.Ignore
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.mozilla.fenix.GleanMetrics.GleanBuildInfo
-import org.mozilla.fenix.HomeActivity
-import org.mozilla.fenix.R
-import org.mozilla.fenix.helpers.HomeActivityTestRule
-import org.mozilla.fenix.helpers.MockWebServerHelper
-import java.io.BufferedReader
-import java.io.ByteArrayInputStream
-import java.util.concurrent.TimeUnit
-import java.util.zip.GZIPInputStream
-
-/**
- * Decompress the GZIP returned by the glean-core layer.
- *
- * @param data the gzipped [ByteArray] to decompress
- * @return a [String] containing the uncompressed data.
- */
-fun decompressGZIP(data: ByteArray): String {
- return GZIPInputStream(ByteArrayInputStream(data)).bufferedReader().use(BufferedReader::readText)
-}
-
-/**
- * Convenience method to get the body of a request as a String.
- * The UTF8 representation of the request body will be returned.
- * If the request body is gzipped, it will be decompressed first.
- *
- * @return a [String] containing the body of the request.
- */
-fun RecordedRequest.getPlainBody(): String {
- return if (this.getHeader("Content-Encoding") == "gzip") {
- val bodyInBytes = this.body.readByteArray()
- decompressGZIP(bodyInBytes)
- } else {
- this.body.readUtf8()
- }
-}
-
-@RunWith(AndroidJUnit4::class)
-class BaselinePingTest {
- private val server = MockWebServerHelper.createAlwaysOkMockWebServer()
- private lateinit var mDevice: UiDevice
-
- @get:Rule
- val activityRule: ActivityTestRule<HomeActivity> = HomeActivityTestRule()
-
- @get:Rule
- val gleanRule = GleanTestLocalServer(ApplicationProvider.getApplicationContext(), server.port)
-
- @Before
- fun setup() {
- mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
- }
-
- companion object {
- @BeforeClass
- @JvmStatic
- @OptIn(DelicateCoroutinesApi::class) // GlobalScope usage
- fun setupOnce() {
- val httpClient = ConceptFetchHttpUploader(
- lazy {
- GeckoViewFetchClient(ApplicationProvider.getApplicationContext())
- },
- )
-
- // Fenix does not initialize the Glean SDK in tests/debug builds, but this test
- // requires Glean to be initialized so we need to do it manually. Additionally,
- // we need to do this on the main thread, as the Glean SDK requires it.
- GlobalScope.launch(Dispatchers.Main.immediate) {
- Glean.initialize(
- applicationContext = ApplicationProvider.getApplicationContext(),
- uploadEnabled = true,
- configuration = Configuration(httpClient = httpClient),
- buildInfo = GleanBuildInfo.buildInfo,
- )
- }
- }
- }
-
- /**
- * Wait for a specific ping to be received by the local server and
- * return its parsed JSON content.
- *
- * @param pingName the name of the ping to wait for
- * @param pingReason the value of the `reason` field for the received ping
- * @param maxAttempts how many times should a wait be attempted
- */
- private fun waitForPingContent(
- pingName: String,
- pingReason: String?,
- maxAttempts: Int = 3,
- ): JSONObject? {
- var attempts = 0
- do {
- attempts += 1
- val request = server.takeRequest(20L, TimeUnit.SECONDS) ?: break
- val docType = request.path!!.split("/")[3]
- if (pingName == docType) {
- val parsedPayload = JSONObject(request.getPlainBody())
- if (pingReason == null) {
- return parsedPayload
- }
-
- // If we requested a specific ping reason, look for it.
- val reason = parsedPayload.getJSONObject("ping_info").getString("reason")
- if (reason == pingReason) {
- return parsedPayload
- }
- }
- } while (attempts < maxAttempts)
-
- return null
- }
-
- @Ignore("Failing, see: https://bugzilla.mozilla.org/show_bug.cgi?id=1807288")
- @Test
- fun validateBaselinePing() {
- // Wait for the app to be idle/ready.
- InstrumentationRegistry.getInstrumentation().waitForIdleSync()
- mDevice.waitForIdle()
-
- // Wait for 1 second: this should guarantee we have some valid duration in the
- // ping.
- Thread.sleep(1000)
-
- // Move it to background.
- mDevice.pressHome()
-
- // Due to bug 1632184, we need move the activity to foreground again, in order
- // for a 'background' ping with reason 'foreground' to be generated and also trigger
- // sending the ping that was submitted on background. This can go away once bug 1634375
- // is fixed.
- mDevice.pressRecentApps()
- mDevice.findObject(
- UiSelector().descriptionContains(
- ApplicationProvider.getApplicationContext<Context>().getString(R.string.app_name),
- ),
- )
- .click()
-
- // Validate the received data.
- val baselinePing = waitForPingContent("baseline", "inactive")!!
-
- val metrics = baselinePing.getJSONObject("metrics")
-
- // Make sure we have a 'duration' field with a reasonable value: it should be >= 1, since
- // we slept for 1000ms.
- val timespans = metrics.getJSONObject("timespan")
- assertTrue(timespans.getJSONObject("glean.baseline.duration").getLong("value") >= 1L)
-
- // Make sure there's no errors.
- val errors = metrics.optJSONObject("labeled_counter")?.keys()
- errors?.forEach {
- assertFalse(it.startsWith("glean.error."))
- }
- }
-}