diff --git a/meta/lib/oeqa/runtime/cases/ssh.py b/meta/lib/oeqa/runtime/cases/ssh.py index cdbef59500..ae92bb34cd 100644 --- a/meta/lib/oeqa/runtime/cases/ssh.py +++ b/meta/lib/oeqa/runtime/cases/ssh.py @@ -4,6 +4,8 @@ # SPDX-License-Identifier: MIT # +import time + from oeqa.runtime.case import OERuntimeTestCase from oeqa.core.decorator.depends import OETestDepends from oeqa.runtime.decorator.package import OEHasPackage @@ -13,12 +15,20 @@ class SSHTest(OERuntimeTestCase): @OETestDepends(['ping.PingTest.test_ping']) @OEHasPackage(['dropbear', 'openssh-sshd']) def test_ssh(self): - (status, output) = self.target.run('sleep 20', timeout=2) - msg='run() timed out but return code was zero.' - self.assertNotEqual(status, 0, msg=msg) - (status, output) = self.target.run('uname -a') - self.assertEqual(status, 0, msg='SSH Test failed: %s' % output) - (status, output) = self.target.run('cat /etc/controllerimage') - msg = "This isn't the right image - /etc/controllerimage " \ - "shouldn't be here %s" % output - self.assertEqual(status, 1, msg=msg) + for i in range(5): + status, output = self.target.run("uname -a", timeout=5) + if status == 0: + break + elif status == 255: + # ssh returns 255 only if a ssh error occurs. This could + # be an issue with "Connection refused" because the port + # isn't open yet, and this could check explicitly for that + # here. However, let's keep it simple and just retry for + # all errors a limited amount of times with a sleep to + # give it time for the port to open. + time.sleep(5) + continue + else: + self.fail("uname failed with \"%s\"" %output) + if status == 255: + self.fail("ssh error %s" %output)