Skip to content

Commit fea5ff1

Browse files
committed
Complete tests
1 parent c22e4c9 commit fea5ff1

2 files changed

Lines changed: 35 additions & 44 deletions

File tree

SteamQueryNet/SteamQueryNet.Tests/ServerQueryTests.cs

Lines changed: 34 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
using Moq;
2-
2+
using Newtonsoft.Json;
33
using SteamQueryNet.Interfaces;
44
using SteamQueryNet.Models;
55
using 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
}

SteamQueryNet/SteamQueryNet.Tests/SteamQueryNet.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
<ItemGroup>
1010
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.6.0" />
1111
<PackageReference Include="Moq" Version="4.13.1" />
12+
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
1213
<PackageReference Include="xunit" Version="2.3.1" />
1314
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.1" />
1415
<DotNetCliToolReference Include="dotnet-xunit" Version="2.3.1" />

0 commit comments

Comments
 (0)