| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- // +build integration
- package serverlock
- import (
- "context"
- "testing"
- "time"
- . "github.com/smartystreets/goconvey/convey"
- )
- func TestServerLok(t *testing.T) {
- sl := createTestableServerLock(t)
- Convey("Server lock integration tests", t, func() {
- counter := 0
- var err error
- incCounter := func() { counter++ }
- atInterval := time.Second * 1
- ctx := context.Background()
- //this time `fn` should be executed
- So(sl.LockAndExecute(ctx, "test-operation", atInterval, incCounter), ShouldBeNil)
- //this should not execute `fn`
- So(sl.LockAndExecute(ctx, "test-operation", atInterval, incCounter), ShouldBeNil)
- So(sl.LockAndExecute(ctx, "test-operation", atInterval, incCounter), ShouldBeNil)
- So(sl.LockAndExecute(ctx, "test-operation", atInterval, incCounter), ShouldBeNil)
- So(sl.LockAndExecute(ctx, "test-operation", atInterval, incCounter), ShouldBeNil)
- // wait 5 second.
- <-time.After(atInterval * 2)
- // now `fn` should be executed again
- err = sl.LockAndExecute(ctx, "test-operation", atInterval, incCounter)
- So(err, ShouldBeNil)
- So(counter, ShouldEqual, 2)
- })
- }
|