mirror of https://github.com/status-im/consul.git
127 lines
2.5 KiB
Go
127 lines
2.5 KiB
Go
|
package api
|
||
|
|
||
|
import (
|
||
|
crand "crypto/rand"
|
||
|
"fmt"
|
||
|
"net/http"
|
||
|
"testing"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
func makeClient(t *testing.T) *Client {
|
||
|
conf := DefaultConfig()
|
||
|
client, err := NewClient(conf)
|
||
|
if err != nil {
|
||
|
t.Fatalf("err: %v", err)
|
||
|
}
|
||
|
return client
|
||
|
}
|
||
|
|
||
|
func testKey() string {
|
||
|
buf := make([]byte, 16)
|
||
|
if _, err := crand.Read(buf); err != nil {
|
||
|
panic(fmt.Errorf("Failed to read random bytes: %v", err))
|
||
|
}
|
||
|
|
||
|
return fmt.Sprintf("%08x-%04x-%04x-%04x-%12x",
|
||
|
buf[0:4],
|
||
|
buf[4:6],
|
||
|
buf[6:8],
|
||
|
buf[8:10],
|
||
|
buf[10:16])
|
||
|
}
|
||
|
|
||
|
func TestSetQueryOptions(t *testing.T) {
|
||
|
c := makeClient(t)
|
||
|
r := c.newRequest("GET", "/v1/kv/foo")
|
||
|
q := &QueryOptions{
|
||
|
Datacenter: "foo",
|
||
|
AllowStale: true,
|
||
|
RequireConsistent: true,
|
||
|
WaitIndex: 1000,
|
||
|
WaitTime: 100 * time.Second,
|
||
|
Token: "12345",
|
||
|
}
|
||
|
r.setQueryOptions(q)
|
||
|
|
||
|
if r.params.Get("dc") != "foo" {
|
||
|
t.Fatalf("bad: %v", r.params)
|
||
|
}
|
||
|
if _, ok := r.params["stale"]; !ok {
|
||
|
t.Fatalf("bad: %v", r.params)
|
||
|
}
|
||
|
if _, ok := r.params["consistent"]; !ok {
|
||
|
t.Fatalf("bad: %v", r.params)
|
||
|
}
|
||
|
if r.params.Get("index") != "1000" {
|
||
|
t.Fatalf("bad: %v", r.params)
|
||
|
}
|
||
|
if r.params.Get("wait") != "100000ms" {
|
||
|
t.Fatalf("bad: %v", r.params)
|
||
|
}
|
||
|
if r.params.Get("token") != "12345" {
|
||
|
t.Fatalf("bad: %v", r.params)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestSetWriteOptions(t *testing.T) {
|
||
|
c := makeClient(t)
|
||
|
r := c.newRequest("GET", "/v1/kv/foo")
|
||
|
q := &WriteOptions{
|
||
|
Datacenter: "foo",
|
||
|
Token: "23456",
|
||
|
}
|
||
|
r.setWriteOptions(q)
|
||
|
|
||
|
if r.params.Get("dc") != "foo" {
|
||
|
t.Fatalf("bad: %v", r.params)
|
||
|
}
|
||
|
if r.params.Get("token") != "23456" {
|
||
|
t.Fatalf("bad: %v", r.params)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestRequestToHTTP(t *testing.T) {
|
||
|
c := makeClient(t)
|
||
|
r := c.newRequest("DELETE", "/v1/kv/foo")
|
||
|
q := &QueryOptions{
|
||
|
Datacenter: "foo",
|
||
|
}
|
||
|
r.setQueryOptions(q)
|
||
|
req, err := r.toHTTP()
|
||
|
if err != nil {
|
||
|
t.Fatalf("err: %v", err)
|
||
|
}
|
||
|
|
||
|
if req.Method != "DELETE" {
|
||
|
t.Fatalf("bad: %v", req)
|
||
|
}
|
||
|
if req.URL.String() != "http://127.0.0.1:8500/v1/kv/foo?dc=foo" {
|
||
|
t.Fatalf("bad: %v", req)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestParseQueryMeta(t *testing.T) {
|
||
|
resp := &http.Response{
|
||
|
Header: make(map[string][]string),
|
||
|
}
|
||
|
resp.Header.Set("X-Consul-Index", "12345")
|
||
|
resp.Header.Set("X-Consul-LastContact", "80")
|
||
|
resp.Header.Set("X-Consul-KnownLeader", "true")
|
||
|
|
||
|
qm := &QueryMeta{}
|
||
|
if err := parseQueryMeta(resp, qm); err != nil {
|
||
|
t.Fatalf("err: %v", err)
|
||
|
}
|
||
|
|
||
|
if qm.LastIndex != 12345 {
|
||
|
t.Fatalf("Bad: %v", qm)
|
||
|
}
|
||
|
if qm.LastContact != 80*time.Millisecond {
|
||
|
t.Fatalf("Bad: %v", qm)
|
||
|
}
|
||
|
if !qm.KnownLeader {
|
||
|
t.Fatalf("Bad: %v", qm)
|
||
|
}
|
||
|
}
|