@@ -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)