123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- package http
- import (
- "fmt"
- "sync"
- "testing"
- "context"
- . "github.com/smartystreets/goconvey/convey"
- "go-common/app/service/live/wallet/conf"
- "go-common/app/service/live/wallet/dao"
- "go-common/app/service/live/wallet/model"
- "go-common/app/service/live/wallet/service"
- httpx "go-common/library/net/http/blademaster"
- "math/rand"
- "net/url"
- "strconv"
- "time"
- )
- const (
- _getURL = "http://localhost:9901/x/internal/livewallet/wallet/get"
- _delCacheURL = "http://localhost:9901/x/internal/livewallet/wallet/delCache"
- _getAllURL = "http://localhost:9901/x/internal/livewallet/wallet/getAll"
- _getTidURL = "http://localhost:9901/x/internal/livewallet/wallet/getTid"
- _rechargeURL = "http://localhost:9901/x/internal/livewallet/wallet/recharge"
- _payURL = "http://localhost:9901/x/internal/livewallet/wallet/pay"
- _exchangeURL = "http://localhost:9901/x/internal/livewallet/wallet/exchange"
- _queryURL = "http://localhost:9901/x/internal/livewallet/wallet/query"
- )
- var (
- once sync.Once
- client *httpx.Client
- r *rand.Rand
- )
- type RechargeRes struct {
- Code int `json:"code"`
- Resp *model.MelonseedResp `json:"data"`
- }
- func getTestRandUid() int64 {
- return r.Int63n(10000000)
- }
- func getTestExtendTid() string {
- return fmt.Sprintf("test:ex:%d", r.Int31n(1000000))
- }
- func getTestRechargeOrPayForm(t *testing.T, serviceType int32, uid int64, coinType string, coinNum int64, tid interface{}) *model.RechargeOrPayForm {
- if tid == nil {
- res := queryGetTid(t, serviceType, getTestParamsJson())
- if res.Code != 0 {
- t.Errorf("get tid failed code : %d", res.Code)
- t.FailNow()
- }
- tid = res.Resp.TransactionId
- }
- return &model.RechargeOrPayForm{
- Uid: uid,
- CoinType: coinType,
- CoinNum: coinNum,
- ExtendTid: getTestExtendTid(),
- Timestamp: time.Now().Unix(),
- TransactionId: tid.(string),
- }
- }
- func queryRecharge(t *testing.T, form *model.RechargeOrPayForm, platform string) *RechargeRes {
- params := url.Values{}
- params.Set("uid", fmt.Sprintf("%d", form.Uid))
- params.Set("coin_type", form.CoinType)
- params.Set("coin_num", fmt.Sprintf("%d", form.CoinNum))
- params.Set("extend_tid", form.ExtendTid)
- params.Set("timestamp", fmt.Sprintf("%d", form.Timestamp))
- params.Set("transaction_id", form.TransactionId)
- params.Set("biz_reason", "2")
- params.Set("version", "1")
- req, _ := client.NewRequest("POST", _rechargeURL, "127.0.0.1", params)
- req.Header.Set("platform", platform)
- var res RechargeRes
- err := client.Do(context.TODO(), req, &res)
- if err != nil {
- t.Errorf("client.Do() error(%v)", err)
- t.FailNow()
- }
- return &res
- }
- func startHTTP() {
- if err := conf.Init(); err != nil {
- panic(fmt.Errorf("conf.Init() error(%v)", err))
- }
- svr := service.New(conf.Conf)
- client = httpx.NewClient(conf.Conf.HTTPClient)
- Init(conf.Conf, svr)
- r = rand.New(rand.NewSource(time.Now().UnixNano()))
- }
- func getIntCoinForTest(coinStr string) int64 {
- coin, _ := strconv.Atoi(coinStr)
- return int64(coin)
- }
- func TestRecharge(t *testing.T) {
- Convey("recharge normal 先调用get接口 再调用recharge 再调用get接口 比较用户钱包数据", t, testWith(func() {
- platforms := []string{"pc", "android", "ios"}
- var num int64 = 1000
- uid := getTestRandUid()
- d := dao.New(conf.Conf)
- for _, platform := range platforms {
- beforeWallet := getTestWallet(t, uid, platform)
- resTid := queryGetTid(t, int32(model.RECHARGETYPE), getTestParamsJson())
- if resTid.Code != 0 {
- t.Errorf("get tid failed code : %d", resTid.Code)
- t.FailNow()
- }
- tid := resTid.Resp.TransactionId
- res := queryRecharge(t, getTestRechargeOrPayForm(t, int32(model.RECHARGETYPE), uid, "gold", num, tid), platform)
- So(res.Code, ShouldEqual, 0)
- So(getIntCoinForTest(res.Resp.Gold)-getIntCoinForTest(beforeWallet.Gold), ShouldEqual, num)
- record, err := d.GetCoinStreamByTidAndOffset(context.TODO(), tid, 0)
- So(err, ShouldBeNil)
- So(record.Reserved1, ShouldEqual, 2)
- So(record.Version, ShouldEqual, 1)
- res = queryRecharge(t, getTestRechargeOrPayForm(t, int32(model.RECHARGETYPE), uid, "silver", num, nil), platform)
- So(res.Code, ShouldEqual, 0)
- So(getIntCoinForTest(res.Resp.Silver)-getIntCoinForTest(beforeWallet.Silver), ShouldEqual, num)
- afterWallet := getTestWallet(t, uid, platform)
- So(getIntCoinForTest(afterWallet.Gold)-getIntCoinForTest(beforeWallet.Gold), ShouldEqual, num)
- So(getIntCoinForTest(afterWallet.Silver)-getIntCoinForTest(beforeWallet.Silver), ShouldEqual, num)
- }
- }))
- }
|