Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: grpc/grpc-go
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v1.41.1
Choose a base ref
...
head repository: grpc/grpc-go
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v1.42.0
Choose a head ref

Commits on Sep 21, 2021

  1. Copy the full SHA
    616977c View commit details
  2. transport: fix log spam from Server Authentication Handshake errors (#…

    …4798)
    
    * transport: fix log spam from Server Authentication Handshake errors
    zasweq authored Sep 21, 2021
    Copy the full SHA
    606403d View commit details

Commits on Sep 22, 2021

  1. Copy the full SHA
    1f12bf4 View commit details
  2. xds: Added validations for HCM to support xDS RBAC Filter (#4786)

    * xds: Added validations for HCM to support xDS RBAC Filter
    zasweq authored Sep 22, 2021
    Copy the full SHA
    458ea76 View commit details
  3. Copy the full SHA
    e6246c2 View commit details
  4. Copy the full SHA
    d623acc View commit details
  5. Copy the full SHA
    32cd3d6 View commit details
  6. Copy the full SHA
    d7208f0 View commit details

Commits on Sep 23, 2021

  1. Copy the full SHA
    83a3461 View commit details
  2. Copy the full SHA
    78d3aa8 View commit details
  3. Copy the full SHA
    6ff68b4 View commit details

Commits on Sep 24, 2021

  1. Copy the full SHA
    11437f6 View commit details

Commits on Sep 27, 2021

  1. transport: logic specified in A41 to support RBAC xDS HTTP Filter (#4803

    )
    
    * transport: logic specified in A41 to support RBAC xDS HTTP Filter
    zasweq authored Sep 27, 2021
    Copy the full SHA
    689f7b1 View commit details
  2. xds: Small changes at xDS RBAC Layer (#4815)

    * xds: Small changes at xDS RBAC Layer
    zasweq authored Sep 27, 2021
    Copy the full SHA
    4555155 View commit details
  3. Copy the full SHA
    710419d View commit details

Commits on Sep 28, 2021

  1. Copy the full SHA
    0892721 View commit details
  2. Copy the full SHA
    75f1d4b View commit details
  3. xds: Small RBAC Changes defined in A41 (#4818)

    * xds: Small RBAC Changes defined in A41
    zasweq authored Sep 28, 2021
    Copy the full SHA
    34df1b4 View commit details
  4. Copy the full SHA
    e6d0d28 View commit details

Commits on Sep 29, 2021

  1. Copy the full SHA
    adb21c4 View commit details

Commits on Sep 30, 2021

  1. Copy the full SHA
    2ae5ac1 View commit details
  2. Copy the full SHA
    127c052 View commit details

Commits on Oct 1, 2021

  1. Copy the full SHA
    69e1b54 View commit details
  2. Copy the full SHA
    b9f6253 View commit details
  3. Copy the full SHA
    0997020 View commit details

Commits on Oct 4, 2021

  1. Copy the full SHA
    f068a13 View commit details
  2. Copy the full SHA
    f2974e7 View commit details
  3. Copy the full SHA
    02da625 View commit details

Commits on Oct 5, 2021

  1. Copy the full SHA
    ee479e6 View commit details
  2. Copy the full SHA
    4bd9995 View commit details

Commits on Oct 6, 2021

  1. Rename env var (#4849)

    Rename env var
    zasweq authored Oct 6, 2021
    Copy the full SHA
    d16cfed View commit details
  2. Added imports for HTTP Filters (#4850)

    Added imports for HTTP Filters
    zasweq authored Oct 6, 2021
    Copy the full SHA
    404d8fd View commit details

Commits on Oct 7, 2021

  1. Copy the full SHA
    b9d7c74 View commit details
  2. Copy the full SHA
    524d10c View commit details

Commits on Oct 8, 2021

  1. Added logs to rbac (#4853)

    Added logs to rbac
    zasweq authored Oct 8, 2021
    Copy the full SHA
    03ca7b7 View commit details

Commits on Oct 9, 2021

  1. authz: create file watcher interceptor for gRPC SDK API (#4760)

    * authz: create file watcher interceptor for gRPC SDK API
    ashithasantosh authored Oct 9, 2021
    Copy the full SHA
    b99d104 View commit details

Commits on Oct 11, 2021

  1. Copy the full SHA
    49f6388 View commit details
  2. Copy the full SHA
    6c56e21 View commit details
  3. 1
    Copy the full SHA
    ea41fbf View commit details
  4. Copy the full SHA
    2fe7118 View commit details

Commits on Oct 13, 2021

  1. Copy the full SHA
    45097a8 View commit details

Commits on Oct 14, 2021

  1. Copy the full SHA
    aaff9e7 View commit details
  2. Copy the full SHA
    3bae5f5 View commit details

Commits on Oct 15, 2021

  1. Copy the full SHA
    7e5fcc6 View commit details
  2. Copy the full SHA
    3db1cb0 View commit details
  3. Copy the full SHA
    36d8757 View commit details
  4. Copy the full SHA
    d590071 View commit details
  5. xds: Make regex matchers match on full string, not just partial match (

    …#4875)
    
    * xds: Make regex matchers match on full string, not just partial match
    zasweq authored Oct 15, 2021
    Copy the full SHA
    4757d02 View commit details

Commits on Oct 18, 2021

  1. Copy the full SHA
    3d9e9c4 View commit details
  2. Copy the full SHA
    01ed648 View commit details
Showing with 6,592 additions and 2,725 deletions.
  1. +1 −3 .github/workflows/codeql-analysis.yml
  2. +3 −0 .github/workflows/testing.yml
  3. +1 −0 admin/admin.go
  4. +49 −29 attributes/attributes.go
  5. +42 −12 attributes/attributes_test.go
  6. +13 −7 authz/rbac_translator.go
  7. +26 −0 authz/rbac_translator_test.go
  8. +457 −43 authz/sdk_end2end_test.go
  9. +97 −0 authz/sdk_server_interceptors.go
  10. +70 −5 authz/sdk_server_interceptors_test.go
  11. +18 −47 balancer/base/balancer.go
  12. +0 −28 balancer/base/balancer_test.go
  13. +29 −3 balancer/grpclb/grpclb.go
  14. +1 −0 balancer/grpclb/grpclb_config.go
  15. +28 −12 balancer/grpclb/grpclb_config_test.go
  16. +48 −7 balancer/grpclb/grpclb_remote_balancer.go
  17. +408 −277 balancer/grpclb/grpclb_test.go
  18. +13 −12 balancer/grpclb/grpclb_test_util_test.go
  19. +1 −1 balancer/grpclb/state/state.go
  20. +2 −2 balancer/rls/internal/client.go
  21. +2 −2 balancer/rls/internal/client_test.go
  22. +116 −146 balancer/rls/internal/config.go
  23. +66 −91 balancer/rls/internal/config_test.go
  24. +52 −70 balancer/rls/internal/proto/grpc_lookup_v1/rls.pb.go
  25. +51 −33 balancer/roundrobin/roundrobin_test.go
  26. +8 −2 balancer/weightedroundrobin/weightedroundrobin.go
  27. +1 −1 balancer/weightedroundrobin/{weightedwoundrobin_test.go → weightedroundrobin_test.go}
  28. +4 −0 channelz/service/service.go
  29. +141 −40 clientconn.go
  30. +134 −0 clientconn_authority_test.go
  31. +200 −0 clientconn_parsed_target_test.go
  32. +8 −58 clientconn_test.go
  33. +12 −3 credentials/credentials.go
  34. +37 −31 credentials/google/google.go
  35. +4 −3 credentials/google/google_test.go
  36. +4 −3 credentials/google/xds.go
  37. +11 −16 dialoptions.go
  38. +3 −0 examples/examples_test.sh
  39. +2 −2 examples/features/load_balancing/client/main.go
  40. +29 −0 examples/features/unix_abstract/README.md
  41. +68 −0 examples/features/unix_abstract/client/main.go
  42. +58 −0 examples/features/unix_abstract/server/main.go
  43. +5 −3 examples/go.sum
  44. +2 −1 go.mod
  45. +5 −2 go.sum
  46. +62 −24 grpclog/loggerv2.go
  47. +2 −2 grpclog/loggerv2_test.go
  48. +9 −1 internal/credentials/xds/handshake_info.go
  49. +3 −2 internal/envconfig/envconfig.go
  50. +20 −0 internal/grpcutil/grpcutil.go
  51. +28 −0 internal/grpcutil/regex.go
  52. +60 −0 internal/grpcutil/regex_test.go
  53. +0 −89 internal/grpcutil/target.go
  54. +0 −114 internal/grpcutil/target_test.go
  55. +22 −4 internal/hierarchy/hierarchy.go
  56. +26 −26 internal/hierarchy/hierarchy_test.go
  57. +27 −3 internal/metadata/metadata.go
  58. +2 −2 internal/metadata/metadata_test.go
  59. +1 −1 internal/resolver/config_selector.go
  60. +11 −1 internal/resolver/unix/unix.go
  61. +6 −2 internal/transport/controlbuf.go
  62. +34 −27 internal/transport/http2_client.go
  63. +51 −8 internal/transport/http2_server.go
  64. +1 −1 internal/transport/networktype/networktype.go
  65. +273 −63 internal/transport/transport_test.go
  66. +5 −3 internal/xds/env/env.go
  67. +35 −45 internal/xds/matcher/matcher_header.go
  68. +168 −32 internal/xds/matcher/matcher_header_test.go
  69. +2 −1 internal/xds/matcher/string_matcher.go
  70. +6 −0 internal/xds/matcher/string_matcher_test.go
  71. +44 −37 internal/xds/rbac/matchers.go
  72. +18 −3 internal/xds/rbac/rbac_engine.go
  73. +100 −4 internal/xds/rbac/rbac_engine_test.go
  74. +1 −1 internal/xds_handshake_cluster.go
  75. +0 −1 interop/client/client.go
  76. +1 −0 interop/xds/client/Dockerfile
  77. +1 −0 interop/xds/server/Dockerfile
  78. +11 −6 interop/xds/server/server.go
  79. +1 −1 picker_wrapper.go
  80. +109 −0 resolver/map.go
  81. +142 −0 resolver/map_test.go
  82. +41 −15 resolver/resolver.go
  83. +33 −0 resolver/resolver_test.go
  84. +0 −33 resolver_conn_wrapper_test.go
  85. +45 −26 security/advancedtls/advancedtls.go
  86. +2 −2 security/advancedtls/advancedtls_integration_test.go
  87. +35 −1 security/advancedtls/advancedtls_test.go
  88. +3 −1 security/advancedtls/examples/go.sum
  89. +3 −1 security/advancedtls/go.sum
  90. +30 −17 server.go
  91. +10 −5 status/status.go
  92. +5 −4 test/authority_test.go
  93. +205 −4 test/end2end_test.go
  94. +8 −5 test/kokoro/xds_k8s.sh
  95. +0 −380 test/kokoro/xds_k8s_install_test_driver.sh
  96. +8 −5 test/kokoro/xds_url_map.sh
  97. +4 −11 test/retry_test.go
  98. +1 −1 version.go
  99. +29 −119 xds/csds/csds.go
  100. +173 −316 xds/csds/csds_test.go
  101. +1 −1 xds/internal/balancer/balancergroup/balancergroup.go
  102. +1 −2 xds/internal/balancer/balancergroup/balancergroup_test.go
  103. +9 −11 xds/internal/balancer/clusterimpl/picker.go
  104. +8 −1 xds/internal/balancer/clustermanager/balancerstateaggregator.go
  105. +83 −18 xds/internal/balancer/clustermanager/clustermanager_test.go
  106. +1 −1 xds/internal/balancer/orca/orca.go
  107. +1 −1 xds/internal/balancer/orca/orca_test.go
  108. +1 −0 xds/internal/balancer/priority/balancer_priority.go
  109. +81 −0 xds/internal/balancer/priority/balancer_test.go
  110. +7 −1 xds/internal/balancer/weightedtarget/weightedaggregator/aggregator.go
  111. +61 −0 xds/internal/balancer/weightedtarget/weightedtarget_test.go
  112. +7 −6 xds/internal/httpfilter/httpfilter.go
  113. +31 −1 xds/internal/httpfilter/rbac/rbac.go
  114. +11 −2 xds/internal/internal.go
  115. +19 −0 xds/internal/test/e2e/README.md
  116. +62 −0 xds/internal/test/e2e/controlplane.go
  117. +178 −0 xds/internal/test/e2e/e2e.go
  118. +257 −0 xds/internal/test/e2e/e2e_test.go
  119. +36 −0 xds/internal/test/e2e/e2e_utils.go
  120. +6 −0 xds/internal/test/e2e/run.sh
  121. +372 −0 xds/internal/test/xds_security_config_nack_test.go
  122. +192 −28 xds/internal/test/xds_server_integration_test.go
  123. +114 −11 xds/internal/test/xds_server_serving_mode_test.go
  124. +17 −13 xds/internal/testutils/e2e/clientresources.go
  125. +1 −1 xds/internal/xdsclient/attributes.go
  126. +32 −13 xds/internal/xdsclient/callback.go
  127. +6 −2 xds/internal/xdsclient/cds_test.go
  128. +67 −0 xds/internal/xdsclient/client.go
  129. +8 −5 xds/internal/xdsclient/client_test.go
  130. +6 −2 xds/internal/xdsclient/eds_test.go
  131. +12 −0 xds/internal/xdsclient/filter_chain.go
  132. +210 −19 xds/internal/xdsclient/lds_test.go
  133. +7 −9 xds/internal/xdsclient/matcher.go
  134. +3 −1 xds/internal/xdsclient/matcher_path.go
  135. +2 −0 xds/internal/xdsclient/matcher_path_test.go
  136. +6 −6 xds/internal/xdsclient/matcher_test.go
  137. +30 −7 xds/internal/xdsclient/rds_test.go
  138. +32 −10 xds/internal/xdsclient/v2/client.go
  139. +1 −1 xds/internal/xdsclient/v2/client_test.go
  140. +32 −10 xds/internal/xdsclient/v3/client.go
  141. +37 −19 xds/internal/xdsclient/watchers_cluster_test.go
  142. +31 −16 xds/internal/xdsclient/watchers_endpoints_test.go
  143. +160 −19 xds/internal/xdsclient/watchers_listener_test.go
  144. +32 −16 xds/internal/xdsclient/watchers_route_test.go
  145. +72 −27 xds/internal/xdsclient/xds.go
  146. +2 −0 xds/xds.go
4 changes: 1 addition & 3 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
@@ -3,9 +3,6 @@ name: "CodeQL"
on:
push:
branches: [ master ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ master ]
schedule:
- cron: '24 20 * * 3'

@@ -19,6 +16,7 @@ jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
timeout-minutes: 30

strategy:
fail-fast: false
3 changes: 3 additions & 0 deletions .github/workflows/testing.yml
Original file line number Diff line number Diff line change
@@ -18,6 +18,7 @@ jobs:
# Check generated protos match their source repos (optional for PRs).
vet-proto:
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
# Setup the environment.
- name: Setup Go
@@ -37,6 +38,7 @@ jobs:
env:
VET_SKIP_PROTO: 1
runs-on: ubuntu-latest
timeout-minutes: 20
strategy:
matrix:
include:
@@ -112,3 +114,4 @@ jobs:
examples/examples_test.sh
security/advancedtls/examples/examples_test.sh
interop/interop_test.sh
xds/internal/test/e2e/run.sh
1 change: 1 addition & 0 deletions admin/admin.go
Original file line number Diff line number Diff line change
@@ -20,6 +20,7 @@
// administration services to a gRPC server. The services registered are:
//
// - Channelz: https://github.com/grpc/proposal/blob/master/A14-channelz.md
//
// - CSDS: https://github.com/grpc/proposal/blob/master/A40-csds-support.md
//
// Experimental
78 changes: 49 additions & 29 deletions attributes/attributes.go
Original file line number Diff line number Diff line change
@@ -25,55 +25,75 @@
// later release.
package attributes

import "fmt"

// Attributes is an immutable struct for storing and retrieving generic
// key/value pairs. Keys must be hashable, and users should define their own
// types for keys.
// types for keys. Values should not be modified after they are added to an
// Attributes or if they were received from one. If values implement 'Equal(o
// interface{}) bool', it will be called by (*Attributes).Equal to determine
// whether two values with the same key should be considered equal.
type Attributes struct {
m map[interface{}]interface{}
}

// New returns a new Attributes containing all key/value pairs in kvs. If the
// same key appears multiple times, the last value overwrites all previous
// values for that key. Panics if len(kvs) is not even.
func New(kvs ...interface{}) *Attributes {
if len(kvs)%2 != 0 {
panic(fmt.Sprintf("attributes.New called with unexpected input: len(kvs) = %v", len(kvs)))
}
a := &Attributes{m: make(map[interface{}]interface{}, len(kvs)/2)}
for i := 0; i < len(kvs)/2; i++ {
a.m[kvs[i*2]] = kvs[i*2+1]
}
return a
// New returns a new Attributes containing the key/value pair.
func New(key, value interface{}) *Attributes {
return &Attributes{m: map[interface{}]interface{}{key: value}}
}

// WithValues returns a new Attributes containing all key/value pairs in a and
// kvs. Panics if len(kvs) is not even. If the same key appears multiple
// times, the last value overwrites all previous values for that key. To
// remove an existing key, use a nil value.
func (a *Attributes) WithValues(kvs ...interface{}) *Attributes {
// WithValue returns a new Attributes containing the previous keys and values
// and the new key/value pair. If the same key appears multiple times, the
// last value overwrites all previous values for that key. To remove an
// existing key, use a nil value. value should not be modified later.
func (a *Attributes) WithValue(key, value interface{}) *Attributes {
if a == nil {
return New(kvs...)
return New(key, value)
}
if len(kvs)%2 != 0 {
panic(fmt.Sprintf("attributes.New called with unexpected input: len(kvs) = %v", len(kvs)))
}
n := &Attributes{m: make(map[interface{}]interface{}, len(a.m)+len(kvs)/2)}
n := &Attributes{m: make(map[interface{}]interface{}, len(a.m)+1)}
for k, v := range a.m {
n.m[k] = v
}
for i := 0; i < len(kvs)/2; i++ {
n.m[kvs[i*2]] = kvs[i*2+1]
}
n.m[key] = value
return n
}

// Value returns the value associated with these attributes for key, or nil if
// no value is associated with key.
// no value is associated with key. The returned value should not be modified.
func (a *Attributes) Value(key interface{}) interface{} {
if a == nil {
return nil
}
return a.m[key]
}

// Equal returns whether a and o are equivalent. If 'Equal(o interface{})
// bool' is implemented for a value in the attributes, it is called to
// determine if the value matches the one stored in the other attributes. If
// Equal is not implemented, standard equality is used to determine if the two
// values are equal.
func (a *Attributes) Equal(o *Attributes) bool {
if a == nil && o == nil {
return true
}
if a == nil || o == nil {
return false
}
if len(a.m) != len(o.m) {
return false
}
for k, v := range a.m {
ov, ok := o.m[k]
if !ok {
// o missing element of a
return false
}
if eq, ok := v.(interface{ Equal(o interface{}) bool }); ok {
if !eq.Equal(ov) {
return false
}
} else if v != ov {
// Fallback to a standard equality check if Value is unimplemented.
return false
}
}
return true
}
54 changes: 42 additions & 12 deletions attributes/attributes_test.go
Original file line number Diff line number Diff line change
@@ -20,41 +20,71 @@ package attributes_test

import (
"fmt"
"reflect"
"testing"

"google.golang.org/grpc/attributes"
)

type stringVal struct {
s string
}

func (s stringVal) Equal(o interface{}) bool {
os, ok := o.(stringVal)
return ok && s.s == os.s
}

func ExampleAttributes() {
type keyOne struct{}
type keyTwo struct{}
a := attributes.New(keyOne{}, 1, keyTwo{}, "two")
a := attributes.New(keyOne{}, 1).WithValue(keyTwo{}, stringVal{s: "two"})
fmt.Println("Key one:", a.Value(keyOne{}))
fmt.Println("Key two:", a.Value(keyTwo{}))
// Output:
// Key one: 1
// Key two: two
// Key two: {two}
}

func ExampleAttributes_WithValues() {
func ExampleAttributes_WithValue() {
type keyOne struct{}
type keyTwo struct{}
a := attributes.New(keyOne{}, 1)
a = a.WithValues(keyTwo{}, "two")
a = a.WithValue(keyTwo{}, stringVal{s: "two"})
fmt.Println("Key one:", a.Value(keyOne{}))
fmt.Println("Key two:", a.Value(keyTwo{}))
// Output:
// Key one: 1
// Key two: two
// Key two: {two}
}

// Test that two attributes with the same content are `reflect.DeepEqual`.
func TestDeepEqual(t *testing.T) {
// Test that two attributes with the same content are Equal.
func TestEqual(t *testing.T) {
type keyOne struct{}
a1 := attributes.New(keyOne{}, 1)
a2 := attributes.New(keyOne{}, 1)
if !reflect.DeepEqual(a1, a2) {
t.Fatalf("reflect.DeepEqual(%+v, %+v), want true, got false", a1, a2)
type keyTwo struct{}
a1 := attributes.New(keyOne{}, 1).WithValue(keyTwo{}, stringVal{s: "two"})
a2 := attributes.New(keyOne{}, 1).WithValue(keyTwo{}, stringVal{s: "two"})
if !a1.Equal(a2) {
t.Fatalf("%+v.Equals(%+v) = false; want true", a1, a2)
}
if !a2.Equal(a1) {
t.Fatalf("%+v.Equals(%+v) = false; want true", a2, a1)
}
}

// Test that two attributes with different content are not Equal.
func TestNotEqual(t *testing.T) {
type keyOne struct{}
type keyTwo struct{}
a1 := attributes.New(keyOne{}, 1).WithValue(keyTwo{}, stringVal{s: "two"})
a2 := attributes.New(keyOne{}, 2).WithValue(keyTwo{}, stringVal{s: "two"})
a3 := attributes.New(keyOne{}, 1).WithValue(keyTwo{}, stringVal{s: "one"})
if a1.Equal(a2) {
t.Fatalf("%+v.Equals(%+v) = true; want false", a1, a2)
}
if a2.Equal(a1) {
t.Fatalf("%+v.Equals(%+v) = true; want false", a2, a1)
}
if a3.Equal(a1) {
t.Fatalf("%+v.Equals(%+v) = true; want false", a3, a1)
}
}
20 changes: 13 additions & 7 deletions authz/rbac_translator.go
Original file line number Diff line number Diff line change
@@ -155,14 +155,20 @@ func parsePrincipalNames(principalNames []string) []*v3rbacpb.Principal {
}

func parsePeer(source peer) (*v3rbacpb.Principal, error) {
if len(source.Principals) > 0 {
return principalOr(parsePrincipalNames(source.Principals)), nil
if source.Principals == nil {
return &v3rbacpb.Principal{
Identifier: &v3rbacpb.Principal_Any{
Any: true,
},
}, nil
}
return &v3rbacpb.Principal{
Identifier: &v3rbacpb.Principal_Any{
Any: true,
},
}, nil
if len(source.Principals) == 0 {
return &v3rbacpb.Principal{
Identifier: &v3rbacpb.Principal_Authenticated_{
Authenticated: &v3rbacpb.Principal_Authenticated{},
}}, nil
}
return principalOr(parsePrincipalNames(source.Principals)), nil
}

func parsePaths(paths []string) []*v3rbacpb.Permission {
26 changes: 26 additions & 0 deletions authz/rbac_translator_test.go
Original file line number Diff line number Diff line change
@@ -205,6 +205,32 @@ func TestTranslatePolicy(t *testing.T) {
},
},
},
"empty principal field": {
authzPolicy: `{
"name": "authz",
"allow_rules": [{
"name": "allow_authenticated",
"source": {"principals":[]}
}]
}`,
wantPolicies: []*v3rbacpb.RBAC{
{
Action: v3rbacpb.RBAC_ALLOW,
Policies: map[string]*v3rbacpb.Policy{
"authz_allow_authenticated": {
Principals: []*v3rbacpb.Principal{
{Identifier: &v3rbacpb.Principal_Authenticated_{
Authenticated: &v3rbacpb.Principal_Authenticated{},
}},
},
Permissions: []*v3rbacpb.Permission{
{Rule: &v3rbacpb.Permission_Any{Any: true}},
},
},
},
},
},
},
"unknown field": {
authzPolicy: `{"random": 123}`,
wantErr: "failed to unmarshal policy",
Loading