mirror of https://github.com/SeanOMik/libki.git
189 lines
3.6 KiB
C++
189 lines
3.6 KiB
C++
|
#define CATCH_CONFIG_MAIN
|
||
|
#include <catch.hpp>
|
||
|
#include <fstream>
|
||
|
|
||
|
#include <ki/protocol/control/SessionOffer.h>
|
||
|
#include <ki/protocol/control/SessionAccept.h>
|
||
|
#include <ki/protocol/control/ClientKeepAlive.h>
|
||
|
#include <ki/protocol/control/ServerKeepAlive.h>
|
||
|
|
||
|
using namespace ki::protocol;
|
||
|
|
||
|
TEST_CASE("Control Message Serialization", "[control]")
|
||
|
{
|
||
|
std::ostringstream oss;
|
||
|
|
||
|
SECTION("SessionOffer")
|
||
|
{
|
||
|
control::SessionOffer offer(0xABCD, 0xAABBCCDD, 0xAABBCCDD);
|
||
|
offer.write_to(oss);
|
||
|
|
||
|
const char expected_bytes[] = {
|
||
|
// Session ID
|
||
|
0xCD, 0xAB,
|
||
|
|
||
|
// Unknown
|
||
|
0x00, 0x00, 0x00, 0x00,
|
||
|
|
||
|
// Timestamp
|
||
|
0xDD, 0xCC, 0xBB, 0xAA,
|
||
|
|
||
|
// Milliseconds
|
||
|
0xDD, 0xCC, 0xBB, 0xAA
|
||
|
};
|
||
|
REQUIRE(oss.str() == std::string(expected_bytes, sizeof(expected_bytes)));
|
||
|
}
|
||
|
|
||
|
SECTION("SessionAccept")
|
||
|
{
|
||
|
control::SessionAccept accept(0xABCD, 0xAABBCCDD, 0xAABBCCDD);
|
||
|
accept.write_to(oss);
|
||
|
|
||
|
const char expected_bytes[] = {
|
||
|
// Unknown
|
||
|
0x00, 0x00,
|
||
|
|
||
|
// Unknown
|
||
|
0x00, 0x00, 0x00, 0x00,
|
||
|
|
||
|
// Timestamp
|
||
|
0xDD, 0xCC, 0xBB, 0xAA,
|
||
|
|
||
|
// Milliseconds
|
||
|
0xDD, 0xCC, 0xBB, 0xAA,
|
||
|
|
||
|
// Session ID
|
||
|
0xCD, 0xAB
|
||
|
};
|
||
|
REQUIRE(oss.str() == std::string(expected_bytes, sizeof(expected_bytes)));
|
||
|
}
|
||
|
|
||
|
SECTION("ClientKeepAlive")
|
||
|
{
|
||
|
control::ClientKeepAlive keep_alive(0xABCD, 0xABCD, 0xABCD);
|
||
|
keep_alive.write_to(oss);
|
||
|
|
||
|
const char expected_bytes[] = {
|
||
|
// Session ID
|
||
|
0xCD, 0xAB,
|
||
|
|
||
|
// Milliseconds
|
||
|
0xCD, 0xAB,
|
||
|
|
||
|
// Minutes
|
||
|
0xCD, 0xAB
|
||
|
};
|
||
|
REQUIRE(oss.str() == std::string(expected_bytes, sizeof(expected_bytes)));
|
||
|
}
|
||
|
|
||
|
SECTION("ServerKeepAlive")
|
||
|
{
|
||
|
control::ServerKeepAlive keep_alive(0xAABBCCDD);
|
||
|
keep_alive.write_to(oss);
|
||
|
|
||
|
const char expected_bytes[] = {
|
||
|
// Unknown
|
||
|
0x00, 0x00,
|
||
|
|
||
|
// Timestamp
|
||
|
0xDD, 0xCC, 0xBB, 0xAA
|
||
|
};
|
||
|
REQUIRE(oss.str() == std::string(expected_bytes, sizeof(expected_bytes)));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
TEST_CASE("Control Message Deserialization", "[control]")
|
||
|
{
|
||
|
SECTION("SessionOffer")
|
||
|
{
|
||
|
const char bytes[] = {
|
||
|
// Session ID
|
||
|
0xCD, 0xAB,
|
||
|
|
||
|
// Unknown
|
||
|
0x00, 0x00, 0x00, 0x00,
|
||
|
|
||
|
// Timestamp
|
||
|
0xDD, 0xCC, 0xBB, 0xAA,
|
||
|
|
||
|
// Milliseconds
|
||
|
0xDD, 0xCC, 0xBB, 0xAA
|
||
|
};
|
||
|
std::istringstream iss(std::string(bytes, sizeof(bytes)));
|
||
|
|
||
|
control::SessionOffer offer;
|
||
|
offer.read_from(iss);
|
||
|
|
||
|
REQUIRE(offer.get_session_id() == 0xABCD);
|
||
|
REQUIRE(offer.get_timestamp() == 0xAABBCCDD);
|
||
|
REQUIRE(offer.get_milliseconds() == 0xAABBCCDD);
|
||
|
}
|
||
|
|
||
|
SECTION("SessionAccept")
|
||
|
{
|
||
|
const char bytes[] = {
|
||
|
// Unknown
|
||
|
0x00, 0x00,
|
||
|
|
||
|
// Unknown
|
||
|
0x00, 0x00, 0x00, 0x00,
|
||
|
|
||
|
// Timestamp
|
||
|
0xDD, 0xCC, 0xBB, 0xAA,
|
||
|
|
||
|
// Milliseconds
|
||
|
0xDD, 0xCC, 0xBB, 0xAA,
|
||
|
|
||
|
// Session ID
|
||
|
0xCD, 0xAB
|
||
|
};
|
||
|
std::istringstream iss(std::string(bytes, sizeof(bytes)));
|
||
|
|
||
|
control::SessionAccept accept;
|
||
|
accept.read_from(iss);
|
||
|
|
||
|
REQUIRE(accept.get_session_id() == 0xABCD);
|
||
|
REQUIRE(accept.get_timestamp() == 0xAABBCCDD);
|
||
|
REQUIRE(accept.get_milliseconds() == 0xAABBCCDD);
|
||
|
}
|
||
|
|
||
|
SECTION("ClientKeepAlive")
|
||
|
{
|
||
|
const char bytes[] = {
|
||
|
// Session ID
|
||
|
0xCD, 0xAB,
|
||
|
|
||
|
// Milliseconds
|
||
|
0xCD, 0xAB,
|
||
|
|
||
|
// Minutes
|
||
|
0xCD, 0xAB
|
||
|
};
|
||
|
std::istringstream iss(std::string(bytes, sizeof(bytes)));
|
||
|
|
||
|
control::ClientKeepAlive keep_alive;
|
||
|
keep_alive.read_from(iss);
|
||
|
|
||
|
REQUIRE(keep_alive.get_session_id() == 0xABCD);
|
||
|
REQUIRE(keep_alive.get_milliseconds() == 0xABCD);
|
||
|
REQUIRE(keep_alive.get_minutes() == 0xABCD);
|
||
|
}
|
||
|
|
||
|
SECTION("ServerKeepAlive")
|
||
|
{
|
||
|
const char bytes[] = {
|
||
|
// Unknown
|
||
|
0x00, 0x00,
|
||
|
|
||
|
// Timestamp
|
||
|
0xDD, 0xCC, 0xBB, 0xAA
|
||
|
};
|
||
|
std::istringstream iss(std::string(bytes, sizeof(bytes)));
|
||
|
|
||
|
control::ServerKeepAlive keep_alive;
|
||
|
keep_alive.read_from(iss);
|
||
|
|
||
|
REQUIRE(keep_alive.get_timestamp() == 0xAABBCCDD);
|
||
|
}
|
||
|
}
|