|
|
|
@ -106,6 +106,20 @@ func testSetKey(t *testing.T, s *StateStore, idx uint64, key, value string) {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// verifyWatch will set up a watch channel, call the given function, and then
|
|
|
|
|
// make sure the watch fires within a fixed time period.
|
|
|
|
|
func verifyWatch(t *testing.T, watch Watch, fn func()) { |
|
|
|
|
ch := make(chan struct{}) |
|
|
|
|
watch.Wait(ch) |
|
|
|
|
go fn() |
|
|
|
|
|
|
|
|
|
select { |
|
|
|
|
case <-ch: |
|
|
|
|
case <-time.After(100 * time.Millisecond): |
|
|
|
|
t.Fatalf("watch was not notified") |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func TestStateStore_maxIndex(t *testing.T) { |
|
|
|
|
s := testStateStore(t) |
|
|
|
|
|
|
|
|
@ -1837,41 +1851,22 @@ func TestStateStore_ACLDelete(t *testing.T) {
|
|
|
|
|
|
|
|
|
|
func TestStateStore_ACL_Watches(t *testing.T) { |
|
|
|
|
s := testStateStore(t) |
|
|
|
|
ch := make(chan struct{}) |
|
|
|
|
|
|
|
|
|
s.GetTableWatch("acls").Wait(ch) |
|
|
|
|
go func() { |
|
|
|
|
verifyWatch(t, s.GetTableWatch("acls"), func() { |
|
|
|
|
if err := s.ACLSet(1, &structs.ACL{ID: "acl1"}); err != nil { |
|
|
|
|
t.Fatalf("err: %s", err) |
|
|
|
|
} |
|
|
|
|
}() |
|
|
|
|
select { |
|
|
|
|
case <-ch: |
|
|
|
|
case <-time.After(1 * time.Second): |
|
|
|
|
t.Fatalf("watch was not notified") |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
s.GetTableWatch("acls").Wait(ch) |
|
|
|
|
go func() { |
|
|
|
|
verifyWatch(t, s.GetTableWatch("acls"), func() { |
|
|
|
|
if err := s.ACLDelete(2, "acl1"); err != nil { |
|
|
|
|
t.Fatalf("err: %s", err) |
|
|
|
|
} |
|
|
|
|
}() |
|
|
|
|
select { |
|
|
|
|
case <-ch: |
|
|
|
|
case <-time.After(1 * time.Second): |
|
|
|
|
t.Fatalf("watch was not notified") |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
s.GetTableWatch("acls").Wait(ch) |
|
|
|
|
go func() { |
|
|
|
|
verifyWatch(t, s.GetTableWatch("acls"), func() { |
|
|
|
|
if err := s.ACLRestore(&structs.ACL{ID: "acl1"}); err != nil { |
|
|
|
|
t.Fatalf("err: %s", err) |
|
|
|
|
} |
|
|
|
|
}() |
|
|
|
|
select { |
|
|
|
|
case <-ch: |
|
|
|
|
case <-time.After(1 * time.Second): |
|
|
|
|
t.Fatalf("watch was not notified") |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|