From 8be00dc71dbe409447feddc42d26bdfaf38703a4 Mon Sep 17 00:00:00 2001 From: aszlig Date: Fri, 22 May 2015 07:14:00 +0200 Subject: 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 --- nixos/doc/manual/development/writing-nixos-tests.xml | 8 ++++++-- nixos/lib/test-driver/Machine.pm | 3 +++ nixos/lib/testing.nix | 11 +++++++++-- nixos/tests/installer.nix | 4 +++- 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; getScreenText Return a textual representation of what is currently visible on the machine's screen using optical character - recognition. + recognition. + This requires passing to the test + attribute set. @@ -248,7 +250,9 @@ startAll; waitForText Wait until the supplied regular expressions matches the textual contents of the screen by using optical character recognition - (see getScreenText). + (see getScreenText). + This requires passing to the test + attribute set. 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/); -- cgit 1.4.1