[post_process] Make failure output less noisy

If a test case has `api.post_process(StepFailure)` and it *doesn't*
fail, we currently get some pretty verbose and confusing output:

CHECK(FAIL):
  .recipe_deps/recipe_engine/recipe_engine/post_process.py:452 - StatusFailure()
    `check(('failure' in step_odict['$result']['failure']))`
      step_odict['$result'].keys(): ['name']
      raised exception: KeyError: 'failure'
  added recipes/some_recipe.py:123
    StatusFailure()

With this change it still won't be very clear, but it'll at least be
slightly less verbose and hopefully less confusing without the
`KeyError` line:

CHECK 'expected failure but recipe succeeded' (FAIL):
  .recipe_deps/recipe_engine/recipe_engine/post_process.py:452 - StatusFailure()
    `(not check('expected failure but recipe succeeded', ('failure' in result)))`
      result.keys(): ['name']
  added recipes/some_recipe.py:123
    StatusFailure()

Note that these error messages are inconsistent with the
`post_process()` documentation, which says that "hints should be written
as the ___ in the sentence 'check that ___.'":
https://chromium.googlesource.com/infra/luci/recipes-py/+/2438e081638a16b8de53752c5a78c807195ed186/recipe_engine/recipe_test_api.py#615
In this case, writing hints in that form yields very confusing error
messages, so I think it's a worthwhile tradeoff.

Change-Id: If6e5a5a1b7c098bd23d80d3a5c1193dbeb7eb8c0
Reviewed-on: https://chromium-review.googlesource.com/c/infra/luci/recipes-py/+/2144492
Commit-Queue: Oliver Newman <olivernewman@google.com>
Reviewed-by: Robbie Iannucci <iannucci@chromium.org>
1 file changed
tree: da3b8feb11d0c340a4e1d7510eb27c5d8be481f7
  1. doc/
  2. infra/
  3. misc/
  4. recipe_engine/
  5. recipe_modules/
  6. recipe_proto/
  7. recipes/
  8. unittests/
  9. .gitattributes
  10. .gitignore
  11. .style.yapf
  12. .vpython
  13. AUTHORS
  14. codereview.settings
  15. CONTRIBUTORS
  16. LICENSE
  17. OWNERS
  18. PRESUBMIT.py
  19. README.md
  20. README.recipes.md
  21. recipes.py
README.md

Recipes

Recipes are a domain-specific language (embedded in python) for specifying sequences of subprocess calls in a cross-platform and testable way.

They allow writing build flows which integrate with the rest of LUCI.

Documentation for the recipe engine (including this file!). Take a look at the user guide for some hints on how to get started. See the implementation details doc for more detailed implementation information about the recipe engine.

Contributing

  • Sign the Google CLA.
  • Make sure your user.email and user.name are configured in git config.

Run the following to setup the code review tool and create your first review:

# Get `depot_tools` in $PATH if you don't have it
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git $HOME/src/depot_tools
export PATH="$PATH:$HOME/src/depot_tools"

# Check out the recipe engine repo
git clone https://chromium.googlesource.com/infra/luci/recipes-py $HOME/src/recipes-py

# make your change
cd $HOME/src/recipes-py
git new-branch cool_feature
# hack hack
git commit -a -m "This is awesome"

# This will ask for your Google Account credentials.
git cl upload -s -r joe@example.com
# Wait for approval over email.
# Click "Submit to CQ" button or ask reviewer to do it for you.
# Wait for the change to be tested and landed automatically.

Use git cl help and git cl help <cmd> for more details.