mirror of https://github.com/status-im/consul.git
Fix up tests broken by master merge; add proxy tests to services command (and fix it!); actually run the proxycfg.Manager
This commit is contained in:
parent
a28e4a33b2
commit
161482d2cd
|
@ -442,6 +442,11 @@ func (a *Agent) Start() error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
go func() {
|
||||||
|
if err := a.proxyConfig.Run(); err != nil {
|
||||||
|
a.logger.Printf("[ERR] Proxy Config Manager exited: %s", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
// Start watching for critical services to deregister, based on their
|
// Start watching for critical services to deregister, based on their
|
||||||
// checks.
|
// checks.
|
||||||
|
|
|
@ -352,6 +352,14 @@ func (s *HTTPServer) AgentService(resp http.ResponseWriter, req *http.Request) (
|
||||||
proxy = svc.Proxy.ToAPI()
|
proxy = svc.Proxy.ToAPI()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var weights api.AgentWeights
|
||||||
|
if svc.Weights != nil {
|
||||||
|
err := mapstructure.Decode(svc.Weights, &weights)
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Calculate the content hash over the response, minus the hash field
|
// Calculate the content hash over the response, minus the hash field
|
||||||
reply := &api.AgentService{
|
reply := &api.AgentService{
|
||||||
Kind: api.ServiceKind(svc.Kind),
|
Kind: api.ServiceKind(svc.Kind),
|
||||||
|
@ -362,6 +370,7 @@ func (s *HTTPServer) AgentService(resp http.ResponseWriter, req *http.Request) (
|
||||||
Port: svc.Port,
|
Port: svc.Port,
|
||||||
Address: svc.Address,
|
Address: svc.Address,
|
||||||
EnableTagOverride: svc.EnableTagOverride,
|
EnableTagOverride: svc.EnableTagOverride,
|
||||||
|
Weights: weights,
|
||||||
Proxy: proxy,
|
Proxy: proxy,
|
||||||
Connect: connect,
|
Connect: connect,
|
||||||
}
|
}
|
||||||
|
|
|
@ -250,6 +250,10 @@ func TestAgent_Service(t *testing.T) {
|
||||||
},
|
},
|
||||||
Port: 8000,
|
Port: 8000,
|
||||||
Proxy: &proxy,
|
Proxy: &proxy,
|
||||||
|
Weights: &structs.Weights{
|
||||||
|
Passing: 1,
|
||||||
|
Warning: 1,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// Define an updated version. Be careful to copy it.
|
// Define an updated version. Be careful to copy it.
|
||||||
|
@ -268,20 +272,28 @@ func TestAgent_Service(t *testing.T) {
|
||||||
Service: "web-sidecar-proxy",
|
Service: "web-sidecar-proxy",
|
||||||
Port: 8000,
|
Port: 8000,
|
||||||
Proxy: expectProxy.ToAPI(),
|
Proxy: expectProxy.ToAPI(),
|
||||||
ContentHash: "26959a754e182054",
|
ContentHash: "3442362e971c43d1",
|
||||||
|
Weights: api.AgentWeights{
|
||||||
|
Passing: 1,
|
||||||
|
Warning: 1,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy and modify
|
// Copy and modify
|
||||||
updatedResponse := *expectedResponse
|
updatedResponse := *expectedResponse
|
||||||
updatedResponse.Port = 9999
|
updatedResponse.Port = 9999
|
||||||
updatedResponse.ContentHash = "1bdcf042660b33f6"
|
updatedResponse.ContentHash = "90b5c19bf0f5073"
|
||||||
|
|
||||||
// Simple response for non-proxy service regustered in TestAgent config
|
// Simple response for non-proxy service registered in TestAgent config
|
||||||
expectWebResponse := &api.AgentService{
|
expectWebResponse := &api.AgentService{
|
||||||
ID: "web",
|
ID: "web",
|
||||||
Service: "web",
|
Service: "web",
|
||||||
Port: 8181,
|
Port: 8181,
|
||||||
ContentHash: "7be2b0411161d3b1",
|
ContentHash: "69351c1ac865b034",
|
||||||
|
Weights: api.AgentWeights{
|
||||||
|
Passing: 1,
|
||||||
|
Warning: 1,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
|
|
|
@ -2505,8 +2505,16 @@ func TestConfigFlagsAndEdgecases(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
Weights: &structs.Weights{
|
||||||
|
Passing: 1,
|
||||||
|
Warning: 1,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
Weights: &structs.Weights{
|
||||||
|
Passing: 1,
|
||||||
|
Warning: 1,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -2592,8 +2600,16 @@ func TestConfigFlagsAndEdgecases(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
Weights: &structs.Weights{
|
||||||
|
Passing: 1,
|
||||||
|
Warning: 1,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
Weights: &structs.Weights{
|
||||||
|
Passing: 1,
|
||||||
|
Warning: 1,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -4209,7 +4225,12 @@ func TestFullConfig(t *testing.T) {
|
||||||
// it can make intelligent decisions about automatic port assignments
|
// it can make intelligent decisions about automatic port assignments
|
||||||
// etc. So we expect config just to pass it through verbatim.
|
// etc. So we expect config just to pass it through verbatim.
|
||||||
Connect: &structs.ServiceConnect{
|
Connect: &structs.ServiceConnect{
|
||||||
SidecarService: &structs.ServiceDefinition{},
|
SidecarService: &structs.ServiceDefinition{
|
||||||
|
Weights: &structs.Weights{
|
||||||
|
Passing: 1,
|
||||||
|
Warning: 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -673,7 +673,7 @@ func TestAPI_AgentService(t *testing.T) {
|
||||||
ID: "foo",
|
ID: "foo",
|
||||||
Service: "foo",
|
Service: "foo",
|
||||||
Tags: []string{"bar", "baz"},
|
Tags: []string{"bar", "baz"},
|
||||||
ContentHash: "bf5bd67c5d74b26d",
|
ContentHash: "5d286f5494330b04",
|
||||||
Port: 8000,
|
Port: 8000,
|
||||||
}
|
}
|
||||||
require.Equal(expect, got)
|
require.Equal(expect, got)
|
||||||
|
@ -683,7 +683,7 @@ func TestAPI_AgentService(t *testing.T) {
|
||||||
// agent endpoint tests but this ensures that the API package is at least
|
// agent endpoint tests but this ensures that the API package is at least
|
||||||
// passing the hash param properly.
|
// passing the hash param properly.
|
||||||
opts := QueryOptions{
|
opts := QueryOptions{
|
||||||
WaitHash: "bf5bd67c5d74b26d",
|
WaitHash: "5d286f5494330b04",
|
||||||
WaitTime: 100 * time.Millisecond, // Just long enough to be reliably measurable
|
WaitTime: 100 * time.Millisecond, // Just long enough to be reliably measurable
|
||||||
}
|
}
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
|
|
|
@ -88,9 +88,47 @@ func TestStructsToAgentService(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"Proxy service",
|
||||||
|
&structs.ServiceDefinition{
|
||||||
|
Name: "web-proxy",
|
||||||
|
Kind: structs.ServiceKindConnectProxy,
|
||||||
|
Tags: []string{"leader"},
|
||||||
|
Port: 1234,
|
||||||
|
Proxy: &structs.ConnectProxyConfig{
|
||||||
|
DestinationServiceID: "web1",
|
||||||
|
DestinationServiceName: "web",
|
||||||
|
LocalServiceAddress: "127.0.0.1",
|
||||||
|
LocalServicePort: 8181,
|
||||||
|
Upstreams: structs.TestUpstreams(t),
|
||||||
|
Config: map[string]interface{}{
|
||||||
|
"foo": "bar",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
&api.AgentServiceRegistration{
|
||||||
|
Name: "web-proxy",
|
||||||
|
Tags: []string{"leader"},
|
||||||
|
Port: 1234,
|
||||||
|
Kind: api.ServiceKindConnectProxy,
|
||||||
|
Proxy: &api.AgentServiceConnectProxyConfig{
|
||||||
|
DestinationServiceID: "web1",
|
||||||
|
DestinationServiceName: "web",
|
||||||
|
LocalServiceAddress: "127.0.0.1",
|
||||||
|
LocalServicePort: 8181,
|
||||||
|
Upstreams: structs.TestUpstreams(t).ToAPI(),
|
||||||
|
Config: map[string]interface{}{
|
||||||
|
"foo": "bar",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range cases {
|
for _, tt := range cases {
|
||||||
|
// Capture the loop variable locally otherwise parallel will cause us to run
|
||||||
|
// N copies of the last test case but with different names!!
|
||||||
|
tc := tt
|
||||||
t.Run(tc.Name, func(t *testing.T) {
|
t.Run(tc.Name, func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
require := require.New(t)
|
require := require.New(t)
|
||||||
|
@ -100,6 +138,3 @@ func TestStructsToAgentService(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func intPtr(v int) *int { return &v }
|
|
||||||
func strPtr(v string) *string { return &v }
|
|
||||||
|
|
Loading…
Reference in New Issue