refactor createEntries

Signed-off-by: Victor Vieux <vieux@docker.com>
This commit is contained in:
Victor Vieux
2015-02-10 02:18:46 +00:00
parent ba01634743
commit 3df8bbed61
10 changed files with 42 additions and 126 deletions

View File

@@ -59,26 +59,15 @@ func (s *ConsulDiscoveryService) Fetch() ([]*discovery.Entry, error) {
return nil, err
}
return s.createEntries(pairs)
}
func (s *ConsulDiscoveryService) createEntries(pairs consul.KVPairs) ([]*discovery.Entry, error) {
entries := []*discovery.Entry{}
if pairs == nil {
return entries, nil
}
addrs := []string{}
for _, pair := range pairs {
if pair.Key == s.prefix {
continue
}
entry, err := discovery.NewEntry(string(pair.Value))
if err != nil {
return nil, err
}
entries = append(entries, entry)
addrs = append(addrs, string(pair.Value))
}
return entries, nil
return discovery.CreateEntries(addrs)
}
func (s *ConsulDiscoveryService) Watch(callback discovery.WatchCallback) {

View File

@@ -3,8 +3,6 @@ package consul
import (
"testing"
consul "github.com/armon/consul-api"
"github.com/docker/swarm/discovery"
"github.com/stretchr/testify/assert"
)
@@ -20,20 +18,3 @@ func TestInitialize(t *testing.T) {
assert.Equal(t, discovery.prefix, "path/")
}
func TestCreateEntries(t *testing.T) {
service := &ConsulDiscoveryService{prefix: "prefix"}
entries, err := service.createEntries(nil)
assert.Equal(t, entries, []*discovery.Entry{})
assert.NoError(t, err)
entries, err = service.createEntries(consul.KVPairs{&consul.KVPair{Value: []byte("127.0.0.1:2375")}, &consul.KVPair{Value: []byte("127.0.0.2:2375")}})
assert.Equal(t, len(entries), 2)
assert.Equal(t, entries[0].String(), "127.0.0.1:2375")
assert.Equal(t, entries[1].String(), "127.0.0.2:2375")
assert.NoError(t, err)
_, err = service.createEntries(consul.KVPairs{&consul.KVPair{Value: []byte("127.0.0.1")}, &consul.KVPair{Value: []byte("127.0.0.2")}})
assert.Error(t, err)
}

View File

@@ -76,3 +76,19 @@ func New(rawurl string, heartbeat int) (DiscoveryService, error) {
return nil, ErrNotSupported
}
func CreateEntries(addrs []string) ([]*Entry, error) {
entries := []*Entry{}
if addrs == nil {
return entries, nil
}
for _, addr := range addrs {
entry, err := NewEntry(addr)
if err != nil {
return nil, err
}
entries = append(entries, entry)
}
return entries, nil
}

View File

@@ -37,3 +37,17 @@ func TestParse(t *testing.T) {
assert.Equal(t, scheme, "nodes")
assert.Equal(t, uri, "")
}
func TestCreateEntries(t *testing.T) {
entries, err := CreateEntries(nil)
assert.Equal(t, entries, []*Entry{})
assert.NoError(t, err)
entries, err = CreateEntries([]string{"127.0.0.1:2375", "127.0.0.2:2375"})
assert.Equal(t, entries[0].String(), "127.0.0.1:2375")
assert.Equal(t, entries[1].String(), "127.0.0.2:2375")
assert.NoError(t, err)
_, err = CreateEntries([]string{"127.0.0.1", "127.0.0.2"})
assert.Error(t, err)
}

View File

@@ -57,24 +57,11 @@ func (s *EtcdDiscoveryService) Fetch() ([]*discovery.Entry, error) {
return nil, err
}
return s.createEntries(resp.Node.Nodes)
}
func (s *EtcdDiscoveryService) createEntries(nodes etcd.Nodes) ([]*discovery.Entry, error) {
entries := []*discovery.Entry{}
if nodes == nil {
return entries, nil
addrs := []string{}
for _, n := range resp.Node.Nodes {
addrs = append(addrs, n.Value)
}
for _, n := range nodes {
entry, err := discovery.NewEntry(n.Value)
if err != nil {
return nil, err
}
entries = append(entries, entry)
}
return entries, nil
return discovery.CreateEntries(addrs)
}
func (s *EtcdDiscoveryService) Watch(callback discovery.WatchCallback) {

View File

@@ -3,8 +3,6 @@ package etcd
import (
"testing"
"github.com/coreos/go-etcd/etcd"
"github.com/docker/swarm/discovery"
"github.com/stretchr/testify/assert"
)
@@ -19,19 +17,3 @@ func TestInitialize(t *testing.T) {
assert.Error(t, discovery.Initialize("127.0.0.1,127.0.0.2,127.0.0.3/path", 0))
assert.Equal(t, discovery.path, "/path/")
}
func TestCreateEntries(t *testing.T) {
service := &EtcdDiscoveryService{}
entries, err := service.createEntries(nil)
assert.Equal(t, entries, []*discovery.Entry{})
assert.NoError(t, err)
entries, err = service.createEntries(etcd.Nodes{&etcd.Node{Value: "127.0.0.1:2375"}, &etcd.Node{Value: "127.0.0.2:2375"}})
assert.Equal(t, entries[0].String(), "127.0.0.1:2375")
assert.Equal(t, entries[1].String(), "127.0.0.2:2375")
assert.NoError(t, err)
_, err = service.createEntries(etcd.Nodes{&etcd.Node{Value: "127.0.0.1"}, &etcd.Node{Value: "127.0.0.2"}})
assert.Error(t, err)
}

View File

@@ -29,18 +29,7 @@ func (s *FileDiscoveryService) Fetch() ([]*discovery.Entry, error) {
return nil, err
}
var entries []*discovery.Entry
for _, line := range strings.Split(string(data), "\n") {
if line != "" {
entry, err := discovery.NewEntry(line)
if err != nil {
return nil, err
}
entries = append(entries, entry)
}
}
return entries, nil
return discovery.CreateEntries(strings.Split(string(data), "\n"))
}
func (s *FileDiscoveryService) Watch(callback discovery.WatchCallback) {

View File

@@ -62,16 +62,7 @@ func (s *TokenDiscoveryService) Fetch() ([]*discovery.Entry, error) {
return nil, fmt.Errorf("Failed to fetch entries, Discovery service returned %d HTTP status code", resp.StatusCode)
}
var entries []*discovery.Entry
for _, addr := range addrs {
entry, err := discovery.NewEntry(addr)
if err != nil {
return nil, err
}
entries = append(entries, entry)
}
return entries, nil
return discovery.CreateEntries(addrs)
}
func (s *TokenDiscoveryService) Watch(callback discovery.WatchCallback) {

View File

@@ -79,23 +79,7 @@ func (s *ZkDiscoveryService) Fetch() ([]*discovery.Entry, error) {
return nil, err
}
return s.createEntries(addrs)
}
func (s *ZkDiscoveryService) createEntries(addrs []string) ([]*discovery.Entry, error) {
entries := []*discovery.Entry{}
if addrs == nil {
return entries, nil
}
for _, addr := range addrs {
entry, err := discovery.NewEntry(addr)
if err != nil {
return nil, err
}
entries = append(entries, entry)
}
return entries, nil
return discovery.CreateEntries(addrs)
}
func (s *ZkDiscoveryService) Watch(callback discovery.WatchCallback) {
@@ -105,7 +89,7 @@ func (s *ZkDiscoveryService) Watch(callback discovery.WatchCallback) {
log.WithField("name", "zk").Debug("Discovery watch aborted")
return
}
entries, err := s.createEntries(addrs)
entries, err := discovery.CreateEntries(addrs)
if err == nil {
callback(entries)
}

View File

@@ -3,7 +3,6 @@ package zookeeper
import (
"testing"
"github.com/docker/swarm/discovery"
"github.com/stretchr/testify/assert"
)
@@ -21,19 +20,3 @@ func TestInitialize(t *testing.T) {
assert.Error(t, service.Initialize("127.0.0.1,127.0.0.2,127.0.0.3/path/sub1/sub2", 0))
assert.Equal(t, service.fullpath(), "/path/sub1/sub2")
}
func TestCreateEntries(t *testing.T) {
service := &ZkDiscoveryService{}
entries, err := service.createEntries(nil)
assert.Equal(t, entries, []*discovery.Entry{})
assert.NoError(t, err)
entries, err = service.createEntries([]string{"127.0.0.1:2375", "127.0.0.2:2375"})
assert.Equal(t, entries[0].String(), "127.0.0.1:2375")
assert.Equal(t, entries[1].String(), "127.0.0.2:2375")
assert.NoError(t, err)
_, err = service.createEntries([]string{"127.0.0.1", "127.0.0.2"})
assert.Error(t, err)
}