goProject/.svn/pristine/dc/dc57f91be57c23e1a91c62285e300272fd3623cd.svn-base
2025-01-06 16:21:36 +08:00

411 lines
16 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}