[prpc] Add a test that covers existing field mask semantics.

This will be used to make sure we don't regress existing
fragile state of things during the refactoring.

The existing fragile state of things:
1. Without HackFixFieldMasksForJSON set field masks are
   supported only using {"path":[...]} syntax, but they
   still can include "advanced" masks like `a.*.b`.
2. With HackFixFieldMasksForJSON set field masks are supported
   using both object and string syntax and they can include
   "advanced" masks.

The goal of the refactoring would be to replace
HackFixFieldMasksForJSON with HackSupportForAdvancedFieldMasks
(or something like that), with following properties:

1. Without HackSupportForAdvancedFieldMasks set field masks
   are supported using object or string syntax, but they can't
   be "advanced" (not because we explicitly want to forbid this,
   but because protobuf v2 doesn't support them). In this mode
   no hacks are happening, we just use standard protobuf APIs.
2. Setting HackSupportForAdvancedFieldMasks will be equivalent
   to setting HackFixFieldMasksForJSON right now.

Then all current servers that set HackFixFieldMasksForJSON, but
don't actually support advanced field masks, will stop using
any hacks.

Few services that still need "advanced" field masks will keep using
the hack until their API is refactored to avoid using advanced field
masks.

R=iannucci@chromium.org, gregorynisbet@google.com
BUG=b/376137855

Change-Id: I863f03194e24bc47a5022f22b3685b5f77d9782f
Reviewed-on: https://chromium-review.googlesource.com/c/infra/luci/luci-go/+/5976922
Reviewed-by: Gregory Nisbet <gregorynisbet@google.com>
Commit-Queue: Vadim Shtayura <vadimsh@chromium.org>
1 file changed
tree: 4a4bd53f51b5fbd351699f500900730ac32c4e4a
  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. recipes_py/
  33. resultdb/
  34. scheduler/
  35. scripts/
  36. server/
  37. source_index/
  38. standalone/
  39. starlark/
  40. swarming/
  41. teams/
  42. third_party/
  43. tokenserver/
  44. tools/
  45. tree_status/
  46. vpython/
  47. web/
  48. .gitallowed
  49. .gitattributes
  50. .gitignore
  51. .go-lintable
  52. AUTHORS
  53. codereview.settings
  54. CONTRIBUTING.md
  55. CONTRIBUTORS
  56. go.mod
  57. go.sum
  58. LICENSE
  59. OWNERS
  60. PRESUBMIT.py
  61. README.md
  62. staticcheck.conf
  63. tools.go
  64. 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.