diff options
author | Hongxu Jia <hongxu.jia@windriver.com> | 2018-08-26 13:05:28 +0800 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-08-28 10:30:28 +0100 |
commit | 1c048479af7cc98e30f9a33d1f3bef03711544aa (patch) | |
tree | 8b97ccb16a3b548ef7b87eac0365d9fc9b36016d /meta/lib/oeqa/selftest/cases/package.py | |
parent | ec71111c9c5b438d3f2455968e32b47551ddc62d (diff) | |
download | poky-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/oeqa/selftest/cases/package.py')
-rw-r--r-- | meta/lib/oeqa/selftest/cases/package.py | 39 |
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 @@ | |||
1 | from oeqa.selftest.case import OESelftestTestCase | 1 | from oeqa.selftest.case import OESelftestTestCase |
2 | from oeqa.core.decorator.oeid import OETestID | 2 | from oeqa.core.decorator.oeid import OETestID |
3 | from oeqa.utils.commands import bitbake, get_bb_vars, get_bb_var | 3 | from oeqa.utils.commands import bitbake, get_bb_vars, get_bb_var, runqemu |
4 | import stat | 4 | import stat |
5 | import subprocess, os | 5 | import subprocess, os |
6 | import oe.path | 6 | import 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) | ||