Merge pull request #8771 from amenzhinsky/fix-grpc-use-tls-mapping

Fix GRPCUseTLS flag HTTP API mapping
This commit is contained in:
Daniel Nephin 2020-10-21 18:37:11 -04:00 committed by GitHub
commit 1e1f963064
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 70 additions and 0 deletions

4
.changelog/8771.txt Normal file
View File

@ -0,0 +1,4 @@
```release-note:bug
api: Fixed a bug where the Check.GRPCUseTLS field could not be set using snake case.
```

View File

@ -282,6 +282,7 @@ var translateCheckTypeTCs = [][]translateKeyTestCase{
translateScriptArgsTCs,
translateDeregisterTCs,
translateDockerTCs,
translateGRPCUseTLSTCs,
translateTLSTCs,
translateServiceIDTCs,
}
@ -560,6 +561,63 @@ var translateTLSTCs = []translateKeyTestCase{
},
}
// GRPCUseTLS: bool
func grpcUseTLSEqFn(out interface{}, want interface{}) error {
var got interface{}
switch v := out.(type) {
case structs.CheckDefinition:
got = v.GRPCUseTLS
case *structs.CheckDefinition:
got = v.GRPCUseTLS
case structs.CheckType:
got = v.GRPCUseTLS
case *structs.CheckType:
got = v.GRPCUseTLS
case structs.HealthCheckDefinition:
got = v.GRPCUseTLS
case *structs.HealthCheckDefinition:
got = v.GRPCUseTLS
default:
panic(fmt.Sprintf("unexpected type %T", out))
}
if got != want {
return fmt.Errorf("expected GRPCUseTLS to be %v, got %v", want, got)
}
return nil
}
var grpcUseTLSFields = []string{`"GRPCUseTLS": %s`, `"grpc_use_tls": %s`}
var translateGRPCUseTLSTCs = []translateKeyTestCase{
{
desc: "GRPCUseTLS: both set",
in: []interface{}{"true", "false"},
want: true,
jsonFmtStr: "{" + strings.Join(grpcUseTLSFields, ",") + "}",
equalityFn: grpcUseTLSEqFn,
},
{
desc: "GRPCUseTLS: first set",
in: []interface{}{`true`},
want: true,
jsonFmtStr: "{" + grpcUseTLSFields[0] + "}",
equalityFn: grpcUseTLSEqFn,
},
{
desc: "GRPCUseTLS: second set",
in: []interface{}{`true`},
want: true,
jsonFmtStr: "{" + grpcUseTLSFields[1] + "}",
equalityFn: grpcUseTLSEqFn,
},
{
desc: "GRPCUseTLS: neither set",
in: []interface{}{},
want: false, // zero value
jsonFmtStr: "{}",
equalityFn: grpcUseTLSEqFn,
},
}
// ServiceID: string
func serviceIDEqFn(out interface{}, want interface{}) error {
var got interface{}

View File

@ -63,6 +63,7 @@ func (t *CheckDefinition) UnmarshalJSON(data []byte) (err error) {
DeregisterCriticalServiceAfterSnake interface{} `json:"deregister_critical_service_after"`
DockerContainerIDSnake string `json:"docker_container_id"`
TLSSkipVerifySnake bool `json:"tls_skip_verify"`
GRPCUseTLSSnake bool `json:"grpc_use_tls"`
ServiceIDSnake string `json:"service_id"`
*Alias
@ -89,6 +90,9 @@ func (t *CheckDefinition) UnmarshalJSON(data []byte) (err error) {
if aux.TLSSkipVerifySnake {
t.TLSSkipVerify = aux.TLSSkipVerifySnake
}
if aux.GRPCUseTLSSnake {
t.GRPCUseTLS = aux.GRPCUseTLSSnake
}
if t.ServiceID == "" {
t.ServiceID = aux.ServiceIDSnake
}

View File

@ -76,6 +76,7 @@ func (t *CheckType) UnmarshalJSON(data []byte) (err error) {
DeregisterCriticalServiceAfterSnake interface{} `json:"deregister_critical_service_after"`
DockerContainerIDSnake string `json:"docker_container_id"`
TLSSkipVerifySnake bool `json:"tls_skip_verify"`
GRPCUseTLSSnake bool `json:"grpc_use_tls"`
// These are going to be ignored but since we are disallowing unknown fields
// during parsing we have to be explicit about parsing but not using these.
@ -104,6 +105,9 @@ func (t *CheckType) UnmarshalJSON(data []byte) (err error) {
if aux.TLSSkipVerifySnake {
t.TLSSkipVerify = aux.TLSSkipVerifySnake
}
if aux.GRPCUseTLSSnake {
t.GRPCUseTLS = aux.GRPCUseTLSSnake
}
if aux.Interval != nil {
switch v := aux.Interval.(type) {