#define CATCH_CONFIG_MAIN #include #include #include #include #include #include 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); } }