Message ID | 20241114174336.3793581-1-ross.burton@arm.com |
---|---|
State | New |
Headers | show |
Series | oeqa/runtime/ping: don't bother trying to ping localhost | expand |
Hi, On Thu, Nov 14, 2024 at 05:43:36PM +0000, Ross Burton via lists.openembedded.org wrote: > If SLIRP is being used instead of TAP for networking to the guest then > the target IP will be localhost. There's no point in pinging localhost > to see if the target is up but whilst you'd think it is harmless, in > some containers ping doesn't actually have enough rights to work: > > ping: socktype: SOCK_RAW > ping: socket: Operation not permitted > ping: => missing cap_net_raw+p capability or setuid? > > Look at the target address and if it's localhost or 127.0.0.* return > immediately. > > Signed-off-by: Ross Burton <ross.burton@arm.com> > --- > meta/lib/oeqa/runtime/cases/ping.py | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/meta/lib/oeqa/runtime/cases/ping.py b/meta/lib/oeqa/runtime/cases/ping.py > index f72460e7f3f..bc543f6c41e 100644 > --- a/meta/lib/oeqa/runtime/cases/ping.py > +++ b/meta/lib/oeqa/runtime/cases/ping.py > @@ -18,6 +18,13 @@ class PingTest(OERuntimeTestCase): > output = '' > count = 0 > self.assertNotEqual(len(self.target.ip), 0, msg="No target IP address set") > + > + # If the target IP is localhost (because user-space networking is being used), > + # then there's no point in pinging it. > + if self.target.ip.startswith("127.0.0.") or self.target.ip in ("localhost", "::1"): > + print("runtime/ping: localhost detected, not pinging") > + return > + > try: > while count < 5: > cmd = 'ping -c 1 %s' % self.target.ip I think this is the right thing to do and enables running these tests in kas container for meta-arm. I have seen some other odd ping test failures with meta-arm builds, which may be related: QMP connected to QEMU at 10/31/24 13:36:14 and took 0.58 seconds QMP released QEMU at 10/31/24 13:36:14 and took 0.18 seconds from connect Bitbake still alive (no events for 600s). Active tasks: /home/builder/src/base/meta-arm/build/../poky/meta/recipes-core/images/core-image-base.bb:do_testimage Test requires apt to be installed Traceback (most recent call last): File "/home/builder/src/base/meta-arm/poky/meta/lib/oeqa/runtime/cases/ping.py", line 30, in test_ping sleep(1) File "/home/builder/src/base/meta-arm/build/../poky/meta/lib/oeqa/core/decorator/oetimeout.py", line 18, in _timeoutHandler raise OEQATimeoutError("Timed out after %s " oeqa.core.exception.OEQATimeoutError: Timed out after 30 seconds of execution During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/builder/src/base/meta-arm/build/../poky/meta/lib/oeqa/core/decorator/__init__.py", line 35, in wrapped_f return func(*args, **kwargs) File "/home/builder/src/base/meta-arm/poky/meta/lib/oeqa/runtime/cases/ping.py", line 32, in test_ping self.fail("Ping timeout error for address %s, count %s, output: %s" % (self.target.ip, count, output)) AssertionError: Ping timeout error for address 127.0.0.1, count 0, output: Then I also saw in one case that running "ping" host binary failed due to command not found when it for sure was there on the host. I think leaked cooker processes could have caused these and expected something to be in build/tmp which had been removed. While debugging into these, I stumbled on the non-cought RuntimeError exception in testimage.bbclass which could explain the errors. Just wanted to share these in case someone has seen similar odd things... Cheers, -Mikko
diff --git a/meta/lib/oeqa/runtime/cases/ping.py b/meta/lib/oeqa/runtime/cases/ping.py index f72460e7f3f..bc543f6c41e 100644 --- a/meta/lib/oeqa/runtime/cases/ping.py +++ b/meta/lib/oeqa/runtime/cases/ping.py @@ -18,6 +18,13 @@ class PingTest(OERuntimeTestCase): output = '' count = 0 self.assertNotEqual(len(self.target.ip), 0, msg="No target IP address set") + + # If the target IP is localhost (because user-space networking is being used), + # then there's no point in pinging it. + if self.target.ip.startswith("127.0.0.") or self.target.ip in ("localhost", "::1"): + print("runtime/ping: localhost detected, not pinging") + return + try: while count < 5: cmd = 'ping -c 1 %s' % self.target.ip
If SLIRP is being used instead of TAP for networking to the guest then the target IP will be localhost. There's no point in pinging localhost to see if the target is up but whilst you'd think it is harmless, in some containers ping doesn't actually have enough rights to work: ping: socktype: SOCK_RAW ping: socket: Operation not permitted ping: => missing cap_net_raw+p capability or setuid? Look at the target address and if it's localhost or 127.0.0.* return immediately. Signed-off-by: Ross Burton <ross.burton@arm.com> --- meta/lib/oeqa/runtime/cases/ping.py | 7 +++++++ 1 file changed, 7 insertions(+)