11using Moq ;
2-
2+ using Newtonsoft . Json ;
33using SteamQueryNet . Interfaces ;
44using SteamQueryNet . Models ;
55using SteamQueryNet . Tests . Responses ;
@@ -19,6 +19,7 @@ public class ServerQueryTests
1919 private const string IP_ADDRESS = "127.0.0.1" ;
2020 private const string HOST_NAME = "localhost" ;
2121 private const ushort PORT = 27015 ;
22+ private byte _packetCount = 0 ;
2223 private readonly IPEndPoint _localIpEndpoint = new IPEndPoint ( IPAddress . Parse ( "127.0.0.1" ) , 0 ) ;
2324
2425 [ Theory ]
@@ -70,76 +71,65 @@ public void ShouldNotInitializeWithAnInvalidHostAndPort(string invalidHost)
7071 [ Fact ]
7172 public void GetServerInfo_ShouldPopulateCorrectServerInfo ( )
7273 {
73- ( byte [ ] udpPacket , object responseObject ) = ResponseHelper . GetValidResponse ( ResponseHelper . ServerInfo ) ;
74+ ( byte [ ] responsePacket , object responseObject ) = ResponseHelper . GetValidResponse ( ResponseHelper . ServerInfo ) ;
7475 var expectedObject = ( ServerInfo ) responseObject ;
7576
76- byte [ ] requestPacket = RequestHelpers . PrepareAS2_INFO_Request ( ) ;
77- Mock < IUdpClient > udpClientMock = SetupReceiveResponse ( udpPacket ) ;
78- SetupRequestCompare ( requestPacket , udpClientMock ) ;
77+ byte [ ] [ ] requestPackets = new byte [ ] [ ] { RequestHelpers . PrepareAS2_INFO_Request ( ) } ;
78+ byte [ ] [ ] responsePackets = new byte [ ] [ ] { responsePacket } ;
79+
80+ Mock < IUdpClient > udpClientMock = SetupReceiveResponse ( responsePackets ) ;
81+ SetupRequestCompare ( requestPackets , udpClientMock ) ;
7982
80- // Ayylmao it looks ugly as hell but we will improve it later on.
8183 using ( var sq = new ServerQuery ( udpClientMock . Object , _localIpEndpoint ) )
8284 {
83- ServerInfo result = sq . GetServerInfo ( ) ;
84- Assert . Equal ( expectedObject . Bots , result . Bots ) ;
85- Assert . Equal ( expectedObject . EDF , result . EDF ) ;
86- Assert . Equal ( expectedObject . Environment , result . Environment ) ;
87- Assert . Equal ( expectedObject . Folder , result . Folder ) ;
88- Assert . Equal ( expectedObject . Game , result . Game ) ;
89- Assert . Equal ( expectedObject . GameID , result . GameID ) ;
90- Assert . Equal ( expectedObject . ID , result . ID ) ;
91- Assert . Equal ( expectedObject . Keywords , result . Keywords ) ;
92- Assert . Equal ( expectedObject . Map , result . Map ) ;
93- Assert . Equal ( expectedObject . MaxPlayers , result . MaxPlayers ) ;
94- Assert . Equal ( expectedObject . Name , result . Name ) ;
95- Assert . Equal ( expectedObject . Ping , result . Ping ) ;
96- Assert . Equal ( expectedObject . Players , result . Players ) ;
97- Assert . Equal ( expectedObject . Port , result . Port ) ;
98- Assert . Equal ( expectedObject . Protocol , result . Protocol ) ;
99- Assert . Equal ( expectedObject . ServerType , result . ServerType ) ;
100- Assert . Equal ( expectedObject . ShipGameInfo , result . ShipGameInfo ) ;
101- Assert . Equal ( expectedObject . SourceTVPort , result . SourceTVPort ) ;
102- Assert . Equal ( expectedObject . SourceTVServerName , result . SourceTVServerName ) ;
103- Assert . Equal ( expectedObject . SteamID , result . SteamID ) ;
104- Assert . Equal ( expectedObject . VAC , result . VAC ) ;
105- Assert . Equal ( expectedObject . Version , result . Version ) ;
106- Assert . Equal ( expectedObject . Visibility , result . Visibility ) ;
85+ Assert . Equal ( JsonConvert . SerializeObject ( expectedObject ) , JsonConvert . SerializeObject ( sq . GetServerInfo ( ) ) ) ;
10786 }
10887 }
10988
110- [ Fact ( Skip = "Not Completed Yet" ) ]
89+ [ Fact ]
11190 public void GetPlayers_ShouldPopulateCorrectPlayers ( )
11291 {
113- ( byte [ ] udpPacket , object responseObject ) = ResponseHelper . GetValidResponse ( ResponseHelper . GetPlayers ) ;
92+ ( byte [ ] playersPacket , object responseObject ) = ResponseHelper . GetValidResponse ( ResponseHelper . GetPlayers ) ;
11493 var expectedObject = ( List < Player > ) responseObject ;
11594
116- byte [ ] requestPacket = RequestHelpers . PrepareAS2_RENEW_CHALLENGE_Request ( ) ;
117- Mock < IUdpClient > udpClientMock = SetupReceiveResponse ( udpPacket ) ;
118- SetupRequestCompare ( requestPacket , udpClientMock ) ;
95+ byte [ ] challengePacket = RequestHelpers . PrepareAS2_RENEW_CHALLENGE_Request ( ) ;
96+
97+ // Both requests will be executed on AS2_PLAYER since thats how you refresh challenges.
98+ byte [ ] [ ] requestPackets = new byte [ ] [ ] { challengePacket , challengePacket } ;
99+
100+ // First response is the Challenge renewal response and the second
101+ byte [ ] [ ] responsePackets = new byte [ ] [ ] { challengePacket , playersPacket } ;
102+
103+ Mock < IUdpClient > udpClientMock = SetupReceiveResponse ( responsePackets ) ;
104+ SetupRequestCompare ( requestPackets , udpClientMock ) ;
119105
120106 // Ayylmao it looks ugly as hell but we will improve it later on.
121107 using ( var sq = new ServerQuery ( udpClientMock . Object , _localIpEndpoint ) )
122108 {
123- List < Player > result = sq . GetPlayers ( ) ;
124-
109+ Assert . Equal ( JsonConvert . SerializeObject ( expectedObject ) , JsonConvert . SerializeObject ( sq . GetPlayers ( ) ) ) ;
125110 }
126111 }
127112
128- private void SetupRequestCompare ( byte [ ] requestPacket , Mock < IUdpClient > udpClientMock )
113+ private void SetupRequestCompare ( IEnumerable < byte [ ] > requestPackets , Mock < IUdpClient > udpClientMock )
129114 {
130115 udpClientMock
131- . Setup ( x => x . SendAsync ( It . IsAny < byte [ ] > ( ) , requestPacket . Length ) )
116+ . Setup ( x => x . SendAsync ( It . IsAny < byte [ ] > ( ) , It . IsAny < int > ( ) ) )
132117 . Callback < byte [ ] , int > ( ( request , length ) =>
133118 {
134- Assert . True ( TestValidators . CompareBytes ( requestPacket , request ) ) ;
119+ Assert . True ( TestValidators . CompareBytes ( requestPackets . ElementAt ( _packetCount ) , request ) ) ;
120+ ++ _packetCount ;
135121 } ) ;
136122 }
137123
138- private Mock < IUdpClient > SetupReceiveResponse ( byte [ ] udpPacket )
124+ private Mock < IUdpClient > SetupReceiveResponse ( IEnumerable < byte [ ] > udpPackets )
139125 {
140- Mock < IUdpClient > udpClientMock = new Mock < IUdpClient > ( ) ;
141- UdpReceiveResult result = new UdpReceiveResult ( udpPacket , _localIpEndpoint ) ;
142- udpClientMock . Setup ( x => x . ReceiveAsync ( ) ) . ReturnsAsync ( result ) ;
126+ var udpClientMock = new Mock < IUdpClient > ( ) ;
127+ var setupSequence = udpClientMock . SetupSequence ( x => x . ReceiveAsync ( ) ) ;
128+ foreach ( byte [ ] packet in udpPackets )
129+ {
130+ setupSequence = setupSequence . ReturnsAsync ( new UdpReceiveResult ( packet , _localIpEndpoint ) ) ;
131+ }
132+
143133 return udpClientMock ;
144134 }
145135 }
0 commit comments