419 lines
10 KiB
Go
419 lines
10 KiB
Go
|
package dao
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"go-common/app/job/main/passport-game-data/model"
|
||
|
|
||
|
. "github.com/smartystreets/goconvey/convey"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
_timeFormat = "2006-01-02 15:04:05"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
_loc = time.Now().Location()
|
||
|
)
|
||
|
|
||
|
func TestDao_AddAsoAccountsCloud(t *testing.T) {
|
||
|
once.Do(startDao)
|
||
|
|
||
|
Convey("batch add aso account to cloud", t, func() {
|
||
|
Convey("single", func() {
|
||
|
as := make([]*model.AsoAccount, 0)
|
||
|
|
||
|
a := &model.AsoAccount{
|
||
|
Mid: 12047569,
|
||
|
UserID: "bili_1710676855",
|
||
|
Uname: "Bili_12047569",
|
||
|
Pwd: "3686c9d96ae6896fe117319ba6c07087",
|
||
|
Salt: "pdMXF856",
|
||
|
Email: "62fe0d616162f56ecab3e12a2de83ea6",
|
||
|
Tel: "bdb27b0300e3984e48e7aea5c672a243",
|
||
|
CountryID: 1,
|
||
|
MobileVerified: 1,
|
||
|
Isleak: 0,
|
||
|
}
|
||
|
|
||
|
as = append(as, a)
|
||
|
err := d.AddAsoAccountsCloud(context.TODO(), as)
|
||
|
|
||
|
So(err, ShouldBeNil)
|
||
|
})
|
||
|
|
||
|
Convey("multiple", func() {
|
||
|
as := make([]*model.AsoAccount, 0)
|
||
|
|
||
|
a := &model.AsoAccount{
|
||
|
Mid: 12047569,
|
||
|
UserID: "bili_1710676855",
|
||
|
Uname: "Bili_12047569",
|
||
|
Pwd: "3686c9d96ae6896fe117319ba6c07087",
|
||
|
Salt: "pdMXF856",
|
||
|
Email: "62fe0d616162f56ecab3e12a2de83ea6",
|
||
|
Tel: "bdb27b0300e3984e48e7aea5c672a243",
|
||
|
CountryID: 1,
|
||
|
MobileVerified: 1,
|
||
|
Isleak: 0,
|
||
|
}
|
||
|
|
||
|
as = append(as, a)
|
||
|
as = append(as, a)
|
||
|
err := d.AddAsoAccountsCloud(context.TODO(), as)
|
||
|
|
||
|
So(err, ShouldBeNil)
|
||
|
})
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func TestDao_AsoAccountRangeCloud(t *testing.T) {
|
||
|
once.Do(startDao)
|
||
|
|
||
|
Convey("get a aso account from cloud range start time and end time", t, func() {
|
||
|
Convey("when start time after end time", func() {
|
||
|
st, err := time.ParseInLocation(_timeFormat, "2018-01-22 12:50:41", _loc)
|
||
|
ed, err := time.ParseInLocation(_timeFormat, "2018-01-22 12:49:41", _loc)
|
||
|
So(err, ShouldBeNil)
|
||
|
|
||
|
res, err := d.AsoAccountRangeCloud(context.TODO(), st, ed)
|
||
|
So(err, ShouldBeNil)
|
||
|
So(len(res), ShouldEqual, 0)
|
||
|
})
|
||
|
|
||
|
Convey("when res is not empty", func() {
|
||
|
st, err := time.ParseInLocation(_timeFormat, "2018-01-22 12:50:41", _loc)
|
||
|
ed, err := time.ParseInLocation(_timeFormat, "2018-01-22 12:51:41", _loc)
|
||
|
So(err, ShouldBeNil)
|
||
|
|
||
|
res, err := d.AsoAccountRangeCloud(context.TODO(), st, ed)
|
||
|
So(err, ShouldBeNil)
|
||
|
So(len(res), ShouldBeGreaterThan, 0)
|
||
|
|
||
|
mid := int64(88888970)
|
||
|
ok := false
|
||
|
var target *model.AsoAccount
|
||
|
for _, a := range res {
|
||
|
if a.Mid == mid {
|
||
|
target = a
|
||
|
ok = true
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
So(ok, ShouldBeTrue)
|
||
|
So(target.Email, ShouldNotBeNil)
|
||
|
So(target.Tel, ShouldBeEmpty)
|
||
|
|
||
|
str, _ := json.Marshal(target)
|
||
|
t.Logf("res: %s", str)
|
||
|
})
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func TestDao_AsoAccountRangeLocal(t *testing.T) {
|
||
|
once.Do(startDao)
|
||
|
|
||
|
Convey("get a aso account from local range start time and end time", t, func() {
|
||
|
Convey("when start time is after end time", func() {
|
||
|
st, err := time.ParseInLocation(_timeFormat, "2018-01-22 12:50:41", _loc)
|
||
|
ed, err := time.ParseInLocation(_timeFormat, "2018-01-22 12:49:41", _loc)
|
||
|
So(err, ShouldBeNil)
|
||
|
|
||
|
res, err := d.AsoAccountRangeLocal(context.TODO(), st, ed)
|
||
|
So(err, ShouldBeNil)
|
||
|
So(len(res), ShouldEqual, 0)
|
||
|
})
|
||
|
|
||
|
Convey("when res is not empty", func() {
|
||
|
st, err := time.ParseInLocation(_timeFormat, "2018-01-22 12:50:41", _loc)
|
||
|
ed, err := time.ParseInLocation(_timeFormat, "2018-01-22 12:51:41", _loc)
|
||
|
So(err, ShouldBeNil)
|
||
|
|
||
|
res, err := d.AsoAccountRangeLocal(context.TODO(), st, ed)
|
||
|
So(err, ShouldBeNil)
|
||
|
So(len(res), ShouldBeGreaterThan, 0)
|
||
|
|
||
|
mid := int64(88888970)
|
||
|
ok := false
|
||
|
var target *model.OriginAsoAccount
|
||
|
for _, a := range res {
|
||
|
if a.Mid == mid {
|
||
|
target = a
|
||
|
ok = true
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
So(ok, ShouldBeTrue)
|
||
|
So(target.Email, ShouldNotBeNil)
|
||
|
So(target.Tel, ShouldNotBeEmpty)
|
||
|
|
||
|
str, _ := json.Marshal(target)
|
||
|
t.Logf("res: %s", str)
|
||
|
})
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func TestDao_AsoAccountsCloud(t *testing.T) {
|
||
|
once.Do(startDao)
|
||
|
|
||
|
Convey("get aso accounts from cloud", t, func() {
|
||
|
Convey("when res is empty", func() {
|
||
|
res, err := d.AsoAccountsCloud(context.TODO(), []int64{10000000000})
|
||
|
So(err, ShouldBeNil)
|
||
|
So(len(res), ShouldEqual, 0)
|
||
|
})
|
||
|
|
||
|
Convey("when res has single item", func() {
|
||
|
mids := []int64{88888970}
|
||
|
res, err := d.AsoAccountsCloud(context.TODO(), mids)
|
||
|
So(err, ShouldBeNil)
|
||
|
So(len(res), ShouldEqual, 1)
|
||
|
|
||
|
m := make(map[int64]*model.AsoAccount)
|
||
|
for _, a := range res {
|
||
|
m[a.Mid] = a
|
||
|
}
|
||
|
|
||
|
for _, mid := range mids {
|
||
|
a, ok := m[mid]
|
||
|
So(ok, ShouldBeTrue)
|
||
|
So(a.Email, ShouldBeEmpty)
|
||
|
So(a.Tel, ShouldNotBeEmpty)
|
||
|
|
||
|
str, _ := json.Marshal(a)
|
||
|
t.Logf("a: %s", str)
|
||
|
}
|
||
|
})
|
||
|
|
||
|
Convey("when res has multiple items", func() {
|
||
|
mids := []int64{88888970, 110000784}
|
||
|
res, err := d.AsoAccountsCloud(context.TODO(), mids)
|
||
|
So(err, ShouldBeNil)
|
||
|
So(len(res), ShouldEqual, 2)
|
||
|
|
||
|
m := make(map[int64]*model.AsoAccount)
|
||
|
for _, a := range res {
|
||
|
m[a.Mid] = a
|
||
|
}
|
||
|
|
||
|
for _, mid := range mids {
|
||
|
a, ok := m[mid]
|
||
|
So(ok, ShouldBeTrue)
|
||
|
So(a.Email, ShouldBeEmpty)
|
||
|
So(a.Tel, ShouldNotBeEmpty)
|
||
|
|
||
|
str, _ := json.Marshal(a)
|
||
|
t.Logf("a: %s", str)
|
||
|
}
|
||
|
})
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func TestDao_AsoAccountsLocal(t *testing.T) {
|
||
|
once.Do(startDao)
|
||
|
|
||
|
Convey("get aso accounts from local", t, func() {
|
||
|
Convey("when res is empty", func() {
|
||
|
res, err := d.AsoAccountsCloud(context.TODO(), []int64{10000000000})
|
||
|
So(err, ShouldBeNil)
|
||
|
So(len(res), ShouldEqual, 0)
|
||
|
})
|
||
|
|
||
|
Convey("when res has single item", func() {
|
||
|
mids := []int64{88888970}
|
||
|
res, err := d.AsoAccountsCloud(context.TODO(), mids)
|
||
|
So(err, ShouldBeNil)
|
||
|
So(len(res), ShouldEqual, 1)
|
||
|
|
||
|
m := make(map[int64]*model.AsoAccount)
|
||
|
for _, a := range res {
|
||
|
m[a.Mid] = a
|
||
|
}
|
||
|
|
||
|
for _, mid := range mids {
|
||
|
a, ok := m[mid]
|
||
|
So(ok, ShouldBeTrue)
|
||
|
So(a.Email, ShouldNotBeNil)
|
||
|
So(a.Tel, ShouldBeEmpty)
|
||
|
|
||
|
str, _ := json.Marshal(a)
|
||
|
t.Logf("a: %s", str)
|
||
|
}
|
||
|
})
|
||
|
|
||
|
Convey("when res has multiple items", func() {
|
||
|
mids := []int64{88888970, 110000784}
|
||
|
res, err := d.AsoAccountsCloud(context.TODO(), mids)
|
||
|
So(err, ShouldBeNil)
|
||
|
So(len(res), ShouldEqual, 2)
|
||
|
|
||
|
m := make(map[int64]*model.AsoAccount)
|
||
|
for _, a := range res {
|
||
|
m[a.Mid] = a
|
||
|
}
|
||
|
|
||
|
for _, mid := range mids {
|
||
|
a, ok := m[mid]
|
||
|
So(ok, ShouldBeTrue)
|
||
|
So(a.Email, ShouldNotBeNil)
|
||
|
So(a.Tel, ShouldBeEmpty)
|
||
|
|
||
|
str, _ := json.Marshal(a)
|
||
|
t.Logf("a: %s", str)
|
||
|
}
|
||
|
})
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func TestDao_UpdateAsoAccountCloud(t *testing.T) {
|
||
|
once.Do(startDao)
|
||
|
Convey("update aso account", t, func() {
|
||
|
Convey("when mtime matches", func() {
|
||
|
mid := int64(12047569)
|
||
|
|
||
|
as, err := d.AsoAccountsCloud(context.TODO(), []int64{mid})
|
||
|
So(err, ShouldBeNil)
|
||
|
So(len(as), ShouldEqual, 1)
|
||
|
|
||
|
account := as[0]
|
||
|
account.MobileVerified = 1 - account.MobileVerified
|
||
|
|
||
|
affected, err := d.UpdateAsoAccountCloud(context.TODO(), account, account.Mtime)
|
||
|
So(err, ShouldBeNil)
|
||
|
So(affected, ShouldEqual, 1)
|
||
|
})
|
||
|
|
||
|
Convey("when mtime not matches", func() {
|
||
|
mid := int64(12047569)
|
||
|
|
||
|
as, err := d.AsoAccountsCloud(context.TODO(), []int64{mid})
|
||
|
So(err, ShouldBeNil)
|
||
|
So(len(as), ShouldEqual, 1)
|
||
|
|
||
|
account := as[0]
|
||
|
account.MobileVerified = 1 - account.MobileVerified
|
||
|
|
||
|
affected, err := d.UpdateAsoAccountCloud(context.TODO(), account, time.Now())
|
||
|
So(err, ShouldBeNil)
|
||
|
So(affected, ShouldEqual, 0)
|
||
|
})
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func TestDao_AddIgnoreAsoAccount(t *testing.T) {
|
||
|
once.Do(startDao)
|
||
|
Convey("add ignore a aso account when not exist", t, func() {
|
||
|
//Convey("when not exists", func() {
|
||
|
// account := &model.AsoAccount{
|
||
|
// Mid: 12047569,
|
||
|
// UserID: "bili_1710676855",
|
||
|
// Uname: "Bili_12047569",
|
||
|
// Pwd: "3686c9d96ae6896fe117319ba6c07087",
|
||
|
// Salt: "pdMXF856",
|
||
|
// Email: "62fe0d616162f56ecab3e12a2de83ea6",
|
||
|
// Tel: "bdb27b0300e3984e48e7aea5c672a243",
|
||
|
// CountryID: 1,
|
||
|
// MobileVerified: 1,
|
||
|
// Isleak: 0,
|
||
|
// }
|
||
|
// affected, err := d.AddIgnoreAsoAccount(context.TODO(), account)
|
||
|
// So(err, ShouldBeNil)
|
||
|
// So(affected, ShouldEqual, 1)
|
||
|
//})
|
||
|
Convey("when not exists", func() {
|
||
|
account := &model.AsoAccount{
|
||
|
Mid: 12047569,
|
||
|
UserID: "bili_1710676855",
|
||
|
Uname: "Bili_12047569",
|
||
|
Pwd: "3686c9d96ae6896fe117319ba6c07087",
|
||
|
Salt: "pdMXF856",
|
||
|
Email: "62fe0d616162f56ecab3e12a2de83ea6",
|
||
|
Tel: "bdb27b0300e3984e48e7aea5c672a243",
|
||
|
CountryID: 1,
|
||
|
MobileVerified: 1,
|
||
|
Isleak: 0,
|
||
|
}
|
||
|
affected, err := d.AddIgnoreAsoAccount(context.TODO(), account)
|
||
|
So(err, ShouldBeNil)
|
||
|
So(affected, ShouldEqual, 0)
|
||
|
})
|
||
|
})
|
||
|
}
|
||
|
|
||
|
const (
|
||
|
_pattern = "INSERT INTO aso_account (mid,userid,uname,pwd,salt,email,tel,country_id,mobile_verified,isleak) VALUES(%d,'%s','%s','%s','%s',%s,%s,%d,%d,%d) ON DUPLICATE KEY UPDATE userid='%s',uname='%s',pwd='%s',salt='%s',email=%s,tel=%s,country_id=%d,mobile_verified=%d,isleak=%d;"
|
||
|
)
|
||
|
|
||
|
func TestDao_AddAsoAccount(t *testing.T) {
|
||
|
oldStr := `{
|
||
|
"mid": 255554277,
|
||
|
"userid": "bili_93079136999",
|
||
|
"uname": "白又寻",
|
||
|
"pwd": "8489c2cbddb7ee1438698a4f21ee1d78",
|
||
|
"salt": "r0MHcs5M",
|
||
|
"email": "",
|
||
|
"tel": "ca6d0469ca340f67f4635425dcd11581",
|
||
|
"country_id": 1,
|
||
|
"mobile_verified": 2,
|
||
|
"isleak": 0,
|
||
|
"ctime": "2017-11-25T12:03:38+08:00",
|
||
|
"mtime": "2017-12-04T14:19:59+08:00"
|
||
|
}`
|
||
|
|
||
|
old := new(model.AsoAccount)
|
||
|
err := json.Unmarshal([]byte(oldStr), &old)
|
||
|
if err != nil {
|
||
|
t.Error(err)
|
||
|
t.FailNow()
|
||
|
}
|
||
|
|
||
|
sql := getSQL(old)
|
||
|
t.Logf("sql: %s", sql)
|
||
|
|
||
|
afterStr := `{
|
||
|
"mid": 255554277,
|
||
|
"userid": "bili_93079136999",
|
||
|
"uname": "白又寻",
|
||
|
"pwd": "5f064b2ddb4d8cd5f9e01507ab1d34c6",
|
||
|
"salt": "ggr58PEs",
|
||
|
"email": "",
|
||
|
"tel": "ca6d0469ca340f67f4635425dcd11581",
|
||
|
"country_id": 1,
|
||
|
"mobile_verified": 2,
|
||
|
"isleak": 0,
|
||
|
"ctime": "0001-01-01T00:00:00Z",
|
||
|
"mtime": "2017-11-25T19:14:20+08:00"
|
||
|
}`
|
||
|
|
||
|
after := new(model.AsoAccount)
|
||
|
|
||
|
err = json.Unmarshal([]byte(afterStr), &after)
|
||
|
if err != nil {
|
||
|
t.Error(err)
|
||
|
t.FailNow()
|
||
|
}
|
||
|
|
||
|
afterSQL := getSQL(after)
|
||
|
t.Logf("after sql: %s", afterSQL)
|
||
|
|
||
|
}
|
||
|
|
||
|
func getSQL(a *model.AsoAccount) string {
|
||
|
email := "NULL"
|
||
|
tel := "NULL"
|
||
|
if len(a.Email) > 0 {
|
||
|
email = "'" + a.Email + "'"
|
||
|
}
|
||
|
|
||
|
if len(a.Tel) > 0 {
|
||
|
tel = "'" + a.Tel + "'"
|
||
|
}
|
||
|
|
||
|
return fmt.Sprintf(_pattern, a.Mid, a.UserID, a.Uname, a.Pwd, a.Salt, email, tel, a.CountryID, a.MobileVerified, a.Isleak, a.UserID, a.Uname, a.Pwd, a.Salt, email, tel, a.CountryID, a.MobileVerified, a.Isleak)
|
||
|
|
||
|
}
|