diff --git a/test/membrane_rtc_engine/hls_endpoint_test.exs b/test/membrane_rtc_engine/hls_endpoint_test.exs index c7d570801..5698685e8 100644 --- a/test/membrane_rtc_engine/hls_endpoint_test.exs +++ b/test/membrane_rtc_engine/hls_endpoint_test.exs @@ -17,6 +17,8 @@ defmodule Membrane.RTC.HLSEndpointTest do @fixtures_dir "./test/fixtures/" @reference_dir "./test/hls_reference/" + @main_manifest "index.m3u8" + @accaptable_bandwidth_diff 100_000 setup do options = [ @@ -508,7 +510,10 @@ defmodule Membrane.RTC.HLSEndpointTest do defp check_correctness_of_output_files(output_dir, reference_dir) do output_files = output_dir |> File.ls!() |> Enum.sort() - output_manifests = Enum.filter(output_files, &String.match?(&1, ~r/\.m3u8$/)) + + output_manifests = + Enum.filter(output_files, &String.match?(&1, ~r/\.m3u8$/)) + |> Enum.filter(&(&1 != @main_manifest)) for manifest <- output_manifests do manifest_path = Path.join(output_dir, manifest) @@ -517,6 +522,8 @@ defmodule Membrane.RTC.HLSEndpointTest do assert File.read!(manifest_path) == File.read!(reference_path) end + compare_main_manifests(output_dir, reference_dir) + reference_files = reference_dir |> File.ls!() |> Enum.sort() assert output_files == reference_files @@ -526,4 +533,35 @@ defmodule Membrane.RTC.HLSEndpointTest do assert size > 0 end end + + defp compare_main_manifests(output_dir, reference_dir) do + output_file = Path.join(output_dir, @main_manifest) |> File.read!() + reference_file = Path.join(reference_dir, @main_manifest) |> File.read!() + + %{ + bandwidth: ["#EXT-X-STREAM-INF:BANDWIDTH=" <> output_bandwidth], + other: output_without_bandwidth + } = filter_manifest(output_file) + + %{ + bandwidth: ["#EXT-X-STREAM-INF:BANDWIDTH=" <> reference_bandwidth], + other: reference_without_bandwidth + } = filter_manifest(reference_file) + + output_bandwidth = String.to_integer(output_bandwidth) + reference_bandwidth = String.to_integer(reference_bandwidth) + + assert output_bandwidth + @accaptable_bandwidth_diff > reference_bandwidth and + output_bandwidth < reference_bandwidth + @accaptable_bandwidth_diff + + assert output_without_bandwidth == reference_without_bandwidth + end + + defp filter_manifest(index_file) do + index_file + |> String.split(["\n", ","]) + |> Enum.group_by(fn x -> + if String.starts_with?(x, "#EXT-X-STREAM-INF:"), do: :bandwidth, else: :other + end) + end end