API: Add ACLReplication

This commit is contained in:
Ivan Bogdanov 2017-04-25 00:39:50 +03:00
parent f17656c39f
commit 1ebd6402fd
2 changed files with 64 additions and 0 deletions

View File

@ -1,5 +1,9 @@
package api
import (
"time"
)
const (
// ACLCLientType is the client type token
ACLClientType = "client"
@ -18,6 +22,16 @@ type ACLEntry struct {
Rules string
}
// ACLReplicationEntry is used to represent an ACLReplication entry
type ACLReplicationEntry struct {
Enabled bool
Running bool
SourceDatacenter string
ReplicatedIndex uint64
LastSuccess time.Time
LastError time.Time
}
// ACL can be used to query the ACL endpoints
type ACL struct {
c *Client
@ -138,3 +152,24 @@ func (a *ACL) List(q *QueryOptions) ([]*ACLEntry, *QueryMeta, error) {
}
return entries, qm, nil
}
// Replication returns the status of the ACL replication process in the datacenter
func (a *ACL) Replication(q *QueryOptions) (*ACLReplicationEntry, *QueryMeta, error) {
r := a.c.newRequest("GET", "/v1/acl/replication")
r.setQueryOptions(q)
rtt, resp, err := requireOK(a.c.doRequest(r))
if err != nil {
return nil, nil, err
}
defer resp.Body.Close()
qm := &QueryMeta{}
parseQueryMeta(resp, qm)
qm.RequestTime = rtt
var entries *ACLReplicationEntry
if err := decodeBody(resp, &entries); err != nil {
return nil, nil, err
}
return entries, qm, nil
}

View File

@ -126,3 +126,32 @@ func TestACL_List(t *testing.T) {
t.Fatalf("bad: %v", qm)
}
}
func TestACL_Replication(t *testing.T) {
t.Parallel()
c, s := makeACLClient(t)
defer s.Stop()
acl := c.ACL()
repl, qm, err := acl.Replication(nil)
if err != nil {
t.Fatalf("err: %v", err)
}
if repl == nil {
t.Fatalf("bad: %v", repl)
}
if repl.Running {
t.Fatal("bad: repl should not be running")
}
if repl.Enabled {
t.Fatal("bad: repl should not be enabled")
}
if qm.RequestTime == 0 {
t.Fatalf("bad: %v", qm)
}
}