Skip to content

Commit 76668be

Browse files
bstordrupchmorgan
authored andcommitted
Added unit test for brotli handling
1 parent 5178720 commit 76668be

File tree

2 files changed

+75
-24
lines changed

2 files changed

+75
-24
lines changed

Diff for: UnitTest/HttpSessionWatcherTest/HttpSessionWatcherTests.cs

+75-24
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,21 @@
44
* GPLv3 licensed, see LICENSE for full text
55
* Commercial licensing available
66
*/
7-
using System.Collections.Generic;
8-
using System.Reflection;
9-
using SharpPcap;
10-
using SharpPcap.LibPcap;
7+
using log4net;
118
using PacketDotNet;
129
using PacketDotNet.Connections;
1310
using PacketDotNet.Connections.Http;
14-
using log4net;
11+
using SharpPcap;
12+
using SharpPcap.LibPcap;
13+
using System.Collections.Generic;
14+
using System.Reflection;
1515
using Xunit;
1616

1717
namespace Test
1818
{
1919
public class HttpSessionWatcherTests
2020
{
21-
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
21+
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
2222

2323
private class ExpectedMessageContainer
2424
{
@@ -63,51 +63,54 @@ private void CheckMessage(HttpMessage httpMessage, ExpectedMessageContainer.Mess
6363
{
6464
log.DebugFormat("expectedMessageIndex {0}", expectedMessageIndex);
6565

66-
if(expectedMessageIndex > expectedMessages.Count)
66+
if (expectedMessageIndex > expectedMessages.Count)
6767
{
6868
throw new System.InvalidOperationException("expectedMessageIndex "
6969
+ expectedMessageIndex
7070
+ " > expectedMessages.Count"
7171
+ expectedMessages.Count);
7272
}
73-
73+
7474
ExpectedMessageContainer expectedMessage = expectedMessages[expectedMessageIndex];
75-
75+
7676
Assert.True(expectedMessage.messageType == theMessageType, "Message type does not match");
7777

7878
// perform comparisons that are generic to all HttpMessages
7979
Assert.Equal(expectedMessage.message.HttpVersion, httpMessage.HttpVersion);
8080

8181
// if we expected a zero length body then we expect that
8282
// the actual message has a null body since it was never set
83-
if(expectedMessage.message.Body.Length == 0)
83+
if (expectedMessage.message.Body.Length == 0)
8484
{
8585
Assert.True(httpMessage.Body == null);
86-
} else
86+
}
87+
else
8788
{
8889
Assert.Equal(expectedMessage.message.Body.Length, httpMessage.Body.Length);
8990
}
9091

91-
if(theMessageType == ExpectedMessageContainer.MessageTypes.HttpRequest)
92+
if (theMessageType == ExpectedMessageContainer.MessageTypes.HttpRequest)
9293
{
9394
HttpRequest expected = (HttpRequest)expectedMessage.message;
9495
HttpRequest request = (HttpRequest)httpMessage;
95-
96+
9697
Assert.Equal(expected.Url, request.Url);
9798
Assert.Equal(expected.Method, request.Method);
98-
} else
99+
}
100+
else
99101
{
100102
HttpStatus expected = (HttpStatus)expectedMessage.message;
101103
HttpStatus status = (HttpStatus)httpMessage;
102-
104+
103105
Assert.Equal(expected.StatusCode, status.StatusCode);
104106
}
105-
107+
106108
// move to the next message
107109
expectedMessageIndex++;
108-
110+
109111
log.Debug("message matched");
110-
} catch(System.Exception e)
112+
}
113+
catch (System.Exception e)
111114
{
112115
// catch exceptions because the HttpSessionMonitor code will drop them
113116

@@ -124,15 +127,15 @@ private void ProcessPackets(ICaptureDevice dev,
124127

125128
GetPacketStatus status;
126129
PacketCapture e;
127-
while((status = dev.GetNextPacket(out e)) == GetPacketStatus.PacketRead)
130+
while ((status = dev.GetNextPacket(out e)) == GetPacketStatus.PacketRead)
128131
{
129132
var rawCapture = e.GetPacket();
130133
var p = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data);
131134

132135
var tcpPacket = p.Extract<TcpPacket>();
133136

134137
// skip non-tcp packets, http is a tcp based protocol
135-
if(p == null)
138+
if (p == null)
136139
{
137140
continue;
138141
}
@@ -206,13 +209,13 @@ public void TestHttpPostSession()
206209
status.StatusCode = HttpStatus.StatusCodes.OK_200;
207210
status.HttpVersion = HttpMessage.HttpVersions.Http11;
208211
status.Body = new byte[1132];
209-
expectedMessage.message = status;
212+
expectedMessage.message = status;
210213
expectedMessages.Add(expectedMessage);
211214

212215
ProcessPackets(dev, tcpConnectionManager);
213216
}
214217

215-
void HandleTcpConnectionManagerOnConnectionFound (TcpConnection c)
218+
void HandleTcpConnectionManagerOnConnectionFound(TcpConnection c)
216219
{
217220
var httpSessionWatcher = new HttpSessionWatcher(c,
218221
OnHttpRequestFound,
@@ -221,6 +224,54 @@ void HandleTcpConnectionManagerOnConnectionFound (TcpConnection c)
221224
}
222225
#endif
223226

227+
#if true
228+
229+
[Fact]
230+
public void TestHttpGetSession()
231+
{
232+
log4net.Config.XmlConfigurator.Configure(LogManager.GetRepository(Assembly.GetCallingAssembly()));
233+
234+
string captureFilename = "../../../captureFiles/http_get_request_and_response_brotli_compressed.pcap";
235+
var tcpConnectionManager = new TcpConnectionManager();
236+
tcpConnectionManager.OnConnectionFound += HandleTcpConnectionManagerOnConnectionFound;
237+
238+
// open the offline file
239+
var dev = new CaptureFileReaderDevice(captureFilename);
240+
dev.Open();
241+
Assert.True(dev != null, "failed to open " + captureFilename);
242+
243+
// setup the expected events
244+
ExpectedMessageContainer expectedMessage;
245+
HttpRequest request;
246+
HttpStatus status;
247+
expectedMessages = new List<ExpectedMessageContainer>();
248+
249+
// GET /api/areaInformation/?requestAction=GetMapMunicipalityList
250+
expectedMessage = new ExpectedMessageContainer();
251+
expectedMessage.messageType = ExpectedMessageContainer.MessageTypes.HttpRequest;
252+
request = new HttpRequest();
253+
request.Url = "/api/areaInformation/?requestAction=GetMapMunicipalityList";
254+
request.Method = HttpRequest.Methods.Get;
255+
request.HttpVersion = HttpMessage.HttpVersions.Http11;
256+
request.Body = new byte[0];
257+
expectedMessage.message = request;
258+
expectedMessages.Add(expectedMessage);
259+
260+
// HTTP 1.1 OK
261+
expectedMessage = new ExpectedMessageContainer();
262+
expectedMessage.messageType = ExpectedMessageContainer.MessageTypes.HttpStatus;
263+
status = new HttpStatus();
264+
status.StatusCode = HttpStatus.StatusCodes.OK_200;
265+
status.HttpVersion = HttpMessage.HttpVersions.Http11;
266+
status.Body = new byte[8269];
267+
expectedMessage.message = status;
268+
expectedMessages.Add(expectedMessage);
269+
270+
ProcessPackets(dev, tcpConnectionManager);
271+
}
272+
273+
#endif
274+
224275
#if false
225276
[Fact]
226277
public void TestHttpGetWithGzippedContent()
@@ -295,7 +346,7 @@ public void TestHttpPipelining()
295346
status.StatusCode = HttpStatus.StatusCodes.OK_200;
296347
status.HttpVersion = HttpMessage.HttpVersions.Http11;
297348
status.Body = new byte[1123];
298-
expectedMessage.message = status;
349+
expectedMessage.message = status;
299350
expectedMessages.Add(expectedMessage);
300351

301352
// GET /img/menu-secondary.gif
@@ -316,7 +367,7 @@ public void TestHttpPipelining()
316367
status.StatusCode = HttpStatus.StatusCodes.OK_200;
317368
status.HttpVersion = HttpMessage.HttpVersions.Http11;
318369
status.Body = new byte[227];
319-
expectedMessage.message = status;
370+
expectedMessage.message = status;
320371
expectedMessages.Add(expectedMessage);
321372

322373

Binary file not shown.

0 commit comments

Comments
 (0)