regression tests for existing agent/ decoding behavior (#6624)
tests for existing JSON decoding behavior
This commit is contained in:
parent
136a7a2fa8
commit
911bb78296
|
@ -757,75 +757,8 @@ func (s *HTTPServer) AgentHealthServiceByName(resp http.ResponseWriter, req *htt
|
|||
func (s *HTTPServer) AgentRegisterService(resp http.ResponseWriter, req *http.Request) (interface{}, error) {
|
||||
var args structs.ServiceDefinition
|
||||
// Fixup the type decode of TTL or Interval if a check if provided.
|
||||
decodeCB := func(raw interface{}) error {
|
||||
rawMap, ok := raw.(map[string]interface{})
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
|
||||
// see https://github.com/hashicorp/consul/pull/3557 why we need this
|
||||
// and why we should get rid of it.
|
||||
lib.TranslateKeys(rawMap, map[string]string{
|
||||
"enable_tag_override": "EnableTagOverride",
|
||||
// Proxy Upstreams
|
||||
"destination_name": "DestinationName",
|
||||
"destination_type": "DestinationType",
|
||||
"destination_namespace": "DestinationNamespace",
|
||||
"local_bind_port": "LocalBindPort",
|
||||
"local_bind_address": "LocalBindAddress",
|
||||
// Proxy Config
|
||||
"destination_service_name": "DestinationServiceName",
|
||||
"destination_service_id": "DestinationServiceID",
|
||||
"local_service_port": "LocalServicePort",
|
||||
"local_service_address": "LocalServiceAddress",
|
||||
// SidecarService
|
||||
"sidecar_service": "SidecarService",
|
||||
// Expose Config
|
||||
"local_path_port": "LocalPathPort",
|
||||
"listener_port": "ListenerPort",
|
||||
|
||||
// DON'T Recurse into these opaque config maps or we might mangle user's
|
||||
// keys. Note empty canonical is a special sentinel to prevent recursion.
|
||||
"Meta": "",
|
||||
|
||||
"tagged_addresses": "TaggedAddresses",
|
||||
|
||||
// upstreams is an array but this prevents recursion into config field of
|
||||
// any item in the array.
|
||||
"Proxy.Config": "",
|
||||
"Proxy.Upstreams.Config": "",
|
||||
"Connect.Proxy.Config": "",
|
||||
"Connect.Proxy.Upstreams.Config": "",
|
||||
|
||||
// Same exceptions as above, but for a nested sidecar_service note we use
|
||||
// the canonical form SidecarService since that is translated by the time
|
||||
// the lookup here happens.
|
||||
"Connect.SidecarService.Meta": "",
|
||||
"Connect.SidecarService.Proxy.Config": "",
|
||||
"Connect.SidecarService.Proxy.Upstreams.config": "",
|
||||
})
|
||||
|
||||
for k, v := range rawMap {
|
||||
switch strings.ToLower(k) {
|
||||
case "check":
|
||||
if err := FixupCheckType(v); err != nil {
|
||||
return err
|
||||
}
|
||||
case "checks":
|
||||
chkTypes, ok := v.([]interface{})
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
for _, chkType := range chkTypes {
|
||||
if err := FixupCheckType(chkType); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
if err := decodeBody(req, &args, decodeCB); err != nil {
|
||||
if err := decodeBody(req, &args, registerServiceDecodeCB); err != nil {
|
||||
resp.WriteHeader(http.StatusBadRequest)
|
||||
fmt.Fprintf(resp, "Request decode failed: %v", err)
|
||||
return nil, nil
|
||||
|
@ -961,6 +894,76 @@ func (s *HTTPServer) AgentRegisterService(resp http.ResponseWriter, req *http.Re
|
|||
return nil, nil
|
||||
}
|
||||
|
||||
// registerServiceDecodeCB is used in AgentRegisterService for request body decoding
|
||||
func registerServiceDecodeCB(raw interface{}) error {
|
||||
rawMap, ok := raw.(map[string]interface{})
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
|
||||
// see https://github.com/hashicorp/consul/pull/3557 why we need this
|
||||
// and why we should get rid of it.
|
||||
lib.TranslateKeys(rawMap, map[string]string{
|
||||
"enable_tag_override": "EnableTagOverride",
|
||||
// Proxy Upstreams
|
||||
"destination_name": "DestinationName", // string
|
||||
"destination_type": "DestinationType", // string
|
||||
"destination_namespace": "DestinationNamespace", // string
|
||||
"local_bind_port": "LocalBindPort", // int
|
||||
"local_bind_address": "LocalBindAddress", // string
|
||||
// Proxy Config
|
||||
"destination_service_name": "DestinationServiceName", // string (Proxy.)
|
||||
"destination_service_id": "DestinationServiceID", // string
|
||||
"local_service_port": "LocalServicePort", // int
|
||||
"local_service_address": "LocalServiceAddress", // string
|
||||
// SidecarService
|
||||
"sidecar_service": "SidecarService", // ServiceDefinition (Connect.)
|
||||
// Expose Config
|
||||
"local_path_port": "LocalPathPort", // int (Proxy.Expose.Paths.)
|
||||
"listener_port": "ListenerPort", // int
|
||||
|
||||
// DON'T Recurse into these opaque config maps or we might mangle user's
|
||||
// keys. Note empty canonical is a special sentinel to prevent recursion.
|
||||
"Meta": "",
|
||||
|
||||
"tagged_addresses": "TaggedAddresses", // map[string]structs.ServiceAddress{Address string; Port int}
|
||||
|
||||
// upstreams is an array but this prevents recursion into config field of
|
||||
// any item in the array.
|
||||
"Proxy.Config": "",
|
||||
"Proxy.Upstreams.Config": "",
|
||||
"Connect.Proxy.Config": "",
|
||||
"Connect.Proxy.Upstreams.Config": "",
|
||||
|
||||
// Same exceptions as above, but for a nested sidecar_service note we use
|
||||
// the canonical form SidecarService since that is translated by the time
|
||||
// the lookup here happens.
|
||||
"Connect.SidecarService.Meta": "",
|
||||
"Connect.SidecarService.Proxy.Config": "",
|
||||
"Connect.SidecarService.Proxy.Upstreams.config": "",
|
||||
})
|
||||
|
||||
for k, v := range rawMap {
|
||||
switch strings.ToLower(k) {
|
||||
case "check":
|
||||
if err := FixupCheckType(v); err != nil {
|
||||
return err
|
||||
}
|
||||
case "checks":
|
||||
chkTypes, ok := v.([]interface{})
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
for _, chkType := range chkTypes {
|
||||
if err := FixupCheckType(chkType); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *HTTPServer) AgentDeregisterService(resp http.ResponseWriter, req *http.Request) (interface{}, error) {
|
||||
serviceID := strings.TrimPrefix(req.URL.Path, "/v1/agent/service/deregister/")
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue