summaryrefslogtreecommitdiffstats
path: root/meta/lib
diff options
context:
space:
mode:
authorHongxu Jia <hongxu.jia@windriver.com>2018-08-26 13:05:28 +0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2018-08-28 10:30:28 +0100
commit1c048479af7cc98e30f9a33d1f3bef03711544aa (patch)
tree8b97ccb16a3b548ef7b87eac0365d9fc9b36016d /meta/lib
parentec71111c9c5b438d3f2455968e32b47551ddc62d (diff)
downloadpoky-1c048479af7cc98e30f9a33d1f3bef03711544aa.tar.gz
selftest/package: Add package separated debug symbols hardlink test
Tweak recipe selftest-hardlink - addition of libexecdir to simulate multiple directories - add gdb.sh to run gdb from script which is invoked at test time. - rename `hello' -> `hello1' to workaround name confliction with the one in lmbench Add test_gdb_hardlink_debug to selftest/package - run a qemu and invoke gdb.sh to gdb binaries of selftest-hardlink - check gdb to read symbols from separated debug hardlink file - check debug symbols works correctly [Test without commit `package.bbclass: only one hardlink of separated debug info file in each directory'] 2018-08-26 01:27:30,195 - oe-selftest - INFO - test_gdb_hardlink_debug (package.PackageTests) 2018-08-26 01:30:29,005 - oe-selftest - INFO - gdbtest /usr/bin/hello1 2018-08-26 01:30:36,539 - oe-selftest - INFO - gdbtest /usr/bin/hello2 2018-08-26 01:30:43,568 - oe-selftest - INFO - gdbtest /usr/libexec/hello3 2018-08-26 01:30:50,157 - oe-selftest - ERROR - No debugging symbols found. GDB result: Reading symbols from /usr/libexec/hello3...(no debugging symbols found)...done.^M (gdb) Function "main" not defined.^M Make breakpoint pending on future shared library load? (y or [n]) [answered N; input not from terminal]^M (gdb) Starting program: /usr/libexec/hello3 ^M Hello World!^M [Inferior 1 (process 320) exited normally]^M (gdb) The program is not being run.^M (gdb) 2018-08-26 01:30:51,180 - oe-selftest - INFO - ... FAIL 2018-08-26 01:30:51,181 - oe-selftest - INFO - Traceback (most recent call last): File "oe-core/meta/lib/oeqa/selftest/cases/package.py", line 148, in test_gdb_hardlink_debug self.fail('GDB %s failed' % binary) AssertionError: GDB /usr/libexec/hello3 failed [Test without commit `package.bbclass: only one hardlink of separated debug info file in each directory'] [Test with commit `package.bbclass: only one hardlink of separated debug info file in each directory'] 2018-08-26 12:40:30,976 - oe-selftest - INFO - test_gdb_hardlink_debug (package.PackageTests) 2018-08-26 12:42:15,149 - oe-selftest - INFO - gdbtest /usr/bin/hello1 2018-08-26 12:42:24,064 - oe-selftest - INFO - gdbtest /usr/bin/hello2 2018-08-26 12:42:31,078 - oe-selftest - INFO - gdbtest /usr/libexec/hello3 2018-08-26 12:42:38,646 - oe-selftest - INFO - gdbtest /usr/libexec/hello4 2018-08-26 12:42:46,824 - oe-selftest - INFO - ... ok [Test with commit `package.bbclass: only one hardlink of separated debug info file in each directory'] (From OE-Core rev: 104d07e57488f4a414fb5e1f60d0c8b0c02d6b4d) Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib')
-rw-r--r--meta/lib/oeqa/selftest/cases/package.py39
1 files changed, 37 insertions, 2 deletions
diff --git a/meta/lib/oeqa/selftest/cases/package.py b/meta/lib/oeqa/selftest/cases/package.py
index ee6430a184..0a88dc25b3 100644
--- a/meta/lib/oeqa/selftest/cases/package.py
+++ b/meta/lib/oeqa/selftest/cases/package.py
@@ -1,6 +1,6 @@
1from oeqa.selftest.case import OESelftestTestCase 1from oeqa.selftest.case import OESelftestTestCase
2from oeqa.core.decorator.oeid import OETestID 2from oeqa.core.decorator.oeid import OETestID
3from oeqa.utils.commands import bitbake, get_bb_vars, get_bb_var 3from oeqa.utils.commands import bitbake, get_bb_vars, get_bb_var, runqemu
4import stat 4import stat
5import subprocess, os 5import subprocess, os
6import oe.path 6import oe.path
@@ -98,7 +98,7 @@ class PackageTests(OESelftestTestCase):
98 def checkfiles(): 98 def checkfiles():
99 # Recipe creates 4 hardlinked files, there is a copy in package/ and a copy in packages-split/ 99 # Recipe creates 4 hardlinked files, there is a copy in package/ and a copy in packages-split/
100 # so expect 8 in total. 100 # so expect 8 in total.
101 self.assertEqual(os.stat(dest + "/selftest-hardlink" + bindir + "/hello").st_nlink, 8) 101 self.assertEqual(os.stat(dest + "/selftest-hardlink" + bindir + "/hello1").st_nlink, 8)
102 102
103 # Test a sparse file remains sparse 103 # Test a sparse file remains sparse
104 sparsestat = os.stat(dest + "/selftest-hardlink" + bindir + "/sparsetest") 104 sparsestat = os.stat(dest + "/selftest-hardlink" + bindir + "/sparsetest")
@@ -112,3 +112,38 @@ class PackageTests(OESelftestTestCase):
112 bitbake("selftest-hardlink -c package") 112 bitbake("selftest-hardlink -c package")
113 113
114 checkfiles() 114 checkfiles()
115
116 # Verify gdb to read symbols from separated debug hardlink file correctly
117 def test_gdb_hardlink_debug(self):
118 features = 'IMAGE_INSTALL_append = " selftest-hardlink"\n'
119 features += 'IMAGE_INSTALL_append = " selftest-hardlink-dbg"\n'
120 features += 'IMAGE_INSTALL_append = " selftest-hardlink-gdb"\n'
121 self.write_config(features)
122 bitbake("core-image-minimal")
123
124 def gdbtest(qemu, binary):
125 """
126 Check that gdb ``binary`` to read symbols from separated debug file
127 """
128 self.logger.info("gdbtest %s" % binary)
129 status, output = qemu.run_serial('/usr/bin/gdb.sh %s' % binary, timeout=60)
130 for l in output.split('\n'):
131 # Check debugging symbols exists
132 if '(no debugging symbols found)' in l:
133 self.logger.error("No debugging symbols found. GDB result:\n%s" % output)
134 return False
135
136 # Check debugging symbols works correctly
137 elif "Breakpoint 1, main () at hello.c:4" in l:
138 return True
139
140 self.logger.error("GDB result:\n%s: %s" % output)
141 return False
142
143 with runqemu('core-image-minimal') as qemu:
144 for binary in ['/usr/bin/hello1',
145 '/usr/bin/hello2',
146 '/usr/libexec/hello3',
147 '/usr/libexec/hello4']:
148 if not gdbtest(qemu, binary):
149 self.fail('GDB %s failed' % binary)