diff mbox series

oeqa/runtime/ping: don't bother trying to ping localhost

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

Commit Message

Ross Burton Nov. 14, 2024, 5:43 p.m. UTC
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(+)

Comments

Mikko Rapeli Nov. 18, 2024, 8:51 a.m. UTC | #1
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 mbox series

Patch

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