73 lines
1.7 KiB
Go
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")
|
|
}
|
|
}
|