mirror of
https://github.com/status-im/consul.git
synced 2025-02-03 09:24:25 +00:00
consul: Testing KVS Lock/Unlock in FSM
This commit is contained in:
parent
85656e0f54
commit
555533e2f8
@ -648,3 +648,111 @@ func TestFSM_SessionCreate_Destroy(t *testing.T) {
|
|||||||
t.Fatalf("should be destroyed")
|
t.Fatalf("should be destroyed")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFSM_KVSLock(t *testing.T) {
|
||||||
|
fsm, err := NewFSM(os.Stderr)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %v", err)
|
||||||
|
}
|
||||||
|
defer fsm.Close()
|
||||||
|
|
||||||
|
fsm.state.EnsureNode(1, structs.Node{"foo", "127.0.0.1"})
|
||||||
|
session := &structs.Session{Node: "foo"}
|
||||||
|
fsm.state.SessionCreate(2, session)
|
||||||
|
|
||||||
|
req := structs.KVSRequest{
|
||||||
|
Datacenter: "dc1",
|
||||||
|
Op: structs.KVSLock,
|
||||||
|
DirEnt: structs.DirEntry{
|
||||||
|
Key: "/test/path",
|
||||||
|
Value: []byte("test"),
|
||||||
|
Session: session.ID,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
buf, err := structs.Encode(structs.KVSRequestType, req)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %v", err)
|
||||||
|
}
|
||||||
|
resp := fsm.Apply(makeLog(buf))
|
||||||
|
if resp != true {
|
||||||
|
t.Fatalf("resp: %v", resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify key is locked
|
||||||
|
_, d, err := fsm.state.KVSGet("/test/path")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %v", err)
|
||||||
|
}
|
||||||
|
if d == nil {
|
||||||
|
t.Fatalf("missing")
|
||||||
|
}
|
||||||
|
if d.LockIndex != 1 {
|
||||||
|
t.Fatalf("bad: %v", *d)
|
||||||
|
}
|
||||||
|
if d.Session != session.ID {
|
||||||
|
t.Fatalf("bad: %v", *d)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestFSM_KVSUnlock(t *testing.T) {
|
||||||
|
fsm, err := NewFSM(os.Stderr)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %v", err)
|
||||||
|
}
|
||||||
|
defer fsm.Close()
|
||||||
|
|
||||||
|
fsm.state.EnsureNode(1, structs.Node{"foo", "127.0.0.1"})
|
||||||
|
session := &structs.Session{Node: "foo"}
|
||||||
|
fsm.state.SessionCreate(2, session)
|
||||||
|
|
||||||
|
req := structs.KVSRequest{
|
||||||
|
Datacenter: "dc1",
|
||||||
|
Op: structs.KVSLock,
|
||||||
|
DirEnt: structs.DirEntry{
|
||||||
|
Key: "/test/path",
|
||||||
|
Value: []byte("test"),
|
||||||
|
Session: session.ID,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
buf, err := structs.Encode(structs.KVSRequestType, req)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %v", err)
|
||||||
|
}
|
||||||
|
resp := fsm.Apply(makeLog(buf))
|
||||||
|
if resp != true {
|
||||||
|
t.Fatalf("resp: %v", resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
req = structs.KVSRequest{
|
||||||
|
Datacenter: "dc1",
|
||||||
|
Op: structs.KVSUnlock,
|
||||||
|
DirEnt: structs.DirEntry{
|
||||||
|
Key: "/test/path",
|
||||||
|
Value: []byte("test"),
|
||||||
|
Session: session.ID,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
buf, err = structs.Encode(structs.KVSRequestType, req)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %v", err)
|
||||||
|
}
|
||||||
|
resp = fsm.Apply(makeLog(buf))
|
||||||
|
if resp != true {
|
||||||
|
t.Fatalf("resp: %v", resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify key is unlocked
|
||||||
|
_, d, err := fsm.state.KVSGet("/test/path")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %v", err)
|
||||||
|
}
|
||||||
|
if d == nil {
|
||||||
|
t.Fatalf("missing")
|
||||||
|
}
|
||||||
|
if d.LockIndex != 1 {
|
||||||
|
t.Fatalf("bad: %v", *d)
|
||||||
|
}
|
||||||
|
if d.Session != "" {
|
||||||
|
t.Fatalf("bad: %v", *d)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user