diff mbox series

[1/9] oe-selftest: devtool: use stat for reading user/group names in ide-sdk tests

Message ID 20260318223736.3414885-2-adrian.freihofer@siemens.com
State Under Review
Headers show
Series devtool: ide-sdk clang/LLDB support and minor fixes | expand

Commit Message

Freihofer, Adrian March 18, 2026, 10:36 p.m. UTC
From: Adrian Freihofer <adrian.freihofer@siemens.com>

On some systems, ls truncates long user and group names, which causes the
ownership check to fail. For example:

AssertionError: Regex didn't match:
  '^-.+ cmake-example cmake-example .+ /etc/cmake\\-example\\.conf$' not found in
  '-rw-r--r--    1 cmake-ex cmake-ex        83 Mar  9  2018 /etc/cmake-example.conf'

Use "stat -c '%U %G'" instead, which always returns the full user and group
names regardless of terminal width or system configuration.

Signed-off-by: Adrian Freihofer <adrian.freihofer@siemens.com>

  # Please enter the commit message for your changes. Lines starting
  # with '#' will be ignored, and an empty message aborts the commit.
  #
  # Date:      Mon Mar 2 23:32:13 2026 +0100
  #
  # interactive rebase in progress; onto c1fb515f2a
  # Last commands done (3 commands done):
  #    pick 08cf9a6fc0 # Revert "devtool: ide-sdk deploy-target without bitbake"
  #    reword 2ab466cf23 # oe-selftest: devtool: use stat for reading user names in ide-sdk tests
  # Next commands to do (3 remaining commands):
  #    reword 81562bd21a # oe-selftest/cpp-example: fix conf file ownership with static UIDs/GIDs
  #    reword 1f6fd56a04 # oe-selftest: devtool: GDB breakpoint after std::vector is constructed
  # You are currently editing a commit while rebasing branch 'adrianf/ide-sdk-improvements' on 'c1fb515f2a'.
  #
  # Changes to be committed:
  #	modified:   meta/lib/oeqa/selftest/cases/devtool.py
  #
  # ------------------------ >8 ------------------------
  # Do not modify or remove the line above.
  # Everything below it will be ignored.
  diff --git c/meta/lib/oeqa/selftest/cases/devtool.py i/meta/lib/oeqa/selftest/cases/devtool.py
  index 5f25c4803b..9d8ffcc786 100644
  --- c/meta/lib/oeqa/selftest/cases/devtool.py
  +++ i/meta/lib/oeqa/selftest/cases/devtool.py
  @@ -2934,11 +2934,14 @@ class DevtoolIdeSdkTests(DevtoolBase):

       def _verify_conf_file(self, qemu, conf_file, owner, group):
           """Helper to verify a configuration file is owned by the proper user and group"""
  -        ls_cmd = "ls -l %s" % conf_file
  -        status, output = qemu.run(ls_cmd)
  -        self.assertEqual(status, 0, msg="Failed to ls %s: %s" % (conf_file, output))
  -        self.assertRegex(output, rf"^-.+ {owner} {group} .+ {re.escape(conf_file)}$",
  -                         msg="%s not owned by %s:%s: %s" % (conf_file, owner, group, output))
  +        stat_cmd = "stat -c '%%U %%G' %s" % conf_file
  +        status, output = qemu.run(stat_cmd)
  +        self.assertEqual(status, 0, msg="Failed to stat %s: %s" % (conf_file, output))
  +        actual_owner, actual_group = output.strip().split()
  +        self.assertEqual(actual_owner, owner,
  +                         msg="%s not owned by user %s: got %s" % (conf_file, owner, actual_owner))
  +        self.assertEqual(actual_group, group,
  +                         msg="%s not owned by group %s: got %s" % (conf_file, group, actual_group))

       @OETestTag("runqemu")
       def test_devtool_ide_sdk_none_qemu(self):

Signed-off-by: Adrian Freihofer <adrian.freihofer@siemens.com>
---
 meta/lib/oeqa/selftest/cases/devtool.py | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)
diff mbox series

Patch

diff --git a/meta/lib/oeqa/selftest/cases/devtool.py b/meta/lib/oeqa/selftest/cases/devtool.py
index 5f25c4803b..9d8ffcc786 100644
--- a/meta/lib/oeqa/selftest/cases/devtool.py
+++ b/meta/lib/oeqa/selftest/cases/devtool.py
@@ -2934,11 +2934,14 @@  class DevtoolIdeSdkTests(DevtoolBase):
 
     def _verify_conf_file(self, qemu, conf_file, owner, group):
         """Helper to verify a configuration file is owned by the proper user and group"""
-        ls_cmd = "ls -l %s" % conf_file
-        status, output = qemu.run(ls_cmd)
-        self.assertEqual(status, 0, msg="Failed to ls %s: %s" % (conf_file, output))
-        self.assertRegex(output, rf"^-.+ {owner} {group} .+ {re.escape(conf_file)}$",
-                         msg="%s not owned by %s:%s: %s" % (conf_file, owner, group, output))
+        stat_cmd = "stat -c '%%U %%G' %s" % conf_file
+        status, output = qemu.run(stat_cmd)
+        self.assertEqual(status, 0, msg="Failed to stat %s: %s" % (conf_file, output))
+        actual_owner, actual_group = output.strip().split()
+        self.assertEqual(actual_owner, owner,
+                         msg="%s not owned by user %s: got %s" % (conf_file, owner, actual_owner))
+        self.assertEqual(actual_group, group,
+                         msg="%s not owned by group %s: got %s" % (conf_file, group, actual_group))
 
     @OETestTag("runqemu")
     def test_devtool_ide_sdk_none_qemu(self):