|
|
@ -1,8 +1,14 @@ |
|
|
|
package agent |
|
|
|
package agent |
|
|
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
import ( |
|
|
|
"github.com/mitchellh/cli" |
|
|
|
"fmt" |
|
|
|
|
|
|
|
"io/ioutil" |
|
|
|
|
|
|
|
"log" |
|
|
|
|
|
|
|
"os" |
|
|
|
"testing" |
|
|
|
"testing" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"github.com/hashicorp/consul/testutil" |
|
|
|
|
|
|
|
"github.com/mitchellh/cli" |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
func TestCommand_implements(t *testing.T) { |
|
|
|
func TestCommand_implements(t *testing.T) { |
|
|
@ -31,3 +37,87 @@ func TestValidDatacenter(t *testing.T) { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func TestRetryJoin(t *testing.T) { |
|
|
|
|
|
|
|
dir, agent := makeAgent(t, nextConfig()) |
|
|
|
|
|
|
|
defer os.RemoveAll(dir) |
|
|
|
|
|
|
|
defer agent.Shutdown() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
conf2 := nextConfig() |
|
|
|
|
|
|
|
tmpDir, err := ioutil.TempDir("", "consul") |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
t.Fatalf("err: %s", err) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
defer os.RemoveAll(tmpDir) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
doneCh := make(chan struct{}) |
|
|
|
|
|
|
|
shutdownCh := make(chan struct{}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
defer func() { |
|
|
|
|
|
|
|
close(shutdownCh) |
|
|
|
|
|
|
|
<-doneCh |
|
|
|
|
|
|
|
}() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmd := &Command{ |
|
|
|
|
|
|
|
ShutdownCh: shutdownCh, |
|
|
|
|
|
|
|
Ui: new(cli.MockUi), |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
serfAddr := fmt.Sprintf( |
|
|
|
|
|
|
|
"%s:%d", |
|
|
|
|
|
|
|
agent.config.BindAddr, |
|
|
|
|
|
|
|
agent.config.Ports.SerfLan) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
args := []string{ |
|
|
|
|
|
|
|
"-data-dir", tmpDir, |
|
|
|
|
|
|
|
"-node", conf2.NodeName, |
|
|
|
|
|
|
|
"-retry-join", serfAddr, |
|
|
|
|
|
|
|
"-retry-interval", "1s", |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
go func() { |
|
|
|
|
|
|
|
if code := cmd.Run(args); code != 0 { |
|
|
|
|
|
|
|
log.Printf("bad: %d", code) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
close(doneCh) |
|
|
|
|
|
|
|
}() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
testutil.WaitForResult(func() (bool, error) { |
|
|
|
|
|
|
|
mem := agent.LANMembers() |
|
|
|
|
|
|
|
if len(mem) != 2 { |
|
|
|
|
|
|
|
return false, fmt.Errorf("bad: %#v", mem) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return true, nil |
|
|
|
|
|
|
|
}, func(err error) { |
|
|
|
|
|
|
|
t.Fatalf(err.Error()) |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func TestRetryJoinFail(t *testing.T) { |
|
|
|
|
|
|
|
conf := nextConfig() |
|
|
|
|
|
|
|
tmpDir, err := ioutil.TempDir("", "consul") |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
t.Fatalf("err: %s", err) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
defer os.RemoveAll(tmpDir) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
shutdownCh := make(chan struct{}) |
|
|
|
|
|
|
|
defer close(shutdownCh) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmd := &Command{ |
|
|
|
|
|
|
|
ShutdownCh: shutdownCh, |
|
|
|
|
|
|
|
Ui: new(cli.MockUi), |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
serfAddr := fmt.Sprintf("%s:%d", conf.BindAddr, conf.Ports.SerfLan) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
args := []string{ |
|
|
|
|
|
|
|
"-data-dir", tmpDir, |
|
|
|
|
|
|
|
"-retry-join", serfAddr, |
|
|
|
|
|
|
|
"-retry-max", "1", |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if code := cmd.Run(args); code == 0 { |
|
|
|
|
|
|
|
t.Fatalf("bad: %d", code) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|