From 547916552b11b2909484732e46ce08e150f21bfc Mon Sep 17 00:00:00 2001 From: David Trattnig <david@subsquare.at> Date: Fri, 15 Jul 2022 14:00:23 +0200 Subject: [PATCH] Test: Show-aware insert and merge --- tests/test_metadata_insert_merge.liq | 66 ++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 4 deletions(-) diff --git a/tests/test_metadata_insert_merge.liq b/tests/test_metadata_insert_merge.liq index 0d893a9..5454385 100755 --- a/tests/test_metadata_insert_merge.liq +++ b/tests/test_metadata_insert_merge.liq @@ -26,13 +26,42 @@ url = "https://securestream.o94.at/live.mp3" in_stream = input.http(id="in_stream", start=true, url) in_stream = insert_metadata(id="in_stream", in_stream) def on_metadata_notification(metadata) = - print("METADATA: \n#{metadata}") + print("Metadata Notification: \n#{metadata}") end # Save the callback last_metadata = in_stream.last_metadata imcb = in_stream.insert_metadata +# Check for show-specific metadata +def has_show_meta(meta) = + key_show_id = "show_id" + list.assoc.mem(key_show_id, meta) ? true : false +end + +# Check if the current show metadata is same as the prev one +def is_same_show(last_meta, current_meta) = + key_show_id = "show_id" + if has_show_meta(last_meta) then + if not has_show_meta(current_meta) then + # No current show meta: handle as same show + true + else + # A new show has started + false + end + else + # Last show has no show meta + if not has_show_meta(current_meta) then + # And the current one either: handle as same show + true + else + # A new show has started + false + end + end +end + # Ability to insert and merge with previous metadata def insert_merged_meta(meta) = lm = (last_metadata() ?? []) @@ -53,9 +82,38 @@ def insert_merged_meta(meta) = imcb(!merged) end +# Handles either insert or merge & insert of metadata +def process_meta_insert(meta) = + lm = (last_metadata() ?? []) + if is_same_show(lm, meta) then + print("SAME SHOW: merge & insert") + insert_merged_meta(meta) + else + print("NEW SHOW: insert -> #{meta}") + imcb(meta) + end +end + in_stream = source.on_metadata(id="in_stream", in_stream, on_metadata_notification) output.alsa(id="lineout", device="default", mksafe(in_stream)) -# Later: -meta = [("foo", "bar")] -thread.run(every=3., { insert_merged_meta(meta) }) + + +# Test Case 1: Normal insert and merge +# Provide new metadata every 3 seconds +def case1() = + print("Running Test Case 1 ...") + meta = [("foo", "bar")] + process_meta_insert(meta) +end +thread.run(delay=2., every=3., { case1() }) + + +# Test Case 1: Insert metadata with new show +# Provide new metadata after 23 seconds +def case2() = + print("Running Test Case 2 ...") + meta = [("show_id", "333"), ("fooBar", "2000")] + process_meta_insert(meta) +end +thread.run(delay=23., { case2() }) -- GitLab