[ftt] Add "from the top" replacement for Convey suites.

This implements a semantically-equivalent variant of the goconvey
"Convey" construct, except that:
  * This uses go testing's `t.Run` subtest mechanism
  * No usage of `gls` - no hidden state.
  * Fully compatible with all assertion libraries using `testing.TB`
    or `*testing.T`.
  * Supports parallel execution of sub-tests (goconvey does not).

This will allow us to programmatically rewrite our tests to drop the
dependency on goconvey (and thus gls) without having to manually touch
everything.

After dropping the goconvey dependency, we will be in a position
where tests may or may not be written with `ftt`, and it will be easy
to adapt them to/from this style vs plain tests just directly using
`t.Run()` if desired, because it will fully decouple the assertions
from the 'layout' of the tests.

R=gregorynisbet@google.com

Change-Id: Iab9cdc80a9fc90bccfe902a2bcfa2b7386f9ae8a
Bug: 319730573
Reviewed-on: https://chromium-review.googlesource.com/c/infra/luci/luci-go/+/4917850
Commit-Queue: Robbie Iannucci <iannucci@chromium.org>
Reviewed-by: Gregory Nisbet <gregorynisbet@google.com>
Auto-Submit: Robbie Iannucci <iannucci@chromium.org>
8 files changed
tree: 347d250b0eb8e5118469b646c907cff9c0e96e98
  1. analysis/
  2. appengine/
  3. auth/
  4. auth_service/
  5. bisection/
  6. build/
  7. buildbucket/
  8. casviewer/
  9. cipd/
  10. cipkg/
  11. client/
  12. common/
  13. config/
  14. config_service/
  15. cv/
  16. deploy/
  17. examples/
  18. gae/
  19. gce/
  20. grpc/
  21. hardcoded/
  22. led/
  23. logdog/
  24. luci_notify/
  25. lucicfg/
  26. lucictx/
  27. luciexe/
  28. mailer/
  29. milo/
  30. mmutex/
  31. provenance/
  32. resultdb/
  33. scheduler/
  34. scripts/
  35. server/
  36. standalone/
  37. starlark/
  38. swarming/
  39. teams/
  40. third_party/
  41. tokenserver/
  42. tools/
  43. tree_status/
  44. vpython/
  45. web/
  46. .gitallowed
  47. .gitattributes
  48. .gitignore
  49. .go-lintable
  50. AUTHORS
  51. codereview.settings
  52. CONTRIBUTING.md
  53. CONTRIBUTORS
  54. go.mod
  55. go.sum
  56. LICENSE
  57. OWNERS
  58. PRESUBMIT.py
  59. README.md
  60. tools.go
  61. WATCHLISTS
README.md

luci-go: LUCI services and tools in Go

GoReference

Installing

LUCI Go code is meant to be worked on from an Chromium infra.git checkout, which enforces packages versions and Go toolchain version. First get fetch via depot_tools.git then run:

fetch infra
cd infra/go
eval `./env.py`
cd src/go.chromium.org/luci

It is now possible to directly install tools with go install:

go install go.chromium.org/luci/auth/client/cmd/...@latest
go install go.chromium.org/luci/buildbucket/cmd/...@latest
go install go.chromium.org/luci/cipd/client/cmd/...@latest
go install go.chromium.org/luci/client/cmd/...@latest
go install go.chromium.org/luci/cv/cmd/...@latest
go install go.chromium.org/luci/gce/cmd/...@latest
go install go.chromium.org/luci/grpc/cmd/...@latest
go install go.chromium.org/luci/logdog/client/cmd/...@latest
go install go.chromium.org/luci/luci_notify/cmd/...@latest
go install go.chromium.org/luci/lucicfg/cmd/...@latest
go install go.chromium.org/luci/luciexe/legacy/cmd/...@latest
go install go.chromium.org/luci/mailer/cmd/...@latest
go install go.chromium.org/luci/mmutex/cmd/...@latest
go install go.chromium.org/luci/resultdb/cmd/...@latest
go install go.chromium.org/luci/server/cmd/...@latest
go install go.chromium.org/luci/swarming/cmd/...@latest
go install go.chromium.org/luci/tokenserver/cmd/...@latest
go install go.chromium.org/luci/tools/cmd/...@latest

Contributing

Contributing uses the same flow as Chromium contributions.