consul: Testing KVS Lock/Unlock in FSM
This commit is contained in:
parent
bfd008a6da
commit
55ce278223
|
@ -648,3 +648,111 @@ func TestFSM_SessionCreate_Destroy(t *testing.T) {
|
|||
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…
Reference in New Issue