88 lines
2.6 KiB
C++
88 lines
2.6 KiB
C++
#include "precompiled_unittests_core.h"
|
|
|
|
#include "core/HttpServer/WebSocket/WebSocketCloseMessage.h"
|
|
#include "mongoose/custom/mongoose.h"
|
|
|
|
namespace ITF
|
|
{
|
|
|
|
TEST(WebSocketCloseMessage, test_constructionFrom_MgConnection)
|
|
{
|
|
u8 msgClose[] = { 0x03, 0xE8, 'C', 'L', 'O', 'S', 'E', '_', 'N', 'O', 'R', 'M', 'A', 'L' };
|
|
const u16 code = 1000;
|
|
const char* reason = "CLOSE_NORMAL";
|
|
|
|
mg_connection conn;
|
|
conn.content = reinterpret_cast<char*>(msgClose);
|
|
conn.content_len = ITF_ARRAY_SIZE(msgClose);
|
|
conn.is_websocket = 1;
|
|
conn.wsbits = 0x80 | WEBSOCKET_OPCODE_CONNECTION_CLOSE;
|
|
|
|
WebSocketCloseMessage msg(conn);
|
|
EXPECT_EQ(code, msg.getCode());
|
|
EXPECT_STREQ(reason, msg.getReason().cStr());
|
|
}
|
|
|
|
TEST(WebSocketCloseMessage, test_constructionFrom_StandardParams)
|
|
{
|
|
const u16 code = 1000;
|
|
const char* reason = "CLOSE_NORMAL";
|
|
|
|
WebSocketCloseMessage msg(code, reason);
|
|
EXPECT_EQ(code, msg.getCode());
|
|
EXPECT_STREQ(reason, msg.getReason().cStr());
|
|
}
|
|
|
|
TEST(WebSocketCloseMessage, test_serialize_AllOK)
|
|
{
|
|
const u16 code = 1000;
|
|
const char* reason = "CLOSE_NORMAL";
|
|
const size_t maxBufferSize = 32;
|
|
size_t expectedSerializedSize = sizeof(code) + strlen(reason);
|
|
const u8 expectedBufferContent[] = { 0x03, 0xE8, 'C', 'L', 'O', 'S', 'E', '_', 'N', 'O', 'R', 'M', 'A', 'L' };
|
|
|
|
WebSocketCloseMessage msg(code, reason);
|
|
|
|
u8 buffer[maxBufferSize];
|
|
|
|
size_t serializedSize = msg.serialize(buffer, maxBufferSize);
|
|
|
|
ASSERT_EQ(expectedSerializedSize, serializedSize);
|
|
EXPECT_EQ(0, memcmp(expectedBufferContent, buffer, serializedSize));
|
|
}
|
|
|
|
TEST(WebSocketCloseMessage, test_serialize_SerializationBufferTooSmall_MessageTruncated)
|
|
{
|
|
const u16 code = 1000;
|
|
const char* reason = "CLOSE_NORMAL";
|
|
const size_t maxBufferSize = 8;
|
|
size_t expectedSerializedSize = maxBufferSize;
|
|
const u8 expectedBufferContent[] = { 0x03, 0xE8, 'C', 'L', 'O', 'S', 'E', '_' };
|
|
|
|
WebSocketCloseMessage msg(code, reason);
|
|
|
|
u8 buffer[maxBufferSize];
|
|
|
|
size_t serializedSize = msg.serialize(buffer, maxBufferSize);
|
|
|
|
ASSERT_EQ(expectedSerializedSize, serializedSize);
|
|
EXPECT_EQ(0, memcmp(expectedBufferContent, buffer, serializedSize));
|
|
}
|
|
|
|
TEST(WebSocketCloseMessage, test_serialize_SerializationBufferTooSmall_NoDataSerialized)
|
|
{
|
|
const u16 code = 1000;
|
|
const char* reason = "CLOSE_NORMAL";
|
|
const size_t maxBufferSize = 1;
|
|
size_t expectedSerializedSize = 0;
|
|
|
|
WebSocketCloseMessage msg(code, reason);
|
|
|
|
u8 buffer[maxBufferSize];
|
|
|
|
size_t serializedSize = msg.serialize(buffer, maxBufferSize);
|
|
|
|
ASSERT_EQ(expectedSerializedSize, serializedSize);
|
|
}
|
|
|
|
} // namespace ITF
|