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.
169 lines
4.8 KiB
169 lines
4.8 KiB
package vip |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
. "github.com/smartystreets/goconvey/convey" |
|
"go-common/app/service/live/xuser/model" |
|
"go-common/library/log" |
|
"testing" |
|
"time" |
|
) |
|
|
|
func TestDao_GetVipFromCache(t *testing.T) { |
|
initd() |
|
Convey("test get vip cache", t, testWithTestUser(func(u *TestUser) { |
|
var ( |
|
ctx = context.Background() |
|
info *model.VipInfo |
|
err error |
|
conn = d.redis.Get(ctx) |
|
key = getUserCacheKey(u.Uid) |
|
) |
|
log.Info("TestDao_GetVipFromCache uid(%d), key(%s)", u.Uid, key) |
|
|
|
// delete key at begin |
|
conn.Do("DEL", key) |
|
|
|
// should get nil info and err |
|
Convey("should get nil info and err", func() { |
|
info, err = d.GetVipFromCache(ctx, u.Uid) |
|
So(info, ShouldBeNil) |
|
So(err, ShouldBeNil) |
|
}) |
|
|
|
// set empty data |
|
Convey("set empty data", func() { |
|
conn.Do("HSET", key, _vipFieldName, "") |
|
info, err = d.GetVipFromCache(ctx, u.Uid) |
|
So(info, ShouldBeNil) |
|
So(err, ShouldBeNil) |
|
}) |
|
|
|
// set not a json |
|
Convey("set not a json", func() { |
|
conn.Do("HSET", key, _vipFieldName, "test") |
|
info, err = d.GetVipFromCache(ctx, u.Uid) |
|
So(info, ShouldBeNil) |
|
So(err, ShouldBeNil) |
|
}) |
|
|
|
// test vip/svip string format |
|
Convey("test vip/svip string format", func() { |
|
vipTime := time.Now().Add(time.Hour * 12).Format(model.TimeNano) |
|
svipTime := time.Now().AddDate(0, -1, 0).Format(model.TimeNano) |
|
conn.Do("HSET", key, _vipFieldName, fmt.Sprintf(`{"vip":"1","vip_time":"%s","svip":0,"svip_time":"%s"}`, vipTime, svipTime)) |
|
info, err = d.GetVipFromCache(ctx, u.Uid) |
|
So(info.Vip, ShouldEqual, 1) |
|
So(info.Svip, ShouldEqual, 0) |
|
So(err, ShouldBeNil) |
|
}) |
|
|
|
// set valid data |
|
Convey("set valid data", func() { |
|
vipTime := time.Now().Add(time.Hour * 12).Format(model.TimeNano) |
|
conn.Do("HSET", key, _vipFieldName, fmt.Sprintf(`{"vip":1,"vip_time":"%s","svip":0,"svip_time":"0000-00-00 00:00:00"}`, vipTime)) |
|
info, err = d.GetVipFromCache(ctx, u.Uid) |
|
So(info, ShouldNotBeNil) |
|
So(info.Vip, ShouldEqual, 1) |
|
So(info.VipTime, ShouldEqual, vipTime) |
|
So(info.Svip, ShouldEqual, 0) |
|
So(info.SvipTime, ShouldEqual, model.TimeEmpty) |
|
So(err, ShouldBeNil) |
|
}) |
|
|
|
// expired vip time |
|
Convey("set valid but expired vip time", func() { |
|
vip := 1 |
|
vipTime := time.Now().AddDate(0, 0, -1).Format(model.TimeNano) |
|
svip := 1 |
|
svipTime := time.Now().AddDate(0, -1, -1).Format(model.TimeNano) |
|
conn.Do("HSET", key, _vipFieldName, fmt.Sprintf(`{"vip":%d,"vip_time":"%s","svip":%d,"svip_time":"%s"}`, vip, vipTime, svip, svipTime)) |
|
info, err = d.GetVipFromCache(ctx, u.Uid) |
|
log.Info("expired vip time, info(%+v)", info) |
|
So(info, ShouldNotBeNil) |
|
So(info.Vip, ShouldEqual, 0) |
|
So(info.VipTime, ShouldEqual, vipTime) |
|
So(info.Svip, ShouldEqual, 0) |
|
So(info.SvipTime, ShouldEqual, svipTime) |
|
So(err, ShouldBeNil) |
|
}) |
|
})) |
|
} |
|
|
|
func TestDao_SetVipCache(t *testing.T) { |
|
initd() |
|
Convey("test set vip cache", t, testWithTestUser(func(u *TestUser) { |
|
var ( |
|
ctx = context.Background() |
|
info *model.VipInfo |
|
err error |
|
conn = d.redis.Get(ctx) |
|
key = getUserCacheKey(u.Uid) |
|
) |
|
log.Info("TestDao_GetVipFromCache uid(%d), key(%s)", u.Uid, key) |
|
// delete key at begin |
|
conn.Do("DEL", key) |
|
|
|
// nil info |
|
Convey("nil info", func() { |
|
err = d.SetVipCache(ctx, u.Uid, nil) |
|
So(err, ShouldBeNil) |
|
info, err = d.GetVipFromCache(ctx, u.Uid) |
|
log.Info("TestDao_SetVipCache get info1(%v), err(%v)", info, err) |
|
So(err, ShouldBeNil) |
|
So(info.Vip, ShouldEqual, 0) |
|
So(info.VipTime, ShouldEqual, model.TimeEmpty) |
|
So(info.Svip, ShouldEqual, 0) |
|
So(info.SvipTime, ShouldEqual, model.TimeEmpty) |
|
}) |
|
|
|
// set valid info |
|
Convey("set valid info", func() { |
|
info = &model.VipInfo{ |
|
Vip: 1, |
|
VipTime: time.Now().Add(time.Hour * 12).Format(model.TimeNano), |
|
Svip: 1, |
|
SvipTime: time.Now().Add(time.Hour * 6).Format(model.TimeNano), |
|
} |
|
err = d.SetVipCache(ctx, u.Uid, info) |
|
So(err, ShouldBeNil) |
|
info2, err := d.GetVipFromCache(ctx, u.Uid) |
|
log.Info("TestDao_SetVipCache get info2(%v), err(%v)", info, err) |
|
So(err, ShouldBeNil) |
|
So(info2.Vip, ShouldEqual, info.Vip) |
|
So(info2.VipTime, ShouldEqual, info.VipTime) |
|
So(info2.Svip, ShouldEqual, info.Svip) |
|
So(info2.SvipTime, ShouldEqual, info.SvipTime) |
|
}) |
|
})) |
|
} |
|
|
|
func TestDao_ClearCache(t *testing.T) { |
|
initd() |
|
Convey("test clear cache", t, testWithTestUser(func(u *TestUser) { |
|
var ( |
|
ctx = context.Background() |
|
err error |
|
conn = d.redis.Get(ctx) |
|
key = getUserCacheKey(u.Uid) |
|
) |
|
log.Info("TestDao_ClearCache uid(%d), key(%s)", u.Uid, key) |
|
// delete key at begin |
|
conn.Do("DEL", key) |
|
|
|
// del already deleted key |
|
Convey("del already deleted key", func() { |
|
err = d.ClearCache(ctx, u.Uid) |
|
So(err, ShouldBeNil) |
|
}) |
|
|
|
// set valid info |
|
Convey("set valid info", func() { |
|
err = d.SetVipCache(ctx, u.Uid, nil) |
|
So(err, ShouldBeNil) |
|
err = d.ClearCache(ctx, u.Uid) |
|
So(err, ShouldBeNil) |
|
}) |
|
})) |
|
}
|
|
|