73 lines
1.6 KiB
73 lines
1.6 KiB
package master_test
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"net/url"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/PaddlePaddle/Paddle/go/master"
|
|
"github.com/coreos/etcd/clientv3"
|
|
"github.com/coreos/etcd/embed"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestNewServiceWithEtcd(t *testing.T) {
|
|
// setup an embed etcd server
|
|
etcdDir, err := ioutil.TempDir("", "")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
cfg := embed.NewConfig()
|
|
lpurl, _ := url.Parse("http://localhost:0")
|
|
lcurl, _ := url.Parse("http://localhost:0")
|
|
cfg.LPUrls = []url.URL{*lpurl}
|
|
cfg.LCUrls = []url.URL{*lcurl}
|
|
cfg.Dir = etcdDir
|
|
e, err := embed.StartEtcd(cfg)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer func() {
|
|
e.Close()
|
|
if err := os.RemoveAll(etcdDir); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}()
|
|
|
|
<-e.Server.ReadyNotify()
|
|
|
|
port := strings.Split(e.Clients[0].Addr().String(), ":")[1]
|
|
endpoint := "127.0.0.1:" + port
|
|
|
|
ep := []string{endpoint}
|
|
masterAddr := "127.0.0.1:3306"
|
|
store, err := master.NewEtcdClient(ep, masterAddr, master.DefaultLockPath, master.DefaultAddrPath, master.DefaultStatePath, 30)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
_, err = master.NewService(store, 10, 10, 3)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
cli, err := clientv3.New(clientv3.Config{
|
|
Endpoints: ep,
|
|
DialTimeout: 3 * time.Second,
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
v, err := master.GetKey(cli, master.DefaultAddrPath, 3*time.Second)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := cli.Close(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
// test master process registry itself into etcd server.
|
|
assert.Equal(t, masterAddr, v, "master process should registry itself into etcd server.")
|
|
}
|