From d7e7243d4ce0c32f04ff9f407a7afda5c56fd3fb Mon Sep 17 00:00:00 2001 From: Piotr Kwiecinski <2151333+piotrkwiecinski@users.noreply.github.com> Date: Sat, 19 Apr 2025 18:17:50 +0200 Subject: [PATCH] nixosTests.signal-desktop: migrate to runTest Part of #386873 --- nixos/tests/all-tests.nix | 2 +- nixos/tests/signal-desktop.nix | 143 ++++++++++++++++----------------- 2 files changed, 71 insertions(+), 74 deletions(-) diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 3d59d6bdc307..2ccd689b16c8 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -1205,7 +1205,7 @@ in shadowsocks = handleTest ./shadowsocks { }; shattered-pixel-dungeon = handleTest ./shattered-pixel-dungeon.nix { }; shiori = handleTest ./shiori.nix { }; - signal-desktop = handleTest ./signal-desktop.nix { }; + signal-desktop = runTest ./signal-desktop.nix; silverbullet = handleTest ./silverbullet.nix { }; simple = handleTest ./simple.nix { }; sing-box = handleTest ./sing-box.nix { }; diff --git a/nixos/tests/signal-desktop.nix b/nixos/tests/signal-desktop.nix index 22b21f4bcecf..eb9f7b4f5b58 100644 --- a/nixos/tests/signal-desktop.nix +++ b/nixos/tests/signal-desktop.nix @@ -1,82 +1,79 @@ -import ./make-test-python.nix ( - { pkgs, ... }: +{ pkgs, ... }: +let + sqlcipher-signal = pkgs.writeShellScriptBin "sqlcipher" '' + set -eu - let - sqlcipher-signal = pkgs.writeShellScriptBin "sqlcipher" '' - set -eu + readonly CFG=~/.config/Signal/config.json + readonly KEY="$(${pkgs.jq}/bin/jq --raw-output '.key' $CFG)" + readonly DB="$1" + readonly SQL="SELECT * FROM sqlite_master where type='table'" + ${pkgs.sqlcipher}/bin/sqlcipher "$DB" "PRAGMA key = \"x'$KEY'\"; $SQL" + ''; +in +{ + name = "signal-desktop"; + meta = with pkgs.lib.maintainers; { + maintainers = [ + flokli + primeos + ]; + }; - readonly CFG=~/.config/Signal/config.json - readonly KEY="$(${pkgs.jq}/bin/jq --raw-output '.key' $CFG)" - readonly DB="$1" - readonly SQL="SELECT * FROM sqlite_master where type='table'" - ${pkgs.sqlcipher}/bin/sqlcipher "$DB" "PRAGMA key = \"x'$KEY'\"; $SQL" - ''; - in - { - name = "signal-desktop"; - meta = with pkgs.lib.maintainers; { - maintainers = [ - flokli - primeos + nodes.machine = + { ... }: + + { + imports = [ + ./common/user-account.nix + ./common/x11.nix + ]; + + services.xserver.enable = true; + test-support.displayManager.auto.user = "alice"; + environment.systemPackages = with pkgs; [ + signal-desktop + file + sqlite + sqlcipher-signal ]; }; - nodes.machine = - { ... }: + enableOCR = true; - { - imports = [ - ./common/user-account.nix - ./common/x11.nix - ]; + testScript = + { nodes, ... }: + let + user = nodes.machine.config.users.users.alice; + in + '' + start_all() + machine.wait_for_x() - services.xserver.enable = true; - test-support.displayManager.auto.user = "alice"; - environment.systemPackages = with pkgs; [ - signal-desktop - file - sqlite - sqlcipher-signal - ]; - }; + # start signal desktop + machine.execute("su - alice -c signal-desktop >&2 &") - enableOCR = true; + # Wait for the Signal window to appear. Since usually the tests + # are run sandboxed and therefore with no internet, we can not wait + # for the message "Link your phone ...". Nor should we wait for + # the "Failed to connect to server" message, because when manually + # running this test it will be not sandboxed. + machine.wait_for_text("Signal") + machine.wait_for_text("File Edit View Window Help") + machine.screenshot("signal_desktop") - testScript = - { nodes, ... }: - let - user = nodes.machine.config.users.users.alice; - in - '' - start_all() - machine.wait_for_x() - - # start signal desktop - machine.execute("su - alice -c signal-desktop >&2 &") - - # Wait for the Signal window to appear. Since usually the tests - # are run sandboxed and therefore with no internet, we can not wait - # for the message "Link your phone ...". Nor should we wait for - # the "Failed to connect to server" message, because when manually - # running this test it will be not sandboxed. - machine.wait_for_text("Signal") - machine.wait_for_text("File Edit View Window Help") - machine.screenshot("signal_desktop") - - # Test if the database is encrypted to prevent these issues: - # - https://github.com/NixOS/nixpkgs/issues/108772 - # - https://github.com/NixOS/nixpkgs/pull/117555 - print(machine.succeed("su - alice -c 'file ~/.config/Signal/sql/db.sqlite'")) - machine.fail( - "su - alice -c 'file ~/.config/Signal/sql/db.sqlite' | grep -e SQLite -e database" - ) - # Only SQLCipher should be able to read the encrypted DB: - machine.fail( - "su - alice -c 'sqlite3 ~/.config/Signal/sql/db.sqlite .tables'" - ) - print(machine.succeed( - "su - alice -c 'sqlcipher ~/.config/Signal/sql/db.sqlite'" - )) - ''; - } -) + # Test if the database is encrypted to prevent these issues: + # - https://github.com/NixOS/nixpkgs/issues/108772 + # - https://github.com/NixOS/nixpkgs/pull/117555 + print(machine.succeed("su - alice -c 'file ~/.config/Signal/sql/db.sqlite'")) + machine.fail( + "su - alice -c 'file ~/.config/Signal/sql/db.sqlite' | grep -e SQLite -e database" + ) + # Only SQLCipher should be able to read the encrypted DB: + machine.fail( + "su - alice -c 'sqlite3 ~/.config/Signal/sql/db.sqlite .tables'" + ) + print(machine.succeed( + "su - alice -c 'sqlcipher ~/.config/Signal/sql/db.sqlite'" + )) + ''; +}