123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418 |
- 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)
- }
|