@@ -3,6 +3,8 @@ package main
33import (
44 "fmt"
55 "testing"
6+
7+ "go.uber.org/zap"
68)
79
810func Test_teamShuffle (t * testing.T ) {
@@ -362,6 +364,133 @@ func TestLbsLobby_findBestGCPRegion(t *testing.T) {
362364 })
363365}
364366
367+ func TestLbsLobby_sendLobbyChat_NilPeer (t * testing.T ) {
368+ lbs := NewLbs ()
369+ defer lbs .Quit ()
370+ go lbs .eventLoop ()
371+
372+ lobby := & LbsLobby {
373+ app : lbs ,
374+ Users : make (map [string ]* DBUser ),
375+ RenpoRooms : make (map [uint16 ]* LbsRoom ),
376+ ZeonRooms : make (map [uint16 ]* LbsRoom ),
377+ EntryUsers : make ([]string , 0 ),
378+ }
379+
380+ // Add a user to lobby.Users but NOT to lbs.userPeers,
381+ // so FindPeer returns nil.
382+ lobby .Users ["GHOST_USER" ] = & DBUser {UserID : "GHOST_USER" }
383+
384+ // This should not panic.
385+ func () {
386+ defer func () {
387+ if r := recover (); r != nil {
388+ t .Errorf ("sendLobbyChat panicked with nil peer: %v" , r )
389+ }
390+ }()
391+ lobby .sendLobbyChat ("SENDER" , "SenderName" , "hello" )
392+ }()
393+ }
394+
395+ func TestLbsLobby_NotifyLobbyEvent_NilPeer (t * testing.T ) {
396+ lbs := NewLbs ()
397+ defer lbs .Quit ()
398+ go lbs .eventLoop ()
399+
400+ lobby := & LbsLobby {
401+ app : lbs ,
402+ Users : make (map [string ]* DBUser ),
403+ RenpoRooms : make (map [uint16 ]* LbsRoom ),
404+ ZeonRooms : make (map [uint16 ]* LbsRoom ),
405+ EntryUsers : make ([]string , 0 ),
406+ }
407+
408+ // Add a user to lobby.Users but NOT to lbs.userPeers.
409+ lobby .Users ["GHOST_USER" ] = & DBUser {UserID : "GHOST_USER" }
410+
411+ // This should not panic.
412+ func () {
413+ defer func () {
414+ if r := recover (); r != nil {
415+ t .Errorf ("NotifyLobbyEvent panicked with nil peer: %v" , r )
416+ }
417+ }()
418+ lobby .NotifyLobbyEvent ("TEST" , "test message" )
419+ }()
420+ }
421+
422+ func TestLbsLobby_Exit_RemovesEntryUser (t * testing.T ) {
423+ lobby := & LbsLobby {
424+ Users : make (map [string ]* DBUser ),
425+ EntryUsers : []string {"A" , "B" , "C" },
426+ }
427+ lobby .Users ["B" ] = & DBUser {UserID : "B" }
428+
429+ lobby .Exit ("B" )
430+
431+ assertEq (t , []string {"A" , "C" }, lobby .EntryUsers )
432+ if _ , ok := lobby .Users ["B" ]; ok {
433+ t .Error ("expected user B to be removed from Users map" )
434+ }
435+ }
436+
437+ func TestLbsLobby_Exit_NonEntryUser (t * testing.T ) {
438+ lobby := & LbsLobby {
439+ Users : make (map [string ]* DBUser ),
440+ EntryUsers : []string {"A" , "C" },
441+ }
442+ lobby .Users ["B" ] = & DBUser {UserID : "B" }
443+
444+ lobby .Exit ("B" )
445+
446+ assertEq (t , []string {"A" , "C" }, lobby .EntryUsers )
447+ }
448+
449+ func TestLbsLobby_EntryCancel (t * testing.T ) {
450+ lbs := NewLbs ()
451+ defer lbs .Quit ()
452+ go lbs .eventLoop ()
453+
454+ lobby := & LbsLobby {
455+ app : lbs ,
456+ Users : make (map [string ]* DBUser ),
457+ RenpoRooms : make (map [uint16 ]* LbsRoom ),
458+ ZeonRooms : make (map [uint16 ]* LbsRoom ),
459+ EntryUsers : []string {"A" , "B" , "C" },
460+ }
461+
462+ peer := & LbsPeer {
463+ DBUser : DBUser {UserID : "B" },
464+ Team : TeamRenpo ,
465+ app : lbs ,
466+ PlatformInfo : map [string ]string {},
467+ logger : zap .NewNop (),
468+ chWrite : make (chan bool , 1 ),
469+ }
470+ lbs .Locked (func (l * Lbs ) {
471+ l .userPeers ["B" ] = peer
472+ })
473+ defer lbs .Locked (func (l * Lbs ) {
474+ delete (l .userPeers , "B" )
475+ })
476+ lobby .Users ["B" ] = & peer .DBUser
477+
478+ lobby .EntryCancel (peer )
479+
480+ assertEq (t , []string {"A" , "C" }, lobby .EntryUsers )
481+ }
482+
483+ func TestLbsLobby_EntryPicked (t * testing.T ) {
484+ lobby := & LbsLobby {
485+ EntryUsers : []string {"A" , "B" , "C" },
486+ }
487+
488+ peer := & LbsPeer {DBUser : DBUser {UserID : "B" }}
489+ lobby .EntryPicked (peer )
490+
491+ assertEq (t , []string {"A" , "C" }, lobby .EntryUsers )
492+ }
493+
365494func TestLbsLobby_canStartBattle (t * testing.T ) {
366495 lbs := NewLbs ()
367496 defer lbs .Quit ()
0 commit comments