add basic discovery client

This commit is contained in:
Victor Vieux 2014-11-17 21:46:03 +00:00
parent 855598f2ac
commit a0841874c5
2 changed files with 67 additions and 0 deletions

40
discovery/client.go Normal file
View File

@ -0,0 +1,40 @@
package discovery
import (
"encoding/json"
"fmt"
"net/http"
"strings"
)
const DISCOVERY_URL = "https://discovery-stage.hub.docker.com/v1"
// FetchSlaves returns the slaves for the discovery service at the specified endpoint
func FetchSlaves(token string) ([]string, error) {
resp, err := http.Get(fmt.Sprintf("%s/%s/%s", DISCOVERY_URL, "clusters", token))
if err != nil {
return nil, err
}
if resp.Body != nil {
defer resp.Body.Close()
}
var addrs []string
if resp.StatusCode == http.StatusOK {
if err := json.NewDecoder(resp.Body).Decode(&addrs); err != nil {
return nil, err
}
}
return addrs, nil
}
// RegisterSlave adds a new slave identified by the slaveID into the discovery service
// the default TTL is 30 secs
func RegisterSlave(addr, token string) error {
buf := strings.NewReader(addr)
_, err := http.Post(fmt.Sprintf("%s/%s/%s", DISCOVERY_URL, "clusters", token), "application/json", buf)
return err
}

27
discovery/client_test.go Normal file
View File

@ -0,0 +1,27 @@
package discovery
import "testing"
func TestRegisterLocal(t *testing.T) {
expected := "127.0.0.1:2675"
if err := RegisterSlave(expected, "TEST_TOKEN"); err != nil {
t.Fatal(err)
}
addrs, err := FetchSlaves("TEST_TOKEN")
if err != nil {
t.Fatal(err)
}
if len(addrs) != 1 {
t.Fatalf("expected addr len == 1, got len = %d", len(addrs))
}
if addrs[0] != expected {
t.Fatalf("expected addr %q but received %q", expected, addrs[0])
}
if err = RegisterSlave(expected, "TEST_TOKEN"); err != nil {
t.Fatal(err)
}
}