|
|
|
@ -14,14 +14,11 @@ import (
|
|
|
|
|
"time" |
|
|
|
|
|
|
|
|
|
"github.com/hashicorp/consul/api" |
|
|
|
|
"github.com/hashicorp/consul/command/base" |
|
|
|
|
"github.com/hashicorp/consul/consul/structs" |
|
|
|
|
"github.com/hashicorp/consul/logger" |
|
|
|
|
"github.com/hashicorp/consul/testutil" |
|
|
|
|
"github.com/hashicorp/consul/testutil/retry" |
|
|
|
|
"github.com/hashicorp/consul/types" |
|
|
|
|
"github.com/hashicorp/serf/serf" |
|
|
|
|
"github.com/mitchellh/cli" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
func makeReadOnlyAgentACL(t *testing.T, srv *HTTPServer) string { |
|
|
|
@ -234,74 +231,33 @@ func TestAgent_Self_ACLDeny(t *testing.T) {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func TestAgent_Reload(t *testing.T) { |
|
|
|
|
t.Skip("fs: skipping tests that use cmd.Run until signal handling is fixed") |
|
|
|
|
t.Parallel() |
|
|
|
|
cfg := TestConfig() |
|
|
|
|
tmpDir := testutil.TempDir(t, "consul") |
|
|
|
|
defer os.RemoveAll(tmpDir) |
|
|
|
|
|
|
|
|
|
// Write initial config, to be reloaded later
|
|
|
|
|
tmpFile := testutil.TempFile(t, "config") |
|
|
|
|
_, err := tmpFile.WriteString(`{"acl_enforce_version_8": false, "service":{"name":"redis"}}`) |
|
|
|
|
if err != nil { |
|
|
|
|
t.Fatalf("err: %s", err) |
|
|
|
|
cfg.ACLEnforceVersion8 = Bool(false) |
|
|
|
|
cfg.Services = []*ServiceDefinition{ |
|
|
|
|
&ServiceDefinition{Name: "redis"}, |
|
|
|
|
} |
|
|
|
|
tmpFile.Close() |
|
|
|
|
|
|
|
|
|
doneCh := make(chan struct{}) |
|
|
|
|
shutdownCh := make(chan struct{}) |
|
|
|
|
|
|
|
|
|
defer func() { |
|
|
|
|
close(shutdownCh) |
|
|
|
|
<-doneCh |
|
|
|
|
}() |
|
|
|
|
|
|
|
|
|
cmd := &Command{ |
|
|
|
|
ShutdownCh: shutdownCh, |
|
|
|
|
Command: base.Command{ |
|
|
|
|
Flags: base.FlagSetNone, |
|
|
|
|
UI: cli.NewMockUi(), |
|
|
|
|
}, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
args := []string{ |
|
|
|
|
"-server", |
|
|
|
|
"-bind", "127.0.0.1", |
|
|
|
|
"-data-dir", tmpDir, |
|
|
|
|
"-http-port", fmt.Sprintf("%d", cfg.Ports.HTTP), |
|
|
|
|
"-config-file", tmpFile.Name(), |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
go func() { |
|
|
|
|
cmd.Run(args) |
|
|
|
|
close(doneCh) |
|
|
|
|
}() |
|
|
|
|
|
|
|
|
|
retry.Run(t, func(r *retry.R) { |
|
|
|
|
if cmd.agent == nil { |
|
|
|
|
r.Fatal("waiting for agent") |
|
|
|
|
} |
|
|
|
|
if got, want := len(cmd.agent.httpServers), 1; got != want { |
|
|
|
|
r.Fatalf("got %d servers want %d", got, want) |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
a := NewTestAgent(t.Name(), cfg) |
|
|
|
|
defer a.Shutdown() |
|
|
|
|
|
|
|
|
|
if _, ok := cmd.agent.state.services["redis"]; !ok { |
|
|
|
|
if _, ok := a.state.services["redis"]; !ok { |
|
|
|
|
t.Fatalf("missing redis service") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
data := []byte(`{"acl_enforce_version_8": false, "service":{"name":"redis-reloaded"}}`) |
|
|
|
|
if err := ioutil.WriteFile(tmpFile.Name(), data, 0644); err != nil { |
|
|
|
|
t.Fatalf("err: %v", err) |
|
|
|
|
cfg2 := TestConfig() |
|
|
|
|
cfg2.ACLEnforceVersion8 = Bool(false) |
|
|
|
|
cfg2.Services = []*ServiceDefinition{ |
|
|
|
|
&ServiceDefinition{Name: "redis-reloaded"}, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
srv := cmd.agent.httpServers[0] |
|
|
|
|
req, _ := http.NewRequest("PUT", "/v1/agent/reload", nil) |
|
|
|
|
if _, err := srv.AgentReload(nil, req); err != nil { |
|
|
|
|
t.Fatalf("Err: %v", err) |
|
|
|
|
ok, err := a.ReloadConfig(cfg2) |
|
|
|
|
if err != nil { |
|
|
|
|
t.Fatalf("got error %v want nil", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if _, ok := cmd.agent.state.services["redis-reloaded"]; !ok { |
|
|
|
|
if !ok { |
|
|
|
|
t.Fatalf("got ok %v want true") |
|
|
|
|
} |
|
|
|
|
if _, ok := a.state.services["redis-reloaded"]; !ok { |
|
|
|
|
t.Fatalf("missing redis-reloaded service") |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|