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.
221 lines
5.5 KiB
221 lines
5.5 KiB
package dao |
|
|
|
import ( |
|
"context" |
|
// "encoding/binary" |
|
"flag" |
|
"testing" |
|
"time" |
|
|
|
"go-common/app/job/main/figure-timer/conf" |
|
"go-common/app/job/main/figure-timer/model" |
|
// "go-common/library/log" |
|
|
|
"github.com/pkg/errors" |
|
. "github.com/smartystreets/goconvey/convey" |
|
) |
|
|
|
var ( |
|
dao *Dao |
|
ctx = context.TODO() |
|
) |
|
|
|
func init() { |
|
var err error |
|
flag.Set("conf", "../cmd/figure-timer-job-test.toml") |
|
if err = conf.Init(); err != nil { |
|
panic(err) |
|
} |
|
dao = New(conf.Conf) |
|
} |
|
|
|
func TestInit(t *testing.T) { |
|
Convey("TEST init", t, func() { |
|
var err error |
|
So(dao.c, ShouldNotBeNil) |
|
So(dao.mysql, ShouldNotBeNil) |
|
So(dao.hbase, ShouldNotBeNil) |
|
So(dao.redis, ShouldNotBeNil) |
|
err = dao.Ping(ctx) |
|
|
|
So(err, ShouldBeNil) |
|
}) |
|
} |
|
|
|
func TestMysql(t *testing.T) { |
|
Convey("TEST figure", t, func() { |
|
var ( |
|
figure = &model.Figure{ |
|
Mid: 100, |
|
Score: 100, |
|
LawfulScore: 50, |
|
WideScore: 0, |
|
FriendlyScore: 23, |
|
BountyScore: 250, |
|
CreativityScore: 0, |
|
Ver: 0, |
|
} |
|
figure2 *model.Figure |
|
figureRank = &model.Rank{ |
|
ScoreFrom: 2000, |
|
ScoreTo: 3000, |
|
Percentage: 50, |
|
Ver: 233, |
|
} |
|
err error |
|
) |
|
figure.ID, err = dao.UpsertFigure(ctx, figure) |
|
So(err, ShouldBeNil) |
|
figure2, err = dao.Figure(ctx, figure.Mid) |
|
So(err, ShouldBeNil) |
|
So(figure2, ShouldNotBeNil) |
|
So(figure2.Ctime, ShouldNotBeEmpty) |
|
So(figure2.Ctime, ShouldHappenBefore, time.Now().Add(time.Second)) |
|
So(figure2.Mtime, ShouldNotBeEmpty) |
|
So(figure2.Mtime, ShouldHappenBefore, time.Now().Add(time.Second)) |
|
_, err = dao.InsertRankHistory(ctx, figureRank) |
|
So(err, ShouldBeNil) |
|
_, err = dao.UpsertRank(ctx, figureRank) |
|
So(err, ShouldBeNil) |
|
}) |
|
Convey("TEST figures", t, func() { |
|
for shard := 0; shard < 100; shard++ { |
|
var ( |
|
end bool |
|
fromMid = int64(shard) |
|
figures []*model.Figure |
|
err error |
|
) |
|
for !end { |
|
figures, end, err = dao.Figures(ctx, fromMid, 100) |
|
So(err, ShouldBeNil) |
|
for _, f := range figures { |
|
So(f.Mid, ShouldBeGreaterThan, 0) |
|
if fromMid < f.Mid { |
|
fromMid = f.Mid |
|
} |
|
} |
|
} |
|
} |
|
}) |
|
} |
|
|
|
func TestRedis(t *testing.T) { |
|
Convey("TEST figure", t, func() { |
|
var ( |
|
figure = &model.Figure{ |
|
Mid: 23, |
|
Score: 100, |
|
LawfulScore: 50, |
|
WideScore: 0, |
|
FriendlyScore: 23, |
|
BountyScore: 250, |
|
CreativityScore: 0, |
|
Ver: 0, |
|
} |
|
figure2 *model.Figure |
|
err error |
|
) |
|
err = dao.SetFigureCache(ctx, figure) |
|
So(err, ShouldBeNil) |
|
figure2, err = dao.FigureCache(ctx, figure.Mid) |
|
So(err, ShouldBeNil) |
|
So(figure2, ShouldNotBeNil) |
|
So(figure, ShouldResemble, figure2) |
|
}) |
|
Convey("TEST pending mids", t, func() { |
|
var ( |
|
mid int64 = 23 |
|
ver int64 |
|
shard = mid % dao.c.Property.PendingMidShard |
|
mids []int64 |
|
err error |
|
) |
|
err = dao.setPendingMidCache(ctx, mid, ver) |
|
So(err, ShouldBeNil) |
|
mids, err = dao.PendingMidsCache(ctx, ver, shard) |
|
So(err, ShouldBeNil) |
|
So(mids, ShouldNotBeEmpty) |
|
}) |
|
} |
|
|
|
func (d *Dao) setPendingMidCache(c context.Context, mid int64, ver int64) (err error) { |
|
var ( |
|
key = keyPendingMids(ver, mid%d.c.Property.PendingMidShard) |
|
conn = d.redis.Get(c) |
|
) |
|
defer conn.Close() |
|
if err = conn.Send("SADD", key, mid); err != nil { |
|
err = errors.Wrapf(err, "conn.Send(SADD,%s,%d)", key, mid) |
|
return |
|
} |
|
if err = conn.Send("EXPIRE", key, d); err != nil { |
|
err = errors.Wrapf(err, "conn.Send(EXPIRE,%s,%v)", key, d) |
|
return |
|
} |
|
if err = conn.Flush(); err != nil { |
|
err = errors.WithStack(err) |
|
return |
|
} |
|
if _, err = conn.Receive(); err != nil { |
|
err = errors.WithStack(err) |
|
return |
|
} |
|
return |
|
} |
|
|
|
// func testHbase(t *testing.T) { |
|
// Convey("TEST figure_activity", t, func() { |
|
// var ( |
|
// mid int64 = 15555180 |
|
// err error |
|
// weekVer = time.Date(2017, 10, 2, 0, 0, 0, 0, time.Local).Unix() |
|
// weekVerFrom = time.Date(2016, 10, 3, 0, 0, 0, 0, time.Local).Unix() |
|
// weekVerTo = time.Date(2017, 9, 25, 0, 0, 0, 0, time.Local).Unix() |
|
// userInfo *model.UserInfo |
|
// figureRecord = &model.FigureRecord{ |
|
// Mid: mid, |
|
// XPosLawful: 12, |
|
// XNegLawful: 2, |
|
// XPosWide: 12, |
|
// XNegWide: 13, |
|
// XPosFriendly: 233, |
|
// XNegFriendly: 234, |
|
// XPosCreativity: 0, |
|
// XNegCreativity: 1, |
|
// XPosBounty: -250, |
|
// XNegBounty: -251, |
|
// } |
|
// figureRecords []*model.FigureRecord |
|
// ) |
|
// err = dao.putSpyScore(ctx, mid, 100) |
|
// So(err, ShouldBeNil) |
|
// userInfo, err = dao.UserInfo(ctx, mid, weekVer) |
|
// So(err, ShouldBeNil) |
|
// So(userInfo, ShouldNotBeNil) |
|
|
|
// err = dao.PutCalcRecord(ctx, figureRecord, time.Date(2016, 12, 3, 0, 0, 0, 0, time.Local).Unix()) |
|
// So(err, ShouldBeNil) |
|
|
|
// figureRecords, err = dao.CalcRecords(ctx, mid, weekVerFrom, weekVerTo+1) |
|
// So(err, ShouldBeNil) |
|
// So(figureRecords, ShouldNotBeEmpty) |
|
// }) |
|
// } |
|
|
|
// // PutSpyScore add spy score info. |
|
// func (d *Dao) putSpyScore(c context.Context, mid int64, score int8) (err error) { |
|
// var ( |
|
// key = rowKeyUserInfo(mid) |
|
// scoreB = make([]byte, 2) |
|
// ctx, cancel = context.WithTimeout(c, time.Duration(conf.Conf.Hbase.WriteTimeout)) |
|
// ) |
|
// defer cancel() |
|
// binary.BigEndian.PutUint16(scoreB, uint16(score)) |
|
// values := map[string]map[string][]byte{_hbaseUserFC: map[string][]byte{_hbaseUserQSpy: scoreB}} |
|
// if _, err = d.hbase.PutStr(ctx, _hbaseUserTable, key, values); err != nil { |
|
// log.Error("hbase.PutStr(%s, %s, %v) error(%v)", _hbaseUserTable, key, values, err) |
|
// return |
|
// } |
|
// return |
|
// }
|
|
|