Unverified Commit 01d500d3 authored by nixpkgs-ci[bot]'s avatar nixpkgs-ci[bot] Committed by GitHub
Browse files

Merge staging-next into staging

parents d2d6914c 9555d374
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -9902,6 +9902,12 @@
    githubId = 155722885;
    name = "Joachim Ernst";
  };
  hemera = {
    email = "neikos@neikos.email";
    github = "TheNeikos";
    githubId = 1631166;
    name = "Marcel Müller";
  };
  henkery = {
    email = "jim@reupload.nl";
    github = "henkery";
@@ -17298,6 +17304,12 @@
    githubId = 144328493;
    keys = [ { fingerprint = "D89F 440C 6CD7 4753 090F  EC7A 4682 C5CB 4D9D EA3C"; } ];
  };
  naora = {
    name = "Joris Gundermann";
    email = "jorisgundermann@gmail.com";
    github = "Naora";
    githubId = 2221163;
  };
  naphta = {
    github = "naphta";
    githubId = 6709831;
+1 −1
Original line number Diff line number Diff line
@@ -768,7 +768,7 @@ in
  lomiri = discoverTests (import ./lomiri.nix);
  lomiri-calculator-app = runTest ./lomiri-calculator-app.nix;
  lomiri-calendar-app = runTest ./lomiri-calendar-app.nix;
  lomiri-camera-app = runTest ./lomiri-camera-app.nix;
  lomiri-camera-app = discoverTests (import ./lomiri-camera-app.nix);
  lomiri-clock-app = runTest ./lomiri-clock-app.nix;
  lomiri-docviewer-app = runTest ./lomiri-docviewer-app.nix;
  lomiri-filemanager-app = runTest ./lomiri-filemanager-app.nix;
+244 −142
Original line number Diff line number Diff line
let
  makeTest = import ./make-test-python.nix;
  feedLabel = "Image";
  feedQrContent = "Test";
  feedImageFile = "feed.png";
  makeFeedImage =
    pkgs:
    pkgs.runCommand feedImageFile
      {
        nativeBuildInputs = with pkgs; [
          (imagemagick.override { ghostscriptSupport = true; }) # add label for OCR
          qrtool # generate QR code
        ];
      }
      ''
        qrtool encode '${feedQrContent}' -s 20 -m 10 > qr.png

        # Horizontal flip, add text, flip back. Camera displays image mirrored, so need reversed text for OCR
        magick qr.png \
          -flop \
          -pointsize 30 -fill black -annotate +100+100 '${feedLabel}' \
          -flop \
          $out
      '';
in
{
  basic = makeTest (
    { lib, ... }:
    {
  name = "lomiri-camera-app-standalone";
      name = "lomiri-camera-app-basic";
      meta.maintainers = lib.teams.lomiri.members;

      nodes.machine =
@@ -11,20 +38,10 @@
          services.xserver.enable = true;

          environment = {
        systemPackages =
          with pkgs;
          [
            feh # view photo result
            ffmpeg # fake webcam stream
            gnome-text-editor # somewhere to paste QR result
            (imagemagick.override { ghostscriptSupport = true; }) # add label for OCR
            qrtool # generate QR code
            xdotool # clicking on QR button
          ]
          ++ (with pkgs.lomiri; [
            systemPackages = with pkgs.lomiri; [
              suru-icon-theme
              lomiri-camera-app
          ]);
            ];
            variables = {
              UITK_ICON_THEME = "suru";
            };
@@ -38,9 +55,6 @@
              ubuntu-classic
            ];
          };

      # Fake camera
      boot.extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ];
        };

      enableOCR = true;
@@ -55,6 +69,8 @@

          with subtest("lomiri camera launches"):
              machine.succeed("lomiri-camera-app >&2 &")
              # emitted twice
              machine.wait_for_console_text("updateViewfinderResolution: viewfinder resolutions is not known yet")
              machine.wait_for_console_text("updateViewfinderResolution: viewfinder resolutions is not known yet")
              machine.sleep(10)
              machine.send_key("alt-f10")
@@ -62,22 +78,92 @@
              machine.wait_for_text("Cannot access")
              machine.screenshot("lomiri-camera_open")

      machine.succeed("pkill -f lomiri-camera-app")
          machine.succeed("pgrep -afx lomiri-camera-app >&2")
          machine.succeed("pkill -efx lomiri-camera-app >&2")
          machine.wait_until_fails("pgrep -afx lomiri-camera-app >&2")

          # Sometimes, GStreamer errors out on camera init with: CameraBin error: "Failed to allocate required memory."
          # Adding more VM memory didn't affect this. Maybe flaky in general?
          # Current assumption: Camera access gets requested in a weird/still-in-use state, so sleep abit
          machine.sleep(10)

          with subtest("lomiri camera localisation works"):
              machine.succeed("env LANG=de_DE.UTF-8 lomiri-camera-app >&2 &")
              # emitted twice
              machine.wait_for_console_text("updateViewfinderResolution: viewfinder resolutions is not known yet")
              machine.wait_for_console_text("updateViewfinderResolution: viewfinder resolutions is not known yet")
              machine.sleep(10)
              machine.send_key("alt-f10")
              machine.sleep(5)
              machine.wait_for_text("Zugriff auf")
              machine.screenshot("lomiri-camera_localised")
        '';
    }
  );

  v4l2-photo = makeTest (
    { lib, ... }:
    {
      name = "lomiri-camera-app-v4l2-photo";
      meta.maintainers = lib.teams.lomiri.members;

      nodes.machine =
        { config, pkgs, ... }:
        {
          imports = [ ./common/x11.nix ];

          services.xserver.enable = true;

          environment = {
            etc."${feedImageFile}".source = makeFeedImage pkgs;
            systemPackages =
              with pkgs;
              [
                feh # view photo result
                ffmpeg # fake webcam stream
                imagemagick # unflip webcam photo
                xdotool # clicking on camera button
              ]
              ++ (with pkgs.lomiri; [
                suru-icon-theme
                lomiri-camera-app
              ]);
            variables = {
              UITK_ICON_THEME = "suru";
            };
          };

          i18n.supportedLocales = [ "all" ];

          fonts = {
            packages = with pkgs; [
              # Intended font & helps with OCR
              ubuntu-classic
            ];
          };

          # Fake camera
          boot.extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ];
        };

      enableOCR = true;

      testScript = ''
        machine.wait_for_x()

        # Setup fake v4l2 camera
        machine.succeed("modprobe v4l2loopback video_nr=10 card_label=Video-Loopback exclusive_caps=1")
      machine.succeed("qrtool encode '${qrContent}' -s 20 -m 10 > qr.png")
      # Horizontal flip, add text, flip back. Camera displays image mirrored, so need reversed text for OCR
      machine.succeed("magick qr.png -flop -pointsize 30 -fill black -annotate +100+100 '${qrLabel}' -flop output.png")
      machine.succeed("ffmpeg -re -loop 1 -i output.png -vf format=yuv420p -f v4l2 /dev/video10 -loglevel fatal >&2 &")
        machine.succeed("ffmpeg -re -loop 1 -i /etc/${feedImageFile} -vf format=yuv420p -f v4l2 /dev/video10 -loglevel fatal >&2 &")

        with subtest("lomiri camera uses camera"):
            machine.succeed("lomiri-camera-app >&2 &")
          machine.wait_for_console_text("updateViewfinderResolution: For target resolution")
            # emitted twice
            machine.wait_for_console_text("No flash control support")
            machine.wait_for_console_text("No flash control support")
            machine.sleep(10)
            machine.send_key("alt-f10")
            machine.sleep(5)
          machine.wait_for_text("${qrLabel}")
            machine.wait_for_text("${feedLabel}")
            machine.screenshot("lomiri-camera_feed")

            machine.succeed("xdotool mousemove 510 670 click 1") # take photo
@@ -88,68 +174,84 @@
            machine.succeed("magick /root/Pictures/camera.ubports/IMG_00000001.jpg -flop photo_flip.png")
            machine.succeed("feh photo_flip.png >&2 &")
            machine.sleep(10)
          machine.wait_for_text("${qrLabel}")
            machine.send_key("alt-f10")
            machine.sleep(5)
            machine.wait_for_text("${feedLabel}")
            machine.screenshot("lomiri-camera_photo")
      '';
    }
  );

  v4l2-qr = makeTest (
    { lib, ... }:
    {
      name = "lomiri-camera-app-v4l2-qr";
      meta.maintainers = lib.teams.lomiri.members;

      machine.succeed("pkill -f feh")
      machine.send_key("ctrl-alt-left")
      machine.succeed("pkill -f lomiri-camera-app")
      nodes.machine =
        { config, pkgs, ... }:
        {
          imports = [ ./common/x11.nix ];

          services.xserver.enable = true;

          environment = {
            etc."${feedImageFile}".source = makeFeedImage pkgs;
            systemPackages =
              with pkgs;
              [
                ffmpeg # fake webcam stream
                xclip # inspect QR contents copied into clipboard
                xdotool # clicking on QR button
              ]
              ++ (with pkgs.lomiri; [
                suru-icon-theme
                lomiri-camera-app
              ]);
            variables = {
              UITK_ICON_THEME = "suru";
            };
          };

          i18n.supportedLocales = [ "all" ];

          fonts = {
            packages = with pkgs; [
              # Intended font & helps with OCR
              ubuntu-classic
            ];
          };

          # Fake camera
          boot.extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ];
        };

      enableOCR = true;

      testScript = ''
        machine.wait_for_x()

        # Setup fake v4l2 camera
        machine.succeed("modprobe v4l2loopback video_nr=10 card_label=Video-Loopback exclusive_caps=1")
        machine.succeed("ffmpeg -re -loop 1 -i /etc/${feedImageFile} -vf format=yuv420p -f v4l2 /dev/video10 -loglevel fatal >&2 &")

        with subtest("lomiri barcode scanner uses camera"):
            machine.succeed("lomiri-camera-app --mode=barcode-reader >&2 &")
          machine.wait_for_console_text("updateViewfinderResolution: For target resolution")
            # emitted twice
            machine.wait_for_console_text("No flash control support")
            machine.wait_for_console_text("No flash control support")
            machine.sleep(10)
            machine.send_key("alt-f10")
            machine.sleep(5)
          machine.wait_for_text("${qrLabel}")
            machine.wait_for_text("${feedLabel}")
            machine.succeed("xdotool mousemove 510 670 click 1") # open up QR decode result

          # OCR is struggling to recognise the text. Click the clipboard button and paste the result somewhere else
            # OCR is struggling to recognise the text. Click the clipboard button, check what got copied
            machine.sleep(5)
            machine.screenshot("lomiri-barcode_decode")
            machine.succeed("xdotool mousemove 540 590 click 1")
          machine.sleep(5)

          # Need to make a new window without closing camera app, otherwise clipboard content gets lost?
          machine.send_key("ctrl-alt-right")
          machine.succeed("gnome-text-editor >&2 &")
          machine.sleep(10)
          machine.send_key("alt-f10")
          machine.sleep(5)
          machine.wait_for_text("New")

          # Font size up to help with OCR
          machine.send_key("ctrl-kp_add")
          machine.send_key("ctrl-kp_add")
          machine.send_key("ctrl-kp_add")
          machine.send_key("ctrl-kp_add")
          machine.send_key("ctrl-kp_add")
          machine.send_key("ctrl-kp_add")
          machine.send_key("ctrl-kp_add")
          machine.send_key("ctrl-kp_add")
          machine.send_key("ctrl-kp_add")
          machine.send_key("ctrl-kp_add")
          machine.send_key("ctrl-kp_add")
          machine.send_key("ctrl-kp_add")
          machine.send_key("ctrl-kp_add")
          machine.send_key("ctrl-kp_add")
          machine.send_key("ctrl-kp_add")
          machine.send_key("ctrl-kp_add")

          machine.send_key("ctrl-v")
          machine.wait_for_text("${qrContent}")

      machine.succeed("pkill -f gnome-text-editor")
      machine.send_key("ctrl-alt-left")
      machine.succeed("pkill -f lomiri-camera-app")

      with subtest("lomiri camera localisation works"):
          machine.succeed("env LANG=de_DE.UTF-8 lomiri-camera-app >&2 &")
          machine.wait_for_console_text("updateViewfinderResolution: For target resolution")
          machine.sleep(10)
          machine.send_key("alt-f10")
          machine.sleep(5)
          machine.wait_for_text("Kamera")
          machine.screenshot("lomiri-camera_localised")
            machine.wait_until_succeeds("env DISPLAY=:0 xclip -selection clipboard -o | grep -q '${feedQrContent}'")
      '';
    }
  );
}
+11 −2
Original line number Diff line number Diff line
@@ -36,7 +36,10 @@
    machine.wait_for_x()

    with subtest("morph browser launches"):
        machine.execute("morph-browser >&2 &")
        machine.succeed("morph-browser >&2 &")
        machine.sleep(10)
        machine.send_key("alt-f10")
        machine.sleep(5)
        machine.wait_for_text(r"Web Browser|New|sites|Bookmarks")
        machine.screenshot("morph_open")

@@ -47,8 +50,14 @@

    machine.succeed("pkill -f morph-browser")

    # Get rid of saved tabs, to show localised start page
    machine.succeed("rm -r /root/.local/share/morph-browser")

    with subtest("morph browser localisation works"):
        machine.execute("env LANG=de_DE.UTF-8 morph-browser >&2 &")
        machine.succeed("env LANG=de_DE.UTF-8 morph-browser >&2 &")
        machine.sleep(10)
        machine.send_key("alt-f10")
        machine.sleep(5)
        machine.wait_for_text(r"Web-Browser|Neuer|Seiten|Lesezeichen")
        machine.screenshot("morph_localised")
  '';
+2 −2
Original line number Diff line number Diff line
@@ -36,7 +36,7 @@
    with subtest("teleports launches"):
        machine.succeed("teleports >&2 &")
        machine.wait_for_console_text("authorizationStateWaitPhoneNumber")
        machine.send_key("alt-f10")
        # Not fullscreening, because main app colour makes OCR stuck
        machine.sleep(2)
        machine.wait_for_text(r"(TELEports|Phone Number)")
        machine.screenshot("teleports_open")
@@ -46,7 +46,7 @@
    with subtest("teleports localisation works"):
        machine.succeed("env LANG=de_DE.UTF-8 teleports >&2 &")
        machine.wait_for_console_text("authorizationStateWaitPhoneNumber")
        machine.send_key("alt-f10")
        # Not fullscreening, because main app colour makes OCR stuck
        machine.sleep(2)
        machine.wait_for_text("Telefonnummer")
        machine.screenshot("teleports_localised")
Loading