126 lines
3.8 KiB
Go
126 lines
3.8 KiB
Go
package gameserver
|
|
|
|
import (
|
|
"strconv"
|
|
"testing"
|
|
|
|
"google.golang.org/protobuf/proto"
|
|
|
|
goproto "gac-hkrpg-go/protocol/proto"
|
|
)
|
|
|
|
func TestReadPrydwenLineupsUseCurrentClientAvatarResources(t *testing.T) {
|
|
lineups, err := readPrydwenLineups()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(lineups) != 3 {
|
|
t.Fatalf("want 3 MoC stage teams, got %d", len(lineups))
|
|
}
|
|
for stage, lineup := range lineups {
|
|
if len(lineup.GetAvatarList()) != 4 {
|
|
t.Fatalf("stage %d: want 4 avatars, got %d", stage+1, len(lineup.GetAvatarList()))
|
|
}
|
|
seen := map[uint32]bool{}
|
|
for slot, avatar := range lineup.GetAvatarList() {
|
|
if avatar.GetId() == 0 || avatar.GetAvatarType() != goproto.AvatarType_AVATAR_FORMAL_TYPE {
|
|
t.Fatalf("stage %d slot %d has invalid avatar resource: %v", stage+1, slot, avatar)
|
|
}
|
|
if seen[avatar.GetId()] {
|
|
t.Fatalf("stage %d repeats AvatarID %d", stage+1, avatar.GetId())
|
|
}
|
|
seen[avatar.GetId()] = true
|
|
if avatar.GetIndex() != uint32(slot) {
|
|
t.Fatalf("stage %d slot %d has index %d", stage+1, slot, avatar.GetIndex())
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestPrydwenRecommendationsCoverEveryEndgameMode(t *testing.T) {
|
|
snapshot, err := loadPrydwenSnapshot()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
avatarIDs, err := readPrydwenAvatarIDs(snapshot.AvatarAliases)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for _, mode := range []string{"moc", "pf", "as", "aa"} {
|
|
typeText := ""
|
|
for requestType, routedMode := range snapshot.Protocol.RequestTypeRoutes {
|
|
if routedMode == mode {
|
|
typeText = requestType
|
|
break
|
|
}
|
|
}
|
|
typeValue, err := strconv.ParseInt(typeText, 10, 32)
|
|
if err != nil {
|
|
t.Fatalf("mode %s has no valid request type route %q: %v", mode, typeText, err)
|
|
}
|
|
rsp, err := buildPrydwenRecommendResponse(&goproto.GetFriendRecommendLineupCsReq{
|
|
Type: goproto.JFNJKAPPNOF(typeValue),
|
|
Key: 0,
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("mode %s: %v", mode, err)
|
|
}
|
|
if rsp.GetType() != goproto.JFNJKAPPNOF(typeValue) {
|
|
t.Fatalf("mode %s response lost request type", mode)
|
|
}
|
|
group := rsp.GetMGKCKHIIICL()[0]
|
|
if mode == "aa" {
|
|
payload := group.GetLMHIOKFMDNE()
|
|
if payload == nil || len(payload.GetDNIGKDKIPPJ()) != len(snapshot.Modes[mode].Stages) {
|
|
t.Fatalf("AA response does not contain one Peak lineup per source stage: %v", payload)
|
|
}
|
|
for _, peak := range payload.GetDNIGKDKIPPJ() {
|
|
if peak.GetPeakId() == 0 || len(peak.GetAvatarList()) != 4 {
|
|
t.Fatalf("invalid AA Peak recommendation: %v", peak)
|
|
}
|
|
}
|
|
continue
|
|
}
|
|
payload := group.GetNHKCFOALAPD()
|
|
lineups, err := buildPrydwenLineups(snapshot.Modes[mode], avatarIDs)
|
|
if err != nil {
|
|
t.Fatalf("mode %s: %v", mode, err)
|
|
}
|
|
if payload == nil || len(payload.GetLineupList()) != len(lineups) {
|
|
t.Fatalf("mode %s response has wrong team count: %v", mode, payload)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestBuildPrydwenRecommendResponsePreservesRequestAndLineups(t *testing.T) {
|
|
req := &goproto.GetFriendRecommendLineupCsReq{
|
|
Type: goproto.JFNJKAPPNOF_JFNJKAPPNOF_JHOEBNNMKHB,
|
|
Key: 101201,
|
|
}
|
|
rsp, err := buildPrydwenRecommendResponse(req)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if rsp.GetType() != req.GetType() || rsp.GetKey() != req.GetKey() {
|
|
t.Fatalf("response context does not match request: req=%v rsp=%v", req, rsp)
|
|
}
|
|
if len(rsp.GetMGKCKHIIICL()) != 1 {
|
|
t.Fatalf("want one Prydwen recommendation group, got %d", len(rsp.GetMGKCKHIIICL()))
|
|
}
|
|
payload := rsp.GetMGKCKHIIICL()[0].GetNHKCFOALAPD()
|
|
if payload == nil || len(payload.GetLineupList()) != 3 {
|
|
t.Fatalf("want three stage lineups in the protocol recommendation oneof, got %v", payload)
|
|
}
|
|
encoded, err := proto.Marshal(rsp)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var decoded goproto.GetFriendRecommendLineupScRsp
|
|
if err := proto.Unmarshal(encoded, &decoded); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(decoded.GetMGKCKHIIICL()[0].GetNHKCFOALAPD().GetLineupList()) != 3 {
|
|
t.Fatal("wire round-trip lost recommended teams")
|
|
}
|
|
}
|