From ee5ccc2bec6b8ffb958d028250910801d64ce5da Mon Sep 17 00:00:00 2001 From: Will Li Date: Tue, 18 Feb 2025 12:58:15 -0800 Subject: [PATCH] Move materialization for failed actions tests out of uncategorized Summary: To reduce the number of tests in test_uncategorized Reviewed By: iguridi Differential Revision: D69629898 fbshipit-source-id: 906dede1bff056c1ef3dbf1fa1c154a3b73a9043 --- ...test_materialization_for_failed_actions.py | 112 ++++++++++++++++++ .../.buckconfig | 0 .../TARGETS.fixture | 0 .../defs.bzl | 0 .../platforms/TARGETS.fixture | 0 .../platforms/defs.bzl | 0 .../prelude/prelude.bzl | 0 .../remote_only.py | 0 .../.buckconfig | 0 .../TARGETS.fixture | 0 .../defs.bzl | 0 tests/core/build/test_uncategorized.py | 96 --------------- 12 files changed, 112 insertions(+), 96 deletions(-) create mode 100644 tests/core/build/test_materialization_for_failed_actions.py rename tests/core/build/{test_uncategorized_data => test_materialization_for_failed_actions_data}/materialize_inputs_for_failed_actions/.buckconfig (100%) rename tests/core/build/{test_uncategorized_data => test_materialization_for_failed_actions_data}/materialize_inputs_for_failed_actions/TARGETS.fixture (100%) rename tests/core/build/{test_uncategorized_data => test_materialization_for_failed_actions_data}/materialize_inputs_for_failed_actions/defs.bzl (100%) rename tests/core/build/{test_uncategorized_data => test_materialization_for_failed_actions_data}/materialize_inputs_for_failed_actions/platforms/TARGETS.fixture (100%) rename tests/core/build/{test_uncategorized_data => test_materialization_for_failed_actions_data}/materialize_inputs_for_failed_actions/platforms/defs.bzl (100%) rename tests/core/build/{test_uncategorized_data => test_materialization_for_failed_actions_data}/materialize_inputs_for_failed_actions/prelude/prelude.bzl (100%) rename tests/core/build/{test_uncategorized_data => test_materialization_for_failed_actions_data}/materialize_inputs_for_failed_actions/remote_only.py (100%) rename tests/core/build/{test_uncategorized_data => test_materialization_for_failed_actions_data}/materialize_outputs_for_failed_actions/.buckconfig (100%) rename tests/core/build/{test_uncategorized_data => test_materialization_for_failed_actions_data}/materialize_outputs_for_failed_actions/TARGETS.fixture (100%) rename tests/core/build/{test_uncategorized_data => test_materialization_for_failed_actions_data}/materialize_outputs_for_failed_actions/defs.bzl (100%) diff --git a/tests/core/build/test_materialization_for_failed_actions.py b/tests/core/build/test_materialization_for_failed_actions.py new file mode 100644 index 0000000000000..d267f6effb890 --- /dev/null +++ b/tests/core/build/test_materialization_for_failed_actions.py @@ -0,0 +1,112 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# +# This source code is licensed under both the MIT license found in the +# LICENSE-MIT file in the root directory of this source tree and the Apache +# License, Version 2.0 found in the LICENSE-APACHE file in the root directory +# of this source tree. + +# pyre-strict + + +from pathlib import Path + +from buck2.tests.e2e_util.api.buck import Buck +from buck2.tests.e2e_util.asserts import expect_failure +from buck2.tests.e2e_util.buck_workspace import buck_test +from buck2.tests.e2e_util.helper.utils import json_get, random_string + + +@buck_test(data_dir="materialize_inputs_for_failed_actions") +async def test_materialize_inputs_for_failed_actions(buck: Buck) -> None: + await expect_failure( + buck.build( + "//:action_fail", + "--remote-only", + "--no-remote-cache", + "--materialize-failed-inputs", + "-c", + f"test.cache_buster={random_string()}", + ), + ) + + log = (await buck.log("show")).stdout.strip().splitlines() + + found_action_error = False + found_materialize_failed_inputs_span = False + + for line in log: + # Look for MaterializeFailedInputs ReStage event + if "MaterializeFailedInputs" in line: + found_materialize_failed_inputs_span = True + + # Inspect failed input + materialized_inputs_for_failed = json_get( + line, + "Event", + "data", + "Instant", + "data", + "ActionError", + "last_command", + "details", + "command_kind", + "command", + "RemoteCommand", + "materialized_inputs_for_failed", + ) + + if materialized_inputs_for_failed: + found_action_error = True + assert len(materialized_inputs_for_failed) == 1 + input = materialized_inputs_for_failed[0] + with open(Path(buck.cwd / input), "r") as materialized_input_path: + contents = materialized_input_path.read() + assert contents == "yay!" + + if not found_action_error: + raise AssertionError("Did not find relevant ActionError") + if not found_materialize_failed_inputs_span: + raise AssertionError("Did not find relevant MaterializeFailedInputs span") + + +@buck_test(data_dir="materialize_outputs_for_failed_actions") +async def test_materialize_outputs_for_failed_actions(buck: Buck) -> None: + await expect_failure( + buck.build( + "//:action_fail", + "--remote-only", + "--no-remote-cache", + "--unstable-materialize-failed-action-outputs=json", + "-c", + f"test.cache_buster={random_string()}", + ), + ) + + log = (await buck.log("show")).stdout.strip().splitlines() + + found_action_error = False + + for line in log: + # Inspect failed output + materialized_outputs_for_failed = json_get( + line, + "Event", + "data", + "Instant", + "data", + "ActionError", + "last_command", + "details", + "command_kind", + "command", + "RemoteCommand", + "materialized_outputs_for_failed_actions", + ) + + if materialized_outputs_for_failed: + found_action_error = True + assert len(materialized_outputs_for_failed) == 1 + materialized_outputs_for_failed[0].endswith("json") + + if not found_action_error: + raise AssertionError("Did not find relevant ActionError") diff --git a/tests/core/build/test_uncategorized_data/materialize_inputs_for_failed_actions/.buckconfig b/tests/core/build/test_materialization_for_failed_actions_data/materialize_inputs_for_failed_actions/.buckconfig similarity index 100% rename from tests/core/build/test_uncategorized_data/materialize_inputs_for_failed_actions/.buckconfig rename to tests/core/build/test_materialization_for_failed_actions_data/materialize_inputs_for_failed_actions/.buckconfig diff --git a/tests/core/build/test_uncategorized_data/materialize_inputs_for_failed_actions/TARGETS.fixture b/tests/core/build/test_materialization_for_failed_actions_data/materialize_inputs_for_failed_actions/TARGETS.fixture similarity index 100% rename from tests/core/build/test_uncategorized_data/materialize_inputs_for_failed_actions/TARGETS.fixture rename to tests/core/build/test_materialization_for_failed_actions_data/materialize_inputs_for_failed_actions/TARGETS.fixture diff --git a/tests/core/build/test_uncategorized_data/materialize_inputs_for_failed_actions/defs.bzl b/tests/core/build/test_materialization_for_failed_actions_data/materialize_inputs_for_failed_actions/defs.bzl similarity index 100% rename from tests/core/build/test_uncategorized_data/materialize_inputs_for_failed_actions/defs.bzl rename to tests/core/build/test_materialization_for_failed_actions_data/materialize_inputs_for_failed_actions/defs.bzl diff --git a/tests/core/build/test_uncategorized_data/materialize_inputs_for_failed_actions/platforms/TARGETS.fixture b/tests/core/build/test_materialization_for_failed_actions_data/materialize_inputs_for_failed_actions/platforms/TARGETS.fixture similarity index 100% rename from tests/core/build/test_uncategorized_data/materialize_inputs_for_failed_actions/platforms/TARGETS.fixture rename to tests/core/build/test_materialization_for_failed_actions_data/materialize_inputs_for_failed_actions/platforms/TARGETS.fixture diff --git a/tests/core/build/test_uncategorized_data/materialize_inputs_for_failed_actions/platforms/defs.bzl b/tests/core/build/test_materialization_for_failed_actions_data/materialize_inputs_for_failed_actions/platforms/defs.bzl similarity index 100% rename from tests/core/build/test_uncategorized_data/materialize_inputs_for_failed_actions/platforms/defs.bzl rename to tests/core/build/test_materialization_for_failed_actions_data/materialize_inputs_for_failed_actions/platforms/defs.bzl diff --git a/tests/core/build/test_uncategorized_data/materialize_inputs_for_failed_actions/prelude/prelude.bzl b/tests/core/build/test_materialization_for_failed_actions_data/materialize_inputs_for_failed_actions/prelude/prelude.bzl similarity index 100% rename from tests/core/build/test_uncategorized_data/materialize_inputs_for_failed_actions/prelude/prelude.bzl rename to tests/core/build/test_materialization_for_failed_actions_data/materialize_inputs_for_failed_actions/prelude/prelude.bzl diff --git a/tests/core/build/test_uncategorized_data/materialize_inputs_for_failed_actions/remote_only.py b/tests/core/build/test_materialization_for_failed_actions_data/materialize_inputs_for_failed_actions/remote_only.py similarity index 100% rename from tests/core/build/test_uncategorized_data/materialize_inputs_for_failed_actions/remote_only.py rename to tests/core/build/test_materialization_for_failed_actions_data/materialize_inputs_for_failed_actions/remote_only.py diff --git a/tests/core/build/test_uncategorized_data/materialize_outputs_for_failed_actions/.buckconfig b/tests/core/build/test_materialization_for_failed_actions_data/materialize_outputs_for_failed_actions/.buckconfig similarity index 100% rename from tests/core/build/test_uncategorized_data/materialize_outputs_for_failed_actions/.buckconfig rename to tests/core/build/test_materialization_for_failed_actions_data/materialize_outputs_for_failed_actions/.buckconfig diff --git a/tests/core/build/test_uncategorized_data/materialize_outputs_for_failed_actions/TARGETS.fixture b/tests/core/build/test_materialization_for_failed_actions_data/materialize_outputs_for_failed_actions/TARGETS.fixture similarity index 100% rename from tests/core/build/test_uncategorized_data/materialize_outputs_for_failed_actions/TARGETS.fixture rename to tests/core/build/test_materialization_for_failed_actions_data/materialize_outputs_for_failed_actions/TARGETS.fixture diff --git a/tests/core/build/test_uncategorized_data/materialize_outputs_for_failed_actions/defs.bzl b/tests/core/build/test_materialization_for_failed_actions_data/materialize_outputs_for_failed_actions/defs.bzl similarity index 100% rename from tests/core/build/test_uncategorized_data/materialize_outputs_for_failed_actions/defs.bzl rename to tests/core/build/test_materialization_for_failed_actions_data/materialize_outputs_for_failed_actions/defs.bzl diff --git a/tests/core/build/test_uncategorized.py b/tests/core/build/test_uncategorized.py index de1bab532a913..31df079766806 100644 --- a/tests/core/build/test_uncategorized.py +++ b/tests/core/build/test_uncategorized.py @@ -412,102 +412,6 @@ async def test_tmpdir(buck: Buck) -> None: await buck.build("root//:") -@buck_test(data_dir="materialize_inputs_for_failed_actions") -async def test_materialize_inputs_for_failed_actions(buck: Buck) -> None: - await expect_failure( - buck.build( - "//:action_fail", - "--remote-only", - "--no-remote-cache", - "--materialize-failed-inputs", - "-c", - f"test.cache_buster={random_string()}", - ), - ) - - log = (await buck.log("show")).stdout.strip().splitlines() - - found_action_error = False - found_materialize_failed_inputs_span = False - - for line in log: - # Look for MaterializeFailedInputs ReStage event - if "MaterializeFailedInputs" in line: - found_materialize_failed_inputs_span = True - - # Inspect failed input - materialized_inputs_for_failed = json_get( - line, - "Event", - "data", - "Instant", - "data", - "ActionError", - "last_command", - "details", - "command_kind", - "command", - "RemoteCommand", - "materialized_inputs_for_failed", - ) - - if materialized_inputs_for_failed: - found_action_error = True - assert len(materialized_inputs_for_failed) == 1 - input = materialized_inputs_for_failed[0] - with open(Path(buck.cwd / input), "r") as materialized_input_path: - contents = materialized_input_path.read() - assert contents == "yay!" - - if not found_action_error: - raise AssertionError("Did not find relevant ActionError") - if not found_materialize_failed_inputs_span: - raise AssertionError("Did not find relevant MaterializeFailedInputs span") - - -@buck_test(data_dir="materialize_outputs_for_failed_actions") -async def test_materialize_outputs_for_failed_actions(buck: Buck) -> None: - await expect_failure( - buck.build( - "//:action_fail", - "--remote-only", - "--no-remote-cache", - "--unstable-materialize-failed-action-outputs=json", - "-c", - f"test.cache_buster={random_string()}", - ), - ) - - log = (await buck.log("show")).stdout.strip().splitlines() - - found_action_error = False - - for line in log: - # Inspect failed output - materialized_outputs_for_failed = json_get( - line, - "Event", - "data", - "Instant", - "data", - "ActionError", - "last_command", - "details", - "command_kind", - "command", - "RemoteCommand", - "materialized_outputs_for_failed_actions", - ) - - if materialized_outputs_for_failed: - found_action_error = True - assert len(materialized_outputs_for_failed) == 1 - materialized_outputs_for_failed[0].endswith("json") - - if not found_action_error: - raise AssertionError("Did not find relevant ActionError") - - def random_string() -> str: return "".join(random.choice(string.ascii_lowercase) for i in range(256))