Files
GaCy-GO/internal/gameserver/handlers_gacha_test.go
T

73 lines
1.7 KiB
Go

package gameserver
import (
"testing"
"gac-hkrpg-go/internal/common"
pb "gac-hkrpg-go/protocol/proto"
"google.golang.org/protobuf/proto"
)
func TestGetGachaInfoScRspWireTags(t *testing.T) {
if err := common.LoadBannersConfig(); err != nil {
t.Fatal(err)
}
rsp := &pb.GetGachaInfoScRsp{
Retcode: 0,
GachaRandom: 1234,
}
banners := common.GetVisibleBanners(1)
if len(banners) == 0 {
t.Fatal("expected visible banners")
}
for _, b := range banners {
rsp.GachaInfoList = append(rsp.GachaInfoList, b.ToProtoInfo())
}
bin, err := proto.Marshal(rsp)
if err != nil {
t.Fatalf("failed to marshal GetGachaInfoScRsp: %v", err)
}
// Verify that tag 15 (gacha_info_list) is present:
// Field number 15, wire type 2 (length delimited) -> (15 << 3) | 2 = 122 = 0x7a
tag15Found := false
for _, b := range bin {
if b == 0x7a {
tag15Found = true
break
}
}
if !tag15Found {
t.Errorf("Tag 15 (0x7a) for gacha_info_list was NOT found in serialized payload!")
}
// Unmarshal back to ensure clean round-trip
var decoded pb.GetGachaInfoScRsp
if err := proto.Unmarshal(bin, &decoded); err != nil {
t.Fatalf("failed to unmarshal: %v", err)
}
if len(decoded.GachaInfoList) != len(banners) {
t.Fatalf("expected %d banners, got %d", len(banners), len(decoded.GachaInfoList))
}
// Verify banner 1001
var found1001 *pb.GachaInfo
for _, info := range decoded.GachaInfoList {
if info.GachaId == 1001 {
found1001 = info
break
}
}
if found1001 == nil {
t.Fatal("banner 1001 not found in decoded response")
}
if found1001.EndTime == 0 {
t.Errorf("banner 1001 EndTime should not be 0")
}
if found1001.GachaCeiling == nil {
t.Errorf("banner 1001 GachaCeiling should not be nil")
}
}