summary refs log tree commit diff
path: root/nixos
diff options
context:
space:
mode:
authoraszlig <aszlig@redmoonstudios.org>2015-05-22 07:14:00 +0200
committeraszlig <aszlig@redmoonstudios.org>2015-05-22 07:21:58 +0200
commit8be00dc71dbe409447feddc42d26bdfaf38703a4 (patch)
treeed1958593655e40907c4bd17232bae98c3a50ecc /nixos
parentefd4fcbebc09d2c40713913de40786d8cb31ed9c (diff)
downloadnixlib-8be00dc71dbe409447feddc42d26bdfaf38703a4.tar
nixlib-8be00dc71dbe409447feddc42d26bdfaf38703a4.tar.gz
nixlib-8be00dc71dbe409447feddc42d26bdfaf38703a4.tar.bz2
nixlib-8be00dc71dbe409447feddc42d26bdfaf38703a4.tar.lz
nixlib-8be00dc71dbe409447feddc42d26bdfaf38703a4.tar.xz
nixlib-8be00dc71dbe409447feddc42d26bdfaf38703a4.tar.zst
nixlib-8be00dc71dbe409447feddc42d26bdfaf38703a4.zip
nixos/test-driver: Make tesseract OCR optional.
By default this is now enabled, and it has to be explicitely enabled
using "enableOCR = true". If it is set to false, any usage of
getScreenText or waitForText will fail with an error suggesting to pass
enableOCR.

This should get rid of the rather large dependency on tesseract which
we don't need for most tests.

Note, that I'm using system("type -P") here to check whether tesseract
is in PATH. I know it's a bashism but we already have other bashisms
within the test scripts and we also run it with bash, so IMHO it's not a
problem here.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
Diffstat (limited to 'nixos')
-rw-r--r--nixos/doc/manual/development/writing-nixos-tests.xml8
-rw-r--r--nixos/lib/test-driver/Machine.pm3
-rw-r--r--nixos/lib/testing.nix11
-rw-r--r--nixos/tests/installer.nix4
4 files changed, 21 insertions, 5 deletions
diff --git a/nixos/doc/manual/development/writing-nixos-tests.xml b/nixos/doc/manual/development/writing-nixos-tests.xml
index 322778d1c209..b9da712b86f0 100644
--- a/nixos/doc/manual/development/writing-nixos-tests.xml
+++ b/nixos/doc/manual/development/writing-nixos-tests.xml
@@ -158,7 +158,9 @@ startAll;
     <term><methodname>getScreenText</methodname></term>
     <listitem><para>Return a textual representation of what is currently
     visible on the machine's screen using optical character
-    recognition.</para></listitem>
+    recognition.</para>
+    <note><para>This requires passing <option>enableOCR</option> to the test
+    attribute set.</para></note></listitem>
   </varlistentry>
 
   <varlistentry>
@@ -248,7 +250,9 @@ startAll;
     <term><methodname>waitForText</methodname></term>
     <listitem><para>Wait until the supplied regular expressions matches
     the textual contents of the screen by using optical character recognition
-    (see <methodname>getScreenText</methodname>).</para></listitem>
+    (see <methodname>getScreenText</methodname>).</para>
+    <note><para>This requires passing <option>enableOCR</option> to the test
+    attribute set.</para></note></listitem>
   </varlistentry>
 
   <varlistentry>
diff --git a/nixos/lib/test-driver/Machine.pm b/nixos/lib/test-driver/Machine.pm
index d149634e9e62..824f23bcc4bb 100644
--- a/nixos/lib/test-driver/Machine.pm
+++ b/nixos/lib/test-driver/Machine.pm
@@ -499,6 +499,9 @@ sub screenshot {
 sub getScreenText {
     my ($self) = @_;
 
+    system("type -P tesseract &> /dev/null") == 0
+        or die "getScreenText used but enableOCR is false";
+
     my $text;
     $self->nest("performing optical character recognition", sub {
         my $tmpbase = Cwd::abs_path(".")."/ocr";
diff --git a/nixos/lib/testing.nix b/nixos/lib/testing.nix
index 431e3de6a8ce..2039740a4578 100644
--- a/nixos/lib/testing.nix
+++ b/nixos/lib/testing.nix
@@ -27,7 +27,7 @@ rec {
         cp ${./test-driver/Logger.pm} $libDir/Logger.pm
 
         wrapProgram $out/bin/nixos-test-driver \
-          --prefix PATH : "${qemu_kvm}/bin:${vde2}/bin:${netpbm}/bin:${coreutils}/bin:${tesseract}/bin" \
+          --prefix PATH : "${qemu_kvm}/bin:${vde2}/bin:${netpbm}/bin:${coreutils}/bin" \
           --prefix PERL5LIB : "${with perlPackages; lib.makePerlPath [ TermReadLineGnu XMLWriter IOTty FileSlurp ]}:$out/lib/perl5/site_perl"
       '';
   };
@@ -68,7 +68,12 @@ rec {
 
 
   makeTest =
-    { testScript, makeCoverageReport ? false, name ? "unnamed", ... } @ t:
+    { testScript
+    , makeCoverageReport ? false
+    , enableOCR ? false
+    , name ? "unnamed"
+    , ...
+    } @ t:
 
     let
       testDriverName = "nixos-test-driver-${name}";
@@ -102,12 +107,14 @@ rec {
           vms="$(for i in ${toString vms}; do echo $i/bin/run-*-vm; done)"
           wrapProgram $out/bin/nixos-test-driver \
             --add-flags "$vms" \
+            ${lib.optionalString enableOCR "--prefix PATH : '${tesseract}/bin'"} \
             --run "testScript=\"\$(cat $out/test-script)\"" \
             --set testScript '"$testScript"' \
             --set VLANS '"${toString vlans}"'
           ln -s ${testDriver}/bin/nixos-test-driver $out/bin/nixos-run-vms
           wrapProgram $out/bin/nixos-run-vms \
             --add-flags "$vms" \
+            ${lib.optionalString enableOCR "--prefix PATH : '${tesseract}/bin'"} \
             --set tests '"startAll; joinAll;"' \
             --set VLANS '"${toString vlans}"' \
             ${lib.optionalString (builtins.length vms == 1) "--set USE_SERIAL 1"}
diff --git a/nixos/tests/installer.nix b/nixos/tests/installer.nix
index f491b0460330..64f98141cc0e 100644
--- a/nixos/tests/installer.nix
+++ b/nixos/tests/installer.nix
@@ -252,12 +252,13 @@ let
   makeInstallerTest = name:
     { createPartitions, preBootCommands ? "", extraConfig ? ""
     , testChannel ? false, grubVersion ? 2, grubDevice ? "/dev/vda"
-    , grubIdentifier ? "uuid"
+    , grubIdentifier ? "uuid", enableOCR ? false
     }:
     makeTest {
       inherit iso;
       name = "installer-" + name;
       nodes = if testChannel then { inherit webserver; } else { };
+      inherit enableOCR;
       testScript = testScriptFun {
         inherit createPartitions preBootCommands testChannel grubVersion
                 grubDevice grubIdentifier extraConfig;
@@ -364,6 +365,7 @@ in {
           preLVM = true;
         };
       '';
+      enableOCR = true;
       preBootCommands = ''
         $machine->start;
         $machine->waitForText(qr/Enter passphrase/);