[oe-commits] Stefan Stanacar : lib/oeqa/runtime: ping: fix ping false fail

git at git.openembedded.org git at git.openembedded.org
Fri Aug 30 16:56:55 UTC 2013


Module: openembedded-core.git
Branch: master
Commit: 56d144fd22d37189e49cdf3032afb00f0be469c6
URL:    http://git.openembedded.org/?p=openembedded-core.git&a=commit;h=56d144fd22d37189e49cdf3032afb00f0be469c6

Author: Stefan Stanacar <stefanx.stanacar at intel.com>
Date:   Fri Aug 30 19:48:53 2013 +0300

lib/oeqa/runtime: ping: fix ping false fail

We run the ping test as soon as we reach the login prompt.
But sometimes (seen in sato systemd) we end up with link down/link up stuff like:

    qemux86-64 login: IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
    e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
    IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

The logic behind ping -w 30 -c 1 was to wait at most 30 seconds
for at least one reply,  but there is a catch: reply doesn't seems
to be echo reply but any reply (non-reply means loss not network error)
ping's man page:
    -w deadline
              Specify  a  timeout, in seconds, before ping exits regardless of
              how many packets have been sent or received. In this  case  ping
              does  not  stop after count packet are sent, it waits either for
              deadline expire or until count probes are answered or  for  some
              error notification from network.

Just when the link up/link down happens ping returns:
    From 192.168.7.1 icmp_seq=1 Destination Host Unreachable
    --- 192.168.7.2 ping statistics ---
    1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

and exits sooner than the 30 seconds timeout.

This patch should do what was originally intended (wait at most
30 seconds for at least one reply).

Signed-off-by: Stefan Stanacar <stefanx.stanacar at intel.com>
Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>

---

 meta/lib/oeqa/runtime/ping.py |   12 +++++++++---
 1 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/meta/lib/oeqa/runtime/ping.py b/meta/lib/oeqa/runtime/ping.py
index d6a0c28..935f638 100644
--- a/meta/lib/oeqa/runtime/ping.py
+++ b/meta/lib/oeqa/runtime/ping.py
@@ -1,11 +1,17 @@
 import subprocess
 import unittest
 import sys
+import time
 from oeqa.oetest import oeRuntimeTest
 
 class PingTest(oeRuntimeTest):
 
     def test_ping(self):
-        status = subprocess.call("ping -w 30 -c 1 %s" % oeRuntimeTest.tc.qemu.ip, shell=True, stdout=subprocess.PIPE)
-        self.assertEqual(status, 0)
-
+        output = ''
+        status = None
+        endtime = time.time() + 30
+        while status != 0 and time.time() < endtime:
+            proc = subprocess.Popen("ping -c 1 %s" % oeRuntimeTest.tc.qemu.ip, shell=True, stdout=subprocess.PIPE)
+            output += proc.communicate()[0]
+            status = proc.poll()
+        self.assertEqual(status, 0, msg = "No echo reply, ping output is:\n%s" % output)



More information about the Openembedded-commits mailing list