fix panics in etcd and zookeeper + add tests

Signed-off-by: Victor Vieux <vieux@docker.com>
This commit is contained in:
Victor Vieux 2015-01-22 19:40:24 +00:00
parent 29bbf0fb27
commit ecb47032bd
6 changed files with 27 additions and 3 deletions

View File

@ -1,7 +1,7 @@
package consul package consul
import ( import (
"errors" "fmt"
"path" "path"
"strings" "strings"
"time" "time"
@ -25,7 +25,7 @@ func init() {
func (s *ConsulDiscoveryService) Initialize(uris string, heartbeat int) error { func (s *ConsulDiscoveryService) Initialize(uris string, heartbeat int) error {
parts := strings.SplitN(uris, "/", 2) parts := strings.SplitN(uris, "/", 2)
if len(parts) < 2 { if len(parts) < 2 {
return errors.New("missing consul prefix") return fmt.Errorf("invalid format %q, missing <path>", uris)
} }
addr := parts[0] addr := parts[0]
path := parts[1] path := parts[1]

View File

@ -8,6 +8,13 @@ import (
func TestInitialize(t *testing.T) { func TestInitialize(t *testing.T) {
discovery := &ConsulDiscoveryService{} discovery := &ConsulDiscoveryService{}
discovery.Initialize("127.0.0.1:8500/path", 0)
assert.Equal(t, discovery.Initialize("127.0.0.1", 0).Error(), "invalid format \"127.0.0.1\", missing <path>")
assert.Error(t, discovery.Initialize("127.0.0.1/path", 0))
assert.Equal(t, discovery.prefix, "path/") assert.Equal(t, discovery.prefix, "path/")
assert.Error(t, discovery.Initialize("127.0.0.1,127.0.0.2,127.0.0.3/path", 0))
assert.Equal(t, discovery.prefix, "path/")
} }

View File

@ -1,6 +1,7 @@
package etcd package etcd
import ( import (
"fmt"
"path" "path"
"strings" "strings"
@ -27,6 +28,11 @@ func (s *EtcdDiscoveryService) Initialize(uris string, heartbeat int) error {
ips = strings.Split(parts[0], ",") ips = strings.Split(parts[0], ",")
machines []string machines []string
) )
if len(parts) != 2 {
return fmt.Errorf("invalid format %q, missing <path>", uris)
}
for _, ip := range ips { for _, ip := range ips {
machines = append(machines, "http://"+ip) machines = append(machines, "http://"+ip)
} }

View File

@ -8,6 +8,9 @@ import (
func TestInitialize(t *testing.T) { func TestInitialize(t *testing.T) {
discovery := &EtcdDiscoveryService{} discovery := &EtcdDiscoveryService{}
assert.Equal(t, discovery.Initialize("127.0.0.1", 0).Error(), "invalid format \"127.0.0.1\", missing <path>")
assert.Error(t, discovery.Initialize("127.0.0.1/path", 0)) assert.Error(t, discovery.Initialize("127.0.0.1/path", 0))
assert.Equal(t, discovery.path, "/path/") assert.Equal(t, discovery.path, "/path/")

View File

@ -1,6 +1,7 @@
package zookeeper package zookeeper
import ( import (
"fmt"
"path" "path"
"strings" "strings"
"time" "time"
@ -28,6 +29,10 @@ func (s *ZkDiscoveryService) Initialize(uris string, heartbeat int) error {
ips = strings.Split(parts[0], ",") ips = strings.Split(parts[0], ",")
) )
if len(parts) != 2 {
return fmt.Errorf("invalid format %q, missing <path>", uris)
}
conn, _, err := zk.Connect(ips, time.Second) conn, _, err := zk.Connect(ips, time.Second)
if err != nil { if err != nil {

View File

@ -9,6 +9,9 @@ import (
func TestInitialize(t *testing.T) { func TestInitialize(t *testing.T) {
service := &ZkDiscoveryService{} service := &ZkDiscoveryService{}
assert.Equal(t, service.Initialize("127.0.0.1", 0).Error(), "invalid format \"127.0.0.1\", missing <path>")
assert.Error(t, service.Initialize("127.0.0.1/path", 0)) assert.Error(t, service.Initialize("127.0.0.1/path", 0))
assert.Equal(t, service.path, "/path") assert.Equal(t, service.path, "/path")