[gcc_toolchain] Delete unnecessary tests

Previously the recipe had 56 tests, more than any other recipe. But most
of those were essentially duplicates; in fact, there were only 10
distinct expectation files among all 45 tests. These duplicate tests add
noise to expectation file diffs and take extra time to run, which slows
down local iteration, especially as long as we're in a transition state
where we run each test in both Python 2 and Python 3.

It's not necessary or particularly useful to have a test for each
possible combination of os/arch/bucket because:
a) The recipes don't test correctness, so just because a unit test
   passes for a given os/arch combination it doesn't mean that the
   recipe will actually pass when run in production on that platform
   (because most of the platform-specific differences are in CLI tools
   that the recipe runs).
b) There generally aren't code paths that are specific to each
   combination (e.g. there's no prod-specific code path within a mac or
   linux-specific code path), so having a test for every possible
   combination isn't necessary for code coverage. If such a code path is
   introduced in the future, it will be easy enough to detect that a
   test is needed for it because code coverage will indicate that the
   code path is not covered.

So I cut the recipe down from 56 to just 8 tests (close to the minimum
number required for 100% code coverage), mostly by eliminating for loops
that generate tests and instead adding just a single test for each
logical branch of the recipe.

This is a test-only refactoring, with no impact on the recipe's
behavior.

Change-Id: I3baec14e2bfc65d7b3fb11648df4d076b6fc1644
Reviewed-on: https://fuchsia-review.googlesource.com/c/infra/recipes/+/583362
Reviewed-by: Roland McGrath <mcgrathr@google.com>
Commit-Queue: Auto-Submit <auto-submit@fuchsia-infra.iam.gserviceaccount.com>
Fuchsia-Auto-Submit: Oliver Newman <olivernewman@google.com>
57 files changed
tree: c40b5d2a990e675678fa4bec6f4fec5378cf6de6
  1. git-hooks/
  2. infra/
  3. manifest/
  4. recipe_modules/
  5. recipe_proto/
  6. recipes/
  7. scripts/
  8. .editorconfig
  9. .git-blame-ignore-revs
  10. .gitignore
  11. AUTHORS
  12. CRITICAL_OWNERS
  13. LICENSE
  14. OWNERS
  15. PATENTS
  16. pyproject.toml
  17. README.md
  18. recipes.py
README.md

Fuchsia Recipes

This repository contains recipes for Fuchsia.

A recipe is a Python script that runs a series of commands, using the recipe engine framework from the LUCI project. We use recipes to automatically check out, build, and test Fuchsia in continuous integration jobs. The commands the recipes use are very similar to the ones you would use as a developer to check out, build, and test Fuchsia in your local environment.

See go/fuchsia-recipe-docs for complete documentation and a guide for getting started with writing recipes.

Getting the code and setting up your environment

For everyday development

The recommended way to get the source code is with jiri. A recipe will not run without vpython and cipd, and using these recommended jiri manifests will ensure that you have these tools.

You can use the fuchsia infra Jiri manifest or the internal version (Googlers-only). Once that manifest is imported in your local jiri manifest, jiri update should download vpython and cipd into <JIRI ROOT>/fuchsia-infra/prebuilt/tools/. If you add that directory to your PATH, you should be good to go.

Quick changes

If you're just trying to make a single small change to in this repository and already have your local environment set up for recipe development (e.g. because you work with another recipes repository) you can simply clone this repository with git:

git clone https://fuchsia.googlesource.com/infra/recipes

Then it will be up to you to ensure that vpython and cipd are available in your PATH.

Code formatting

We format python code using Black, an open-source Python autoformatter. It should be in your PATH if you followed the instructions for setting up your environment.

After committing recipe changes, you can format the files in your commit by running black . in your project root.

Many editors also have a setting to run Black automatically whenever you save a Python file (or on a keyboard shortcut). For VS Code, add the following to your workspace settings.json to make your editor compatible with Black and turn on auto-formatting on save:

{
    "python.formatting.provider": "black",
    "python.formatting.blackPath": "<absolute path to the black executable>",
    "[python]": {
        "editor.formatOnSave": true,
        "editor.rulers": [88], // Black enforces a line length of 88 characters.
    },
    ...
}