From 86ccd436dc5b0b749511dca6b59313fa2fbe4598 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Fri, 19 Jun 2026 18:33:37 +0100 Subject: [PATCH] Test Muninn RUDP URL media settings --- native/obs_stem_source/CMakeLists.txt | 8 +++ .../tests/muninn_rudp_url_tests.cpp | 50 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 native/obs_stem_source/tests/muninn_rudp_url_tests.cpp diff --git a/native/obs_stem_source/CMakeLists.txt b/native/obs_stem_source/CMakeLists.txt index c56063e..ddf873b 100644 --- a/native/obs_stem_source/CMakeLists.txt +++ b/native/obs_stem_source/CMakeLists.txt @@ -3,6 +3,7 @@ cmake_minimum_required(VERSION 3.20) project(mimir_obs_stem_source LANGUAGES CXX) find_package(libobs REQUIRED CONFIG) +include(CTest) add_library(mimir_obs_stem_source MODULE mimir_obs_muninn_source.cpp @@ -21,3 +22,10 @@ add_executable(muninn_media_decoder_probe target_compile_features(muninn_media_decoder_probe PRIVATE cxx_std_20) target_include_directories(muninn_media_decoder_probe PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) + +add_executable(muninn_rudp_url_tests + tests/muninn_rudp_url_tests.cpp) +target_compile_features(muninn_rudp_url_tests PRIVATE cxx_std_20) +target_include_directories(muninn_rudp_url_tests PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}) +add_test(NAME muninn_rudp_url_tests COMMAND muninn_rudp_url_tests) diff --git a/native/obs_stem_source/tests/muninn_rudp_url_tests.cpp b/native/obs_stem_source/tests/muninn_rudp_url_tests.cpp new file mode 100644 index 0000000..85e418a --- /dev/null +++ b/native/obs_stem_source/tests/muninn_rudp_url_tests.cpp @@ -0,0 +1,50 @@ +#include "muninn_rudp_url.h" + +#include +#include +#include + +namespace { + +void require(bool condition, const std::string &message) +{ + if (!condition) { + std::cerr << message << '\n'; + std::exit(1); + } +} + +} // namespace + +int main() +{ + const auto configured = muninn_rudp_url::parse( + "rudp://192.168.1.66:5204/muninn.raven.av.rudp?channel=media&format=muninn-typed-media&connection=0x6d750001&sender_resend_delay_ms=5&reliable_expire_after_ms=1200&assembly_deadline_ms=1200&gap_wait_ms=16"); + require(configured.has_value(), "configured RUDP URL did not parse"); + require(configured->port == 5204, "configured RUDP URL port was not parsed"); + require(configured->video_local_port == 15204, "configured RUDP video local port was not derived"); + require(configured->audio_local_port == 15205, "configured RUDP audio local port was not derived"); + require(configured->connection_id == 0x6d750001, "configured RUDP connection id was not parsed"); + require(configured->reliable_expire_after_ms == 1200, "configured reliable expiry did not survive parse"); + require(configured->video_assembly_deadline_ms == 1200, "configured assembly deadline did not survive parse"); + require(configured->gap_wait_ms == 16, "configured gap wait did not survive parse"); + + const auto clamped = muninn_rudp_url::parse( + "rudp://192.168.1.66:5204/muninn.raven.av.rudp?reliable_expire_after_ms=9000&assembly_deadline_ms=9000"); + require(clamped.has_value(), "oversized latency RUDP URL did not parse"); + require(clamped->reliable_expire_after_ms == muninn_rudp_url::MaxLatencyBudgetMs, + "oversized reliable expiry did not clamp to the max latency budget"); + require(clamped->video_assembly_deadline_ms == muninn_rudp_url::MaxLatencyBudgetMs, + "oversized assembly deadline did not clamp to the max latency budget"); + + const auto fallback = muninn_rudp_url::parse("rudp://192.168.1.66:5204/muninn.raven.av.rudp"); + require(fallback.has_value(), "minimal RUDP URL did not parse"); + require(fallback->connection_id == muninn_rudp_url::DefaultMediaRudpConnectionId, + "minimal RUDP URL did not keep the default connection id"); + require(fallback->reliable_expire_after_ms == muninn_rudp_url::DefaultReliableExpireAfterMs, + "minimal RUDP URL did not keep the default reliable expiry"); + require(fallback->video_assembly_deadline_ms == muninn_rudp_url::DefaultVideoAssemblyDeadlineMs, + "minimal RUDP URL did not keep the default assembly deadline"); + + return 0; +}