1*4882a593Smuzhiyun# 2*4882a593Smuzhiyun# SPDX-License-Identifier: MIT 3*4882a593Smuzhiyun# 4*4882a593Smuzhiyun 5*4882a593Smuzhiyunfrom subprocess import Popen, PIPE 6*4882a593Smuzhiyun 7*4882a593Smuzhiyunfrom oeqa.runtime.case import OERuntimeTestCase 8*4882a593Smuzhiyunfrom oeqa.core.decorator.oetimeout import OETimeout 9*4882a593Smuzhiyunfrom oeqa.core.exception import OEQATimeoutError 10*4882a593Smuzhiyun 11*4882a593Smuzhiyunclass PingTest(OERuntimeTestCase): 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun @OETimeout(30) 14*4882a593Smuzhiyun def test_ping(self): 15*4882a593Smuzhiyun output = '' 16*4882a593Smuzhiyun count = 0 17*4882a593Smuzhiyun try: 18*4882a593Smuzhiyun while count < 5: 19*4882a593Smuzhiyun cmd = 'ping -c 1 %s' % self.target.ip 20*4882a593Smuzhiyun proc = Popen(cmd, shell=True, stdout=PIPE) 21*4882a593Smuzhiyun output += proc.communicate()[0].decode('utf-8') 22*4882a593Smuzhiyun if proc.poll() == 0: 23*4882a593Smuzhiyun count += 1 24*4882a593Smuzhiyun else: 25*4882a593Smuzhiyun count = 0 26*4882a593Smuzhiyun except OEQATimeoutError: 27*4882a593Smuzhiyun self.fail("Ping timeout error for address %s, count %s, output: %s" % (self.target.ip, count, output)) 28*4882a593Smuzhiyun msg = ('Expected 5 consecutive, got %d.\n' 29*4882a593Smuzhiyun 'ping output is:\n%s' % (count,output)) 30*4882a593Smuzhiyun self.assertEqual(count, 5, msg = msg) 31