JD2022-TU1/main/unittests/core/HttpServer/WebSocket/WebSocketCloseMessage.cpp

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