diff --git a/lib/test-driver/Machine.pm b/lib/test-driver/Machine.pm index 9d638dfe0bd..063346b57b9 100644 --- a/lib/test-driver/Machine.pm +++ b/lib/test-driver/Machine.pm @@ -216,6 +216,15 @@ sub mustSucceed { } +sub waitUntilSucceeds { + my ($self, $command) = @_; + retry sub { + my ($status, $out) = $self->execute($command); + return 1 if $status == 0; + }; +} + + sub mustFail { my ($self, $command) = @_; my ($status, $out) = $self->execute($command); diff --git a/tests/quake3.nix b/tests/quake3.nix index e3a190dda7a..a31a14ea18e 100644 --- a/tests/quake3.nix +++ b/tests/quake3.nix @@ -39,10 +39,10 @@ rec { $client1->execute("quake3 '+set r_fullscreen 0' '+set name Foo' '+connect server' &"); $client2->execute("quake3 '+set r_fullscreen 0' '+set name Bar' '+connect server' &"); - sleep 40; + $server->waitUntilSucceeds("grep -q 'Foo.*entered the game' /tmp/log"); + $server->waitUntilSucceeds("grep -q 'Bar.*entered the game' /tmp/log"); - $server->mustSucceed("grep -q 'Foo.*entered the game' /tmp/log"); - $server->mustSucceed("grep -q 'Bar.*entered the game' /tmp/log"); + sleep 30; # wait for a while to get a nice screenshot $client1->screenshot("screen1"); $client2->screenshot("screen2");