You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
3.6 KiB
153 lines
3.6 KiB
package dao |
|
|
|
import ( |
|
. "github.com/smartystreets/goconvey/convey" |
|
"go-common/app/service/live/wallet/model" |
|
"go-common/library/cache/redis" |
|
"testing" |
|
) |
|
|
|
func TestDao_Lock(t *testing.T) { |
|
Convey("Lock", t, func() { |
|
once.Do(startService) |
|
key := "test_lock_key" + randomString(5) |
|
ttl := 2000 |
|
retryDelay := 10000 |
|
err, gotLock, lockValue := d.Lock(ctx, key, ttl, 0, retryDelay) |
|
So(err, ShouldBeNil) |
|
So(gotLock, ShouldEqual, true) |
|
So(lockValue, ShouldNotBeNil) |
|
}) |
|
|
|
Convey("Lock Twice", t, func() { |
|
once.Do(startService) |
|
key := "test_lock_key" + randomString(5) |
|
ttl := 2000 |
|
retryDelay := 10000 |
|
err, gotLock, lockValue := d.Lock(ctx, key, ttl, 0, retryDelay) |
|
So(err, ShouldBeNil) |
|
So(gotLock, ShouldEqual, true) |
|
So(lockValue, ShouldNotBeNil) |
|
|
|
err, gotLock, lockValue = d.Lock(ctx, key, ttl, 3, retryDelay) |
|
So(err, ShouldBeNil) |
|
So(gotLock, ShouldEqual, false) |
|
|
|
}) |
|
} |
|
|
|
func TestDao_UnLock(t *testing.T) { |
|
Convey("UnLock", t, func() { |
|
once.Do(startService) |
|
key := "test_lock_key" + randomString(5) |
|
value := "test" |
|
err := d.UnLock(ctx, key, value) |
|
So(err, ShouldEqual, redis.ErrNil) |
|
}) |
|
|
|
Convey("UnLock wrong value", t, func() { |
|
once.Do(startService) |
|
key := "test_lock_key" + randomString(5) |
|
ttl := 2000 |
|
retryDelay := 10000 |
|
err, gotLock, lockValue := d.Lock(ctx, key, ttl, 3, retryDelay) |
|
So(err, ShouldBeNil) |
|
So(gotLock, ShouldEqual, true) |
|
So(lockValue, ShouldNotBeNil) |
|
value := "test" |
|
err = d.UnLock(ctx, key, value) |
|
So(err, ShouldEqual, ErrUnLockGet) |
|
|
|
}) |
|
|
|
Convey("LockAndUnLock", t, func() { |
|
|
|
once.Do(startService) |
|
key := "test_lock_key" + randomString(5) |
|
ttl := 2000 |
|
retryDelay := 10000 |
|
err, gotLock, lockValue := d.Lock(ctx, key, ttl, 0, retryDelay) |
|
So(err, ShouldBeNil) |
|
So(gotLock, ShouldEqual, true) |
|
So(lockValue, ShouldNotBeNil) |
|
|
|
err = d.UnLock(ctx, key, lockValue) |
|
So(err, ShouldBeNil) |
|
|
|
err, gotLock, lockValue = d.Lock(ctx, key, ttl, 0, retryDelay) |
|
So(err, ShouldBeNil) |
|
So(gotLock, ShouldEqual, true) |
|
So(lockValue, ShouldNotBeNil) |
|
|
|
}) |
|
} |
|
|
|
func TestDao_ForceUnLock(t *testing.T) { |
|
Convey("ForceUnLock", t, func() { |
|
once.Do(startService) |
|
key := "test_lock_key" + randomString(5) |
|
err := d.ForceUnLock(ctx, key) |
|
So(err, ShouldBeNil) |
|
}) |
|
|
|
Convey("LockAndForceUnLock", t, func() { |
|
|
|
once.Do(startService) |
|
key := "test_lock_key" + randomString(5) |
|
ttl := 2000 |
|
retryDelay := 10000 |
|
err, gotLock, lockValue := d.Lock(ctx, key, ttl, 0, retryDelay) |
|
So(err, ShouldBeNil) |
|
So(gotLock, ShouldEqual, true) |
|
So(lockValue, ShouldNotBeNil) |
|
|
|
err = d.ForceUnLock(ctx, key) |
|
So(err, ShouldBeNil) |
|
|
|
err, gotLock, lockValue = d.Lock(ctx, key, ttl, 0, retryDelay) |
|
So(err, ShouldBeNil) |
|
So(gotLock, ShouldEqual, true) |
|
So(lockValue, ShouldNotBeNil) |
|
|
|
}) |
|
|
|
} |
|
|
|
func TestDao_LockTransactionId(t *testing.T) { |
|
Convey("LockTid Twice", t, func() { |
|
tid := GetTid(model.PAYTYPE, "test") |
|
err := d.LockTransactionId(ctx, tid) |
|
So(err, ShouldBeNil) |
|
err = d.LockTransactionId(ctx, tid) |
|
So(err, ShouldEqual, ErrLockFailed) |
|
}) |
|
} |
|
|
|
func TestDao_LockUser(t *testing.T) { |
|
Convey("LockUser", t, func() { |
|
uid := r.Int63n(100000000) |
|
err, gotLock, localValue := d.LockUser(ctx, uid) |
|
So(err, ShouldBeNil) |
|
So(gotLock, ShouldEqual, true) |
|
|
|
err = d.UnLockUser(ctx, uid, localValue) |
|
So(err, ShouldBeNil) |
|
|
|
err, gotLock, localValue = d.LockUser(ctx, uid) |
|
So(err, ShouldBeNil) |
|
So(gotLock, ShouldEqual, true) |
|
|
|
}) |
|
|
|
Convey("LockUser Twice", t, func() { |
|
uid := r.Int63n(100000000) |
|
err, gotLock, _ := d.LockUser(ctx, uid) |
|
So(err, ShouldBeNil) |
|
So(gotLock, ShouldEqual, true) |
|
|
|
err, gotLock, _ = d.LockUser(ctx, uid) |
|
So(err, ShouldBeNil) |
|
So(gotLock, ShouldEqual, false) |
|
|
|
}) |
|
}
|
|
|