commit 7afdabb9469aff8db7b5aafc76ab8ac3c4e9a95d
parent 8ef739bd5f3506e8261aeae8a0b3ab61c9378c02
Author: Alex Hochheiden <ahochheiden@mozilla.com>
Date: Sat, 15 Nov 2025 00:17:18 +0000
Bug 1991995 - Add `assert_success()` function to `test_android_gradle_build.py` to provide more useful error output r=nalexander
Differential Revision: https://phabricator.services.mozilla.com/D272389
Diffstat:
1 file changed, 36 insertions(+), 53 deletions(-)
diff --git a/build/test/python/test_android_gradle_build.py b/build/test/python/test_android_gradle_build.py
@@ -138,6 +138,24 @@ def get_test_run_build_metrics(objdir):
return None
+def assert_success(returncode, output):
+ """Assert that a command succeeded, showing output on failure."""
+ if returncode != 0:
+ output_lines = output if isinstance(output, list) else output.splitlines()
+
+ if os.environ.get("MOZ_AUTOMATION"):
+ final_output = "\n".join(output_lines)
+ else:
+ tail_lines = (
+ output_lines[-100:] if len(output_lines) > 100 else output_lines
+ )
+ final_output = (
+ f"Last {len(tail_lines)} of {len(output_lines)} lines of output:\n\n"
+ + "\n".join(tail_lines)
+ )
+ pytest.fail(f"Command failed with return code: {returncode}\n{final_output}")
+
+
def assert_all_task_statuses(objdir, acceptable_statuses, always_executed_tasks=None):
"""Asserts that all tasks in build metrics have acceptable statuses."""
@@ -210,9 +228,7 @@ def assert_ordered_task_outcomes(objdir, ordered_expected_task_statuses):
def test_artifact_build(objdir, mozconfig, run_mach):
- (returncode, output) = run_mach(["build"])
- assert returncode == 0
-
+ assert_success(*run_mach(["build"]))
# Order matters, since `mach build stage-package` depends on the
# outputs of `mach build faster`.
assert_ordered_task_outcomes(
@@ -223,10 +239,7 @@ def test_artifact_build(objdir, mozconfig, run_mach):
assert len(omnijar_hash_to) == 1
(omnijar_hash_orig,) = omnijar_hash_to.values()
- (returncode, output) = run_mach(["gradle", "geckoview_example:assembleDebug"])
-
- assert returncode == 0
-
+ assert_success(*run_mach(["gradle", "geckoview_example:assembleDebug"]))
# Order matters, since `mach build stage-package` depends on the
# outputs of `mach build faster`.
assert_ordered_task_outcomes(
@@ -246,62 +259,40 @@ def test_minify_fenix_incremental_build(objdir, mozconfig, run_mach):
"""
# Ensure a clean state
- (returncode, output) = run_mach(["gradle", ":fenix:cleanMinifyFenixReleaseWithR8"])
- assert returncode == 0
-
- (returncode, output) = run_mach(["gradle", ":fenix:minifyFenixReleaseWithR8"])
- assert returncode == 0
-
+ assert_success(*run_mach(["gradle", ":fenix:cleanMinifyFenixReleaseWithR8"]))
+ assert_success(*run_mach(["gradle", ":fenix:minifyFenixReleaseWithR8"]))
assert_ordered_task_outcomes(
objdir, [(":fenix:minifyFenixReleaseWithR8", "EXECUTED")]
)
- (returncode, output) = run_mach(["gradle", ":fenix:minifyFenixReleaseWithR8"])
- assert returncode == 0
-
+ assert_success(*run_mach(["gradle", ":fenix:minifyFenixReleaseWithR8"]))
assert_ordered_task_outcomes(
objdir, [(":fenix:minifyFenixReleaseWithR8", "UP-TO-DATE")]
)
def test_geckoview_build(objdir, mozconfig, run_mach):
- (returncode, output) = run_mach(["build"])
- assert returncode == 0
-
- (returncode, output) = run_mach(["gradle", "geckoview:clean"])
- assert returncode == 0
-
- (returncode, output) = run_mach(["gradle", "geckoview:assembleDebug"])
- assert returncode == 0
-
+ assert_success(*run_mach(["build"]))
+ assert_success(*run_mach(["gradle", "geckoview:clean"]))
+ assert_success(*run_mach(["gradle", "geckoview:assembleDebug"]))
assert_all_task_statuses(objdir, ["EXECUTED", "UP-TO-DATE", "SKIPPED"])
- (returncode, output) = run_mach(["gradle", "geckoview:assembleDebug"])
- assert returncode == 0
-
+ assert_success(*run_mach(["gradle", "geckoview:assembleDebug"]))
assert_all_task_statuses(objdir, ["UP-TO-DATE", "SKIPPED"])
def test_fenix_build(objdir, mozconfig, run_mach):
- (returncode, output) = run_mach(["build"])
- assert returncode == 0
-
- (returncode, output) = run_mach(
- ["gradle", "fenix:clean", ":components:support-base:clean"]
+ assert_success(*run_mach(["build"]))
+ assert_success(
+ *run_mach(["gradle", "fenix:clean", ":components:support-base:clean"])
)
- assert returncode == 0
-
- (returncode, output) = run_mach(["gradle", "fenix:assembleDebug"])
- assert returncode == 0
-
+ assert_success(*run_mach(["gradle", "fenix:assembleDebug"]))
assert_ordered_task_outcomes(
objdir, [(":components:support-base:generateComponentEnum", "EXECUTED")]
)
assert_all_task_statuses(objdir, ["EXECUTED", "UP-TO-DATE", "SKIPPED"])
- (returncode, output) = run_mach(["gradle", "fenix:assembleDebug"])
- assert returncode == 0
-
+ assert_success(*run_mach(["gradle", "fenix:assembleDebug"]))
assert_ordered_task_outcomes(
objdir, [(":components:support-base:generateComponentEnum", "UP-TO-DATE")]
)
@@ -309,23 +300,15 @@ def test_fenix_build(objdir, mozconfig, run_mach):
def test_focus_build(objdir, mozconfig, run_mach):
- (returncode, output) = run_mach(["build"])
- assert returncode == 0
-
- (returncode, output) = run_mach(["gradle", "focus:clean"])
- assert returncode == 0
-
- (returncode, output) = run_mach(["gradle", "focus:assembleDebug"])
- assert returncode == 0
-
+ assert_success(*run_mach(["build"]))
+ assert_success(*run_mach(["gradle", "focus:clean"]))
+ assert_success(*run_mach(["gradle", "focus:assembleDebug"]))
assert_ordered_task_outcomes(
objdir, [(":focus-android:generateLocaleList", "EXECUTED")]
)
assert_all_task_statuses(objdir, ["EXECUTED", "UP-TO-DATE", "SKIPPED"])
- (returncode, output) = run_mach(["gradle", "focus:assembleDebug"])
- assert returncode == 0
-
+ assert_success(*run_mach(["gradle", "focus:assembleDebug"]))
assert_ordered_task_outcomes(
objdir, [(":focus-android:generateLocaleList", "UP-TO-DATE")]
)