- fixed SF# 594: Websocket fails with small masked payloads

This commit is contained in:
Guenter Obiltschnig
2012-11-10 11:47:26 +01:00
parent 45fa903880
commit e36800c76d
3 changed files with 122 additions and 90 deletions

View File

@@ -1,7 +1,7 @@
//
// WebSocketTest.cpp
//
// $Id: //poco/1.4/Net/testsuite/src/WebSocketTest.cpp#2 $
// $Id: //poco/1.4/Net/testsuite/src/WebSocketTest.cpp#3 $
//
// Copyright (c) 2012, Applied Informatics Software Engineering GmbH.
// and Contributors.
@@ -106,6 +106,16 @@ namespace
WebSocketTest::WebSocketTest(const std::string& name): CppUnit::TestCase(name)
{
}
WebSocketTest::~WebSocketTest()
{
}
void WebSocketTest::testWebSocket()
{
Poco::Net::ServerSocket ss(0);
Poco::Net::HTTPServer server(new WebSocketRequestHandlerFactory, ss, new Poco::Net::HTTPServerParams);
@@ -117,7 +127,8 @@ WebSocketTest::WebSocketTest(const std::string& name): CppUnit::TestCase(name)
HTTPRequest request(HTTPRequest::HTTP_GET, "/ws");
HTTPResponse response;
WebSocket ws(cs, request, response);
std::string payload("Hello, world!");
std::string payload("x");
ws.sendFrame(payload.data(), payload.size());
char buffer[1024];
int flags;
@@ -125,6 +136,33 @@ WebSocketTest::WebSocketTest(const std::string& name): CppUnit::TestCase(name)
assert (n == payload.size());
assert (payload.compare(0, payload.size(), buffer, 0, n) == 0);
assert (flags == WebSocket::FRAME_TEXT);
for (int i = 2; i < 20; i++)
{
payload.assign(i, 'x');
ws.sendFrame(payload.data(), payload.size());
n = ws.receiveFrame(buffer, sizeof(buffer), flags);
assert (n == payload.size());
assert (payload.compare(0, payload.size(), buffer, 0, n) == 0);
assert (flags == WebSocket::FRAME_TEXT);
}
for (int i = 125; i < 129; i++)
{
payload.assign(i, 'x');
ws.sendFrame(payload.data(), payload.size());
n = ws.receiveFrame(buffer, sizeof(buffer), flags);
assert (n == payload.size());
assert (payload.compare(0, payload.size(), buffer, 0, n) == 0);
assert (flags == WebSocket::FRAME_TEXT);
}
payload = "Hello, world!";
ws.sendFrame(payload.data(), payload.size());
n = ws.receiveFrame(buffer, sizeof(buffer), flags);
assert (n == payload.size());
assert (payload.compare(0, payload.size(), buffer, 0, n) == 0);
assert (flags == WebSocket::FRAME_TEXT);
payload = "Hello, universe!";
ws.sendFrame(payload.data(), payload.size(), WebSocket::FRAME_BINARY);
@@ -142,16 +180,6 @@ WebSocketTest::WebSocketTest(const std::string& name): CppUnit::TestCase(name)
}
WebSocketTest::~WebSocketTest()
{
}
void WebSocketTest::testWebSocket()
{
}
void WebSocketTest::setUp()
{
}