diff --git a/nixos/tests/galene.nix b/nixos/tests/galene.nix index 8805a088a56c..a05dea24eb01 100644 --- a/nixos/tests/galene.nix +++ b/nixos/tests/galene.nix @@ -208,4 +208,136 @@ in ''; } ); + + stream = makeTest ( + { pkgs, lib, ... }: + let + galeneTestGroupBotName = "bot"; + galeneTestGroupBotPassword = "1234"; + galeneStreamSrtPort = 9710; + galeneStreamFeedImage = "galene-stream-feed.png"; + galeneStreamFeedLabel = "Example"; + in + { + name = "galene-stream-works"; + meta = { + # inherit (pkgs.galene-stream.meta) teams; + inherit (pkgs.galene.meta) maintainers; + platforms = lib.platforms.linux; + }; + + nodes.machine = + { config, pkgs, ... }: + { + imports = [ ./common/x11.nix ]; + + services.xserver.enable = true; + + environment = { + # https://galene.org/INSTALL.html + etc = { + ${galeneTestGroupFile}.source = (pkgs.formats.json { }).generate galeneTestGroupFile { + presenter = [ + { + username = galeneTestGroupBotName; + password = galeneTestGroupBotPassword; + } + ]; + other = [ { } ]; + }; + + ${galeneStreamFeedImage}.source = + pkgs.runCommand galeneStreamFeedImage + { + nativeBuildInputs = with pkgs; [ + (imagemagick.override { ghostscriptSupport = true; }) # Add text to image + ]; + } + '' + magick -size 400x400 -background white -fill black canvas:white -pointsize 70 -annotate +100+200 '${galeneStreamFeedLabel}' $out + ''; + }; + + systemPackages = with pkgs; [ + ffmpeg + firefox + galene-stream + ]; + }; + + services.galene = { + enable = true; + insecure = true; + httpPort = galenePort; + groupsDir = galeneTestGroupsDir; + }; + }; + + enableOCR = true; + + testScript = '' + machine.wait_for_x() + + with subtest("galene starts"): + # Starts? + machine.wait_for_unit("galene") + + # Keeps running after startup? + machine.sleep(10) + machine.wait_for_unit("galene") + + # Reponds fine? + machine.succeed("curl -s -D - -o /dev/null 'http://localhost:${builtins.toString galenePort}' >&2") + + machine.succeed("cp -v /etc/${galeneTestGroupFile} ${galeneTestGroupsDir}/test.json >&2") + machine.wait_until_succeeds("curl -s -D - -o /dev/null 'http://localhost:${builtins.toString galenePort}/group/test/' >&2") + + with subtest("galene-stream works"): + # Start interface for stream data + machine.succeed( + "galene-stream " + + "--input 'srt://localhost:${builtins.toString galeneStreamSrtPort}?mode=listener' " + + "--insecure --output 'http://localhost:${builtins.toString galenePort}/group/test/' " + + "--username ${galeneTestGroupBotName} --password ${galeneTestGroupBotPassword} " + + ">&2 &" + ) + machine.wait_for_console_text("Waiting for incoming stream...") + + # Start streaming + machine.succeed( + "ffmpeg " + + "-f lavfi -i anullsrc=channel_layout=stereo:sample_rate=48000 " # need an audio track + + "-re -loop 1 -i /etc/${galeneStreamFeedImage} " # loop of feed image + + "-map 0:a -map 1:v " # arrange the output stream to have silent audio & looped video + + "-c:a mp2 " # stream audio codec + + "-c:v libx264 -pix_fmt yuv420p " # stream video codec + + "-f mpegts " # stream format + + "'srt://localhost:${builtins.toString galeneStreamSrtPort}' " + + ">/dev/null 2>&1 &" + ) + machine.wait_for_console_text("Setting remote session description") + + # Open site + machine.succeed("firefox --new-window 'http://localhost:${builtins.toString galenePort}/group/test/' >&2 &") + # Note: Firefox doesn't use a regular "-" in the window title, but "—" (Hex: 0xe2 0x80 0x94) + machine.wait_for_window("Test — Mozilla Firefox") + machine.send_key("ctrl-minus") + machine.send_key("ctrl-minus") + machine.send_key("alt-f10") + machine.wait_for_text(r"(Galène|Username|Password|Connect)") + machine.screenshot("galene-group-test-join") + + # Log in as anon + machine.send_key("ret") + machine.sleep(5) + # Close "Remember credentials?" FF prompt + machine.send_key("esc") + machine.sleep(5) + + # Look for stream + machine.wait_for_text("${galeneStreamFeedLabel}") + machine.screenshot("galene-stream-group-test-streams") + ''; + } + ); } diff --git a/pkgs/by-name/ga/galene-stream/package.nix b/pkgs/by-name/ga/galene-stream/package.nix index b48b0664c161..e2f2e07bc52f 100644 --- a/pkgs/by-name/ga/galene-stream/package.nix +++ b/pkgs/by-name/ga/galene-stream/package.nix @@ -3,6 +3,7 @@ python3Packages, fetchFromGitHub, gitUpdater, + nixosTests, galene, gobject-introspection, gst_all_1, @@ -65,6 +66,7 @@ python3Packages.buildPythonApplication rec { ''; passthru = { + tests.vm = nixosTests.galene.stream; updateScript = gitUpdater { }; };