411 lines
16 KiB
Go
411 lines
16 KiB
Go
package gameServerMgr
|
||
|
||
import (
|
||
"Framework/managecenterModel"
|
||
"goutil/stringUtil"
|
||
"testing"
|
||
)
|
||
|
||
func TestChargeUtil_GetChargeConfigList(t *testing.T) {
|
||
/*
|
||
渠道充值配置:[{"ProductId":"fzxh_00060","ChargePoint":6,"GamePoint":60,"Ratio":10,"GiveGamePoint":6,"FirstGiveGamePoint":60,"GiveRatio":0.1,"VipLv":0,"IfFirstShow":1,"IfSecondShow":1,"IsMonthCard":false},{"ProductId":"fzxh_00300","ChargePoint":30,"GamePoint":300,"Ratio":10,"GiveGamePoint":30,"FirstGiveGamePoint":300,"GiveRatio":0.1,"VipLv":0,"IfFirstShow":1,"IfSecondShow":1,"IsMonthCard":false},{"ProductId":"fzxh_00500","ChargePoint":50,"GamePoint":550,"Ratio":11,"GiveGamePoint":110,"FirstGiveGamePoint":550,"GiveRatio":0.2,"VipLv":1,"IfFirstShow":1,"IfSecondShow":1,"IsMonthCard":false},{"ProductId":"fzxh_00980","ChargePoint":98,"GamePoint":1470,"Ratio":15,"GiveGamePoint":441,"FirstGiveGamePoint":1470,"GiveRatio":0.3,"VipLv":5,"IfFirstShow":1,"IfSecondShow":1,"IsMonthCard":false},{"ProductId":"fzxh_restriction_18","ChargePoint":18,"GamePoint":90,"Ratio":5,"GiveGamePoint":0,"FirstGiveGamePoint":0,"GiveRatio":0,"VipLv":3,"IfFirstShow":1,"IfSecondShow":1,"IsMonthCard":true},{"ProductId":"fzxh_restriction_50","ChargePoint":50,"GamePoint":300,"Ratio":6,"GiveGamePoint":0,"FirstGiveGamePoint":0,"GiveRatio":0,"VipLv":1,"IfFirstShow":1,"IfSecondShow":1,"IsMonthCard":true}]
|
||
*/
|
||
|
||
var managecenterUrl = "http://managecenterapitest-xxx.79yougame.com/"
|
||
var serverGroupId int32 = 20001
|
||
var partnerId int32 = 1001
|
||
|
||
//激活器服务器,获取mc配置
|
||
error := ActiveServer(managecenterUrl, serverGroupId)
|
||
if error != nil {
|
||
t.Fatalf("激活服务器出现错误:%v", error)
|
||
}
|
||
|
||
type VipRange struct {
|
||
MinVip byte
|
||
MaxVip byte
|
||
}
|
||
|
||
var isMonthCard = false
|
||
var maxVip byte = 20
|
||
|
||
vipMap := make(map[VipRange][]float64)
|
||
vipMap[VipRange{MinVip: 0, MaxVip: 0}] = []float64{6, 30}
|
||
vipMap[VipRange{MinVip: 1, MaxVip: 4}] = []float64{6, 30, 50}
|
||
vipMap[VipRange{MinVip: 5, MaxVip: maxVip}] = []float64{6, 30, 50, 98}
|
||
|
||
isExistsChargeConfig := func(configs []*managecenterModel.ChargeConfig, point float64) bool {
|
||
for _, item := range configs {
|
||
if item.ChargePoint == point {
|
||
return true
|
||
}
|
||
}
|
||
|
||
return false
|
||
}
|
||
|
||
//每个VIP等级都获取一遍充值档位
|
||
for vipRange, points := range vipMap {
|
||
for vip := vipRange.MinVip; vip <= vipRange.MaxVip; vip++ {
|
||
showChargeList, exists, error := ChargeUtilObj.GetChargeConfigList(partnerId, vip, isMonthCard, func(config *managecenterModel.ChargeConfig) bool {
|
||
if config.IfFirstShow == 1 && config.IfSecondShow == 1 {
|
||
return true
|
||
}
|
||
|
||
return false
|
||
})
|
||
|
||
if error != nil {
|
||
t.Fatalf("获取充值配置列表出现错误:%v", error)
|
||
}
|
||
|
||
if !exists {
|
||
t.Fatalf("PartnerId[%d],Vip[%d],IsMonthCard[%v],未找到充值配置列表", partnerId, vip, isMonthCard)
|
||
}
|
||
|
||
for _, point := range points {
|
||
if !isExistsChargeConfig(showChargeList, point) {
|
||
t.Fatalf("PartnerId[%d],Vip[%d],IsMonthCard[%v],金额[%f]未找到充值配置", partnerId, vip, isMonthCard, point)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// 测试生成订单号
|
||
func TestChargeUtil_GenerateOrderId(t *testing.T) {
|
||
var chargeServerUrl = "https://chargetest-xht.moqikaka.com/API/GenerateOrderId.ashx"
|
||
var serverGroupId int32 = 20001
|
||
var partnerId int32 = 1001
|
||
var productId = "fzxh_00060"
|
||
var userId = stringUtil.GetNewGUID()
|
||
var playerId = stringUtil.GetNewGUID()
|
||
var isMonthCard = true
|
||
|
||
//生成订单号
|
||
orderId, error := ChargeUtilObj.GenerateOrderId(
|
||
chargeServerUrl, productId, partnerId, serverGroupId, userId, playerId, "macmacmacmac", "idfa", "ip", "imei", "extra", isMonthCard)
|
||
if error != nil {
|
||
t.Fatalf("生成订单号[GenerateOrderId]出现错误:%v", error)
|
||
}
|
||
|
||
t.Logf("生成订单号[GenerateOrderId]:%s", orderId)
|
||
}
|
||
|
||
// 测试验证充值回调签名
|
||
func TestChargeUtil_CheckChargeSign(t *testing.T) {
|
||
var managecenterUrl = "http://managecenterapitest-xxx.79yougame.com/"
|
||
var serverGroupId int32 = 20001
|
||
var partnerId int32 = 1001
|
||
var playerId = "04bade21-d7f7-4188-bc7c-8914c5330a23"
|
||
var orderId = "1001_20001_1590394423_2"
|
||
var productId = "fzxh_00060"
|
||
var deviceIdentifier = "deviceIdentifier"
|
||
//var loginKey = "a0482eaf-14e8-4a65-950e-864214f62da5"
|
||
|
||
//激活器服务器,获取mc配置
|
||
error := ActiveServer(managecenterUrl, serverGroupId)
|
||
if error != nil {
|
||
t.Fatalf("激活服务器出现错误:%v", error)
|
||
}
|
||
|
||
//充值服务器生成的签名
|
||
var targetSign = "02bd33319fc0f520a3e801f725973017"
|
||
|
||
//验证充值回调签名是否正确
|
||
if !ChargeUtilObj.CheckChargeSign(partnerId, serverGroupId, playerId, orderId, productId, deviceIdentifier, targetSign) {
|
||
t.Fatalf("验证充值回调签名失败!目标签名:%s", targetSign)
|
||
}
|
||
}
|
||
|
||
// 测试获取充值配置
|
||
func TestChargeUtil_GetChargeConfigItem(t *testing.T) {
|
||
/*
|
||
渠道充值配置:[{"ProductId":"fzxh_00060","ChargePoint":6,"GamePoint":60,"Ratio":10,"GiveGamePoint":6,"FirstGiveGamePoint":60,"GiveRatio":0.1,"VipLv":0,"IfFirstShow":1,"IfSecondShow":1,"IsMonthCard":false},{"ProductId":"fzxh_00300","ChargePoint":30,"GamePoint":300,"Ratio":10,"GiveGamePoint":30,"FirstGiveGamePoint":300,"GiveRatio":0.1,"VipLv":0,"IfFirstShow":1,"IfSecondShow":1,"IsMonthCard":false},{"ProductId":"fzxh_00500","ChargePoint":50,"GamePoint":550,"Ratio":11,"GiveGamePoint":110,"FirstGiveGamePoint":550,"GiveRatio":0.2,"VipLv":1,"IfFirstShow":1,"IfSecondShow":1,"IsMonthCard":false},{"ProductId":"fzxh_00980","ChargePoint":98,"GamePoint":1470,"Ratio":15,"GiveGamePoint":441,"FirstGiveGamePoint":1470,"GiveRatio":0.3,"VipLv":5,"IfFirstShow":1,"IfSecondShow":1,"IsMonthCard":false},{"ProductId":"fzxh_restriction_18","ChargePoint":18,"GamePoint":90,"Ratio":5,"GiveGamePoint":0,"FirstGiveGamePoint":0,"GiveRatio":0,"VipLv":3,"IfFirstShow":1,"IfSecondShow":1,"IsMonthCard":true},{"ProductId":"fzxh_restriction_50","ChargePoint":50,"GamePoint":300,"Ratio":6,"GiveGamePoint":0,"FirstGiveGamePoint":0,"GiveRatio":0,"VipLv":1,"IfFirstShow":1,"IfSecondShow":1,"IsMonthCard":true}]
|
||
*/
|
||
|
||
var managecenterUrl = "http://managecenterapitest-xxx.79yougame.com/"
|
||
var serverGroupId int32 = 20001
|
||
var partnerId int32 = 1001
|
||
var maxVip byte = 20
|
||
|
||
//激活器服务器,获取mc配置
|
||
error := ActiveServer(managecenterUrl, serverGroupId)
|
||
if error != nil {
|
||
t.Fatalf("激活服务器出现错误:%v", error)
|
||
}
|
||
|
||
type VipRange struct {
|
||
MinVip byte
|
||
MaxVip byte
|
||
}
|
||
|
||
//#region 测试获取普通充值配置
|
||
|
||
isMonthCard := false
|
||
vipMap := make(map[VipRange][]float64)
|
||
vipMap[VipRange{MinVip: 0, MaxVip: 0}] = []float64{6, 30}
|
||
vipMap[VipRange{MinVip: 1, MaxVip: 4}] = []float64{6, 30, 50}
|
||
vipMap[VipRange{MinVip: 5, MaxVip: maxVip}] = []float64{6, 30, 50, 98}
|
||
|
||
//每个VIP等级都获取一遍充值档位
|
||
for vipRange, points := range vipMap {
|
||
for vip := vipRange.MinVip; vip <= vipRange.MaxVip; vip++ {
|
||
for _, point := range points {
|
||
//获取充值配置
|
||
chargeConfig, exists, error := ChargeUtilObj.GetChargeConfigItem(partnerId, vip, isMonthCard, point)
|
||
if error != nil {
|
||
t.Fatalf("普通充值,获取充值配置[GetChargeConfigItem],Vip[%d],Point[%f]获取充值档位出现错误:%v", vip, point, error)
|
||
}
|
||
|
||
if !exists {
|
||
t.Fatalf("普通充值,获取充值配置[GetChargeConfigItem],Vip[%d],Point[%f]未找到充值档位配置", vip, point)
|
||
}
|
||
|
||
if chargeConfig == nil {
|
||
t.Fatalf("普通充值,获取充值配置[GetChargeConfigItem],Vip[%d],Point[%f]找到的充值档位配置为nil", vip, point)
|
||
}
|
||
|
||
if chargeConfig.ChargePoint != point {
|
||
t.Fatalf("普通充值,获取充值配置[GetChargeConfigItem],Vip[%d],Point[%f]找到的充值档位ChargePoint[%f]错误", vip, point, chargeConfig.ChargePoint)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//#endregion
|
||
|
||
//#region 测试获取月卡充值配置
|
||
|
||
isMonthCard = true
|
||
vipMap = make(map[VipRange][]float64)
|
||
vipMap[VipRange{MinVip: 1, MaxVip: 1}] = []float64{50}
|
||
vipMap[VipRange{MinVip: 3, MaxVip: maxVip}] = []float64{18, 50}
|
||
|
||
//每个VIP等级都获取一遍充值档位
|
||
for vipRange, points := range vipMap {
|
||
for vip := vipRange.MinVip; vip <= vipRange.MaxVip; vip++ {
|
||
for _, point := range points {
|
||
//获取充值配置
|
||
chargeConfig, exists, error := ChargeUtilObj.GetChargeConfigItem(partnerId, vip, isMonthCard, point)
|
||
if error != nil {
|
||
t.Fatalf("月卡充值,获取充值配置[GetChargeConfigItem],Vip[%d],Point[%f]获取充值档位出现错误:%v", vip, point, error)
|
||
}
|
||
|
||
if !exists {
|
||
t.Fatalf("月卡充值,获取充值配置[GetChargeConfigItem],Vip[%d],Point[%f]未找到充值档位配置", vip, point)
|
||
}
|
||
|
||
if chargeConfig == nil {
|
||
t.Fatalf("月卡充值,Vip[%d],Point[%f]找到的充值档位配置为nil", vip, point)
|
||
}
|
||
|
||
if chargeConfig.ChargePoint != point {
|
||
t.Fatalf("月卡充值,获取充值配置[GetChargeConfigItem],Vip[%d],Point[%f]找到的充值档位ChargePoint[%f]错误", vip, point, chargeConfig.ChargePoint)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//#endregion
|
||
}
|
||
|
||
// 测试计算充值获得的游戏货币
|
||
func TestChargeUtil_CalcChargeAllGamePoint(t *testing.T) {
|
||
/*
|
||
渠道充值配置:[{"ProductId":"fzxh_00060","ChargePoint":6,"GamePoint":60,"Ratio":10,"GiveGamePoint":6,"FirstGiveGamePoint":60,"GiveRatio":0.1,"VipLv":0,"IfFirstShow":1,"IfSecondShow":1,"IsMonthCard":false},{"ProductId":"fzxh_00300","ChargePoint":30,"GamePoint":300,"Ratio":10,"GiveGamePoint":30,"FirstGiveGamePoint":300,"GiveRatio":0.1,"VipLv":0,"IfFirstShow":1,"IfSecondShow":1,"IsMonthCard":false},{"ProductId":"fzxh_00500","ChargePoint":50,"GamePoint":550,"Ratio":11,"GiveGamePoint":110,"FirstGiveGamePoint":550,"GiveRatio":0.2,"VipLv":1,"IfFirstShow":1,"IfSecondShow":1,"IsMonthCard":false},{"ProductId":"fzxh_00980","ChargePoint":98,"GamePoint":1470,"Ratio":15,"GiveGamePoint":441,"FirstGiveGamePoint":1470,"GiveRatio":0.3,"VipLv":5,"IfFirstShow":1,"IfSecondShow":1,"IsMonthCard":false},{"ProductId":"fzxh_restriction_18","ChargePoint":18,"GamePoint":90,"Ratio":5,"GiveGamePoint":0,"FirstGiveGamePoint":0,"GiveRatio":0,"VipLv":3,"IfFirstShow":1,"IfSecondShow":1,"IsMonthCard":true},{"ProductId":"fzxh_restriction_50","ChargePoint":50,"GamePoint":300,"Ratio":6,"GiveGamePoint":0,"FirstGiveGamePoint":0,"GiveRatio":0,"VipLv":1,"IfFirstShow":1,"IfSecondShow":1,"IsMonthCard":true}]
|
||
*/
|
||
|
||
var managecenterUrl = "http://managecenterapitest-xxx.79yougame.com/"
|
||
var serverGroupId int32 = 20001
|
||
var partnerId int32 = 1001
|
||
|
||
//激活器服务器,获取mc配置
|
||
error := ActiveServer(managecenterUrl, serverGroupId)
|
||
if error != nil {
|
||
t.Fatalf("激活服务器出现错误:%v", error)
|
||
}
|
||
|
||
//输入订单信息
|
||
type OrderItem struct {
|
||
Vip byte
|
||
Money float64
|
||
ActivityMoney float64
|
||
ProductId string
|
||
IsFirstCharge bool
|
||
IsMonthCard bool
|
||
}
|
||
|
||
//计算结果
|
||
type GamePointResult struct {
|
||
ChargeGamePoint int
|
||
GiveGamePoint int
|
||
ActivityGamePoint int
|
||
TotalGamePoint int
|
||
}
|
||
|
||
testOrderMap := make(map[OrderItem]GamePointResult)
|
||
|
||
//#region 普通充值
|
||
|
||
testOrderMap[OrderItem{
|
||
Vip: 0,
|
||
Money: 6,
|
||
ActivityMoney: 1,
|
||
ProductId: "fzxh_00060",
|
||
IsFirstCharge: true,
|
||
IsMonthCard: false,
|
||
}] = GamePointResult{
|
||
ChargeGamePoint: 60, //GamePoint
|
||
GiveGamePoint: 60, //FirstGiveGamePoint
|
||
ActivityGamePoint: 10, //ActivityMoney*Ratio = 1*10
|
||
TotalGamePoint: 130,
|
||
} //首充6元,活动金额1元
|
||
|
||
testOrderMap[OrderItem{
|
||
Vip: 0,
|
||
Money: 6,
|
||
ActivityMoney: 1,
|
||
ProductId: "fzxh_00060",
|
||
IsFirstCharge: false,
|
||
IsMonthCard: false,
|
||
}] = GamePointResult{
|
||
ChargeGamePoint: 60, //GamePoint
|
||
GiveGamePoint: 6, //GiveGamePoint 6
|
||
ActivityGamePoint: 10, //ActivityMoney*Ratio = 1*10
|
||
TotalGamePoint: 76,
|
||
} //非首充6元,活动金额1元
|
||
|
||
testOrderMap[OrderItem{
|
||
Vip: 0,
|
||
Money: 0,
|
||
ActivityMoney: 1,
|
||
ProductId: "fzxh_00060",
|
||
IsFirstCharge: false,
|
||
IsMonthCard: false,
|
||
}] = GamePointResult{
|
||
ChargeGamePoint: 60, //Money*Ratio = 6*10
|
||
GiveGamePoint: 6, //GiveGamePoint 6
|
||
ActivityGamePoint: 10, //ActivityMoney*Ratio = 1*10
|
||
TotalGamePoint: 76,
|
||
} //无金额匹配6元,活动金额1元
|
||
|
||
testOrderMap[OrderItem{
|
||
Vip: 0,
|
||
Money: 10,
|
||
ActivityMoney: 3,
|
||
ProductId: "",
|
||
IsFirstCharge: false,
|
||
IsMonthCard: false,
|
||
}] = GamePointResult{
|
||
ChargeGamePoint: 100, //Money*Ratio = 10*10
|
||
GiveGamePoint: 10, //Money*Ratio*GiveRatio 10 * 10 * 0.1
|
||
ActivityGamePoint: 30, //ActivityMoney*Ratio = 3*10
|
||
TotalGamePoint: 140,
|
||
} //无对应档位配置,模糊匹配10元,活动金额1元,实际匹配到6元档位
|
||
|
||
testOrderMap[OrderItem{
|
||
Vip: 3,
|
||
Money: 98,
|
||
ActivityMoney: 3,
|
||
ProductId: "",
|
||
IsFirstCharge: false,
|
||
IsMonthCard: false,
|
||
}] = GamePointResult{
|
||
ChargeGamePoint: 1078, //Money*Ratio = 98*11
|
||
GiveGamePoint: 216, //Money*Ratio*GiveRatio 98 * 11 * 0.2 = 215.6
|
||
ActivityGamePoint: 33, //ActivityMoney*Ratio = 3*11
|
||
TotalGamePoint: 1327,
|
||
} //Vip限制,匹配98元,实际匹配到50档位,活动金额3元
|
||
|
||
//#endregion
|
||
|
||
for order, result := range testOrderMap {
|
||
//计算充值获得的游戏币
|
||
chargeGamePoint, giveGamePoint, activityGamePoint, totalGamePoint, exists, err := ChargeUtilObj.CalcChargeAllGamePoint(
|
||
partnerId, order.Vip, order.IsMonthCard, order.Money, order.ActivityMoney, order.ProductId, order.IsFirstCharge)
|
||
|
||
if err != nil {
|
||
t.Fatalf("普通充值,计算充值获得游戏币[CalcChargeAllGamePoint],金额[%f] error:%v", order.Money, err)
|
||
}
|
||
|
||
if !exists {
|
||
t.Fatalf("普通充值,计算充值获得游戏币[CalcChargeAllGamePoint],金额[%f]未找到充值配置:%v", order.Money, exists)
|
||
}
|
||
|
||
if chargeGamePoint != result.ChargeGamePoint {
|
||
t.Fatalf("普通充值,计算充值获得游戏币[CalcChargeAllGamePoint],ChargeGamePoint计算结果不正确,金额[%f],期望[%d],结果[%d]", order.Money, result.ChargeGamePoint, chargeGamePoint)
|
||
}
|
||
|
||
if giveGamePoint != result.GiveGamePoint {
|
||
t.Fatalf("普通充值,计算充值获得游戏币[CalcChargeAllGamePoint],GiveGamePoint计算结果不正确,金额[%f],期望[%d],结果[%d]", order.Money, result.GiveGamePoint, giveGamePoint)
|
||
}
|
||
|
||
if activityGamePoint != result.ActivityGamePoint {
|
||
t.Fatalf("普通充值,计算充值获得游戏币[CalcChargeAllGamePoint],ActivityGamePoint计算结果不正确,金额[%f],期望[%d],结果[%d]", order.Money, result.ActivityGamePoint, activityGamePoint)
|
||
}
|
||
|
||
if totalGamePoint != result.TotalGamePoint {
|
||
t.Fatalf("普通充值,计算充值获得游戏币[CalcChargeAllGamePoint],TotalGamePoint计算结果不正确,金额[%f],期望[%d],结果[%d]", order.Money, result.TotalGamePoint, totalGamePoint)
|
||
}
|
||
}
|
||
|
||
//#region 月卡充值
|
||
|
||
testOrderMap[OrderItem{
|
||
Vip: 3,
|
||
Money: 18,
|
||
ProductId: "fzxh_restriction_18",
|
||
IsMonthCard: true,
|
||
}] = GamePointResult{
|
||
ChargeGamePoint: 90, //GamePoint
|
||
} //18元月卡
|
||
|
||
testOrderMap[OrderItem{
|
||
Vip: 0,
|
||
Money: 50,
|
||
ProductId: "fzxh_restriction_50",
|
||
IsMonthCard: true,
|
||
}] = GamePointResult{
|
||
ChargeGamePoint: 250, //Money * Ratio = 50 * 5
|
||
} //VIP限制,匹配50元月卡,实际匹配到18元月卡
|
||
|
||
testOrderMap[OrderItem{
|
||
Vip: 1,
|
||
Money: 0,
|
||
ProductId: "fzxh_restriction_50",
|
||
IsMonthCard: true,
|
||
}] = GamePointResult{
|
||
ChargeGamePoint: 300, //GamePoint
|
||
} //无金额匹配50元月卡
|
||
|
||
testOrderMap[OrderItem{
|
||
Vip: 0,
|
||
Money: 0,
|
||
ProductId: "fzxh_restriction_50",
|
||
IsMonthCard: true,
|
||
}] = GamePointResult{
|
||
ChargeGamePoint: 0, //匹配不成功
|
||
} //VIP限制,无金额匹配50元月卡
|
||
|
||
for order, result := range testOrderMap {
|
||
//计算充值获得的游戏币
|
||
chargeGamePoint, exists, err := ChargeUtilObj.CalcChargeGamePoint(
|
||
partnerId, order.Vip, order.IsMonthCard, order.Money, order.ProductId)
|
||
|
||
if err != nil {
|
||
t.Fatalf("月卡充值,计算充值获得游戏币[CalcChargeGamePoint],金额[%f] error:%v", order.Money, err)
|
||
}
|
||
|
||
if !exists {
|
||
t.Fatalf("月卡充值,计算充值获得游戏币[CalcChargeGamePoint],金额[%f]未找到充值配置:%v", order.Money, exists)
|
||
}
|
||
|
||
if chargeGamePoint != result.ChargeGamePoint {
|
||
t.Fatalf("月卡充值,计算充值获得游戏币[CalcChargeGamePoint],ChargeGamePoint计算结果不正确,金额[%f],期望[%d],结果[%d]", order.Money, result.ChargeGamePoint, chargeGamePoint)
|
||
}
|
||
}
|
||
|
||
//#endregion
|
||
}
|