#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(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