oeqa/runtime/stap.py: add runtime test for systemtap

Message ID 1521741206-5138-2-git-send-email-kamensky@cisco.com
State Superseded
Headers show
Series
  • oeqa/runtime/stap.py: add runtime test for systemtap
Related show

Commit Message

Victor Kamensky March 22, 2018, 5:53 p.m.
Add runtime test for stap to test basic SystemTap
operations: can compile very basic module and run on
target device.

Signed-off-by: Victor Kamensky <kamensky@cisco.com>

---
 meta/lib/oeqa/runtime/cases/stap.py   | 33 +++++++++++++++++++++++++++++++++
 meta/lib/oeqa/runtime/files/hello.stp |  1 +
 2 files changed, 34 insertions(+)
 create mode 100644 meta/lib/oeqa/runtime/cases/stap.py
 create mode 100644 meta/lib/oeqa/runtime/files/hello.stp

-- 
2.7.4

-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Comments

Ross Burton March 26, 2018, 4:05 p.m. | #1
On the autobuilder:

| NOTE: FAIL [15.139s]: test_stap (stap.StapTest)
| NOTE: ----------------------------------------------------------------------
| NOTE: Traceback (most recent call last):
|   File "/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-rpm-non-rpm/build/meta/lib/oeqa/core/decorator/__init__.py",
line 32, in wrapped_f
|     return func(*args, **kwargs)
|   File "/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-rpm-non-rpm/build/meta/lib/oeqa/core/decorator/__init__.py",
line 32, in wrapped_f
|     return func(*args, **kwargs)
|   File "/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-rpm-non-rpm/build/meta/lib/oeqa/core/decorator/__init__.py",
line 32, in wrapped_f
|     return func(*args, **kwargs)
|   File "/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-rpm-non-rpm/build/meta/lib/oeqa/runtime/cases/stap.py",
line 33, in test_stap
|     self.assertEqual(status, 0, msg='\n'.join([cmd, output]))
| AssertionError: 1 != 0 : stap --disable-cache /tmp/hello.stp
| ERROR: module version mismatch (#1 SMP PREEMPT Mon Mar 26 14:41:21
UTC 2018 vs #1 SMP PREEMPT Mon Mar 26 14:03:27 GMT 2018), release
4.14.24-yocto-standard
| WARNING: /usr/bin/staprun exited with status: 1
| Pass 5: run failed.  [man error::pass5]

Is this systemtap-uprobes not being rebuilt when it should?

Ross

On 22 March 2018 at 17:53, Victor Kamensky <kamensky@cisco.com> wrote:
> Add runtime test for stap to test basic SystemTap

> operations: can compile very basic module and run on

> target device.

>

> Signed-off-by: Victor Kamensky <kamensky@cisco.com>

> ---

>  meta/lib/oeqa/runtime/cases/stap.py   | 33 +++++++++++++++++++++++++++++++++

>  meta/lib/oeqa/runtime/files/hello.stp |  1 +

>  2 files changed, 34 insertions(+)

>  create mode 100644 meta/lib/oeqa/runtime/cases/stap.py

>  create mode 100644 meta/lib/oeqa/runtime/files/hello.stp

>

> diff --git a/meta/lib/oeqa/runtime/cases/stap.py b/meta/lib/oeqa/runtime/cases/stap.py

> new file mode 100644

> index 0000000..005da71

> --- /dev/null

> +++ b/meta/lib/oeqa/runtime/cases/stap.py

> @@ -0,0 +1,33 @@

> +import os

> +

> +from oeqa.runtime.case import OERuntimeTestCase

> +from oeqa.core.decorator.depends import OETestDepends

> +from oeqa.core.decorator.oeid import OETestID

> +from oeqa.core.decorator.data import skipIfNotFeature

> +

> +class StapTest(OERuntimeTestCase):

> +

> +    @classmethod

> +    def setUpClass(cls):

> +        src = os.path.join(cls.tc.runtime_files_dir, 'hello.stp')

> +        dst = '/tmp/hello.stp'

> +        cls.tc.target.copyTo(src, dst)

> +

> +    @classmethod

> +    def tearDownClass(cls):

> +        files = '/tmp/hello.stp'

> +        cls.tc.target.run('rm %s' % files)

> +

> +    @OETestID(1652)

> +    @skipIfNotFeature('tools-profile',

> +                      'Test requires tools-profile to be in IMAGE_FEATURES')

> +    @OETestDepends(['kernelmodule.KernelModuleTest.test_kernel_module'])

> +    def test_stap(self):

> +        cmds = [

> +            'cd /usr/src/kernel && make scripts',

> +            'cd /lib/modules/* && (if [ ! -L build ]; then ln -s /usr/src/kernel build; fi)',

> +            'stap --disable-cache /tmp/hello.stp'

> +            ]

> +        for cmd in cmds:

> +            status, output = self.target.run(cmd, 900)

> +            self.assertEqual(status, 0, msg='\n'.join([cmd, output]))

> diff --git a/meta/lib/oeqa/runtime/files/hello.stp b/meta/lib/oeqa/runtime/files/hello.stp

> new file mode 100644

> index 0000000..3677147

> --- /dev/null

> +++ b/meta/lib/oeqa/runtime/files/hello.stp

> @@ -0,0 +1 @@

> +probe oneshot { println("hello world") }

> --

> 2.7.4

>

> --

> _______________________________________________

> Openembedded-core mailing list

> Openembedded-core@lists.openembedded.org

> http://lists.openembedded.org/mailman/listinfo/openembedded-core

-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core
Victor Kamensky April 2, 2018, 4:41 p.m. | #2
On Mon, 26 Mar 2018, Burton, Ross wrote:

> On the autobuilder:

>

> | NOTE: FAIL [15.139s]: test_stap (stap.StapTest)

> | NOTE: ----------------------------------------------------------------------

> | NOTE: Traceback (most recent call last):

> |   File "/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-rpm-non-rpm/build/meta/lib/oeqa/core/decorator/__init__.py",

> line 32, in wrapped_f

> |     return func(*args, **kwargs)

> |   File "/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-rpm-non-rpm/build/meta/lib/oeqa/core/decorator/__init__.py",

> line 32, in wrapped_f

> |     return func(*args, **kwargs)

> |   File "/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-rpm-non-rpm/build/meta/lib/oeqa/core/decorator/__init__.py",

> line 32, in wrapped_f

> |     return func(*args, **kwargs)

> |   File "/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-rpm-non-rpm/build/meta/lib/oeqa/runtime/cases/stap.py",

> line 33, in test_stap

> |     self.assertEqual(status, 0, msg='\n'.join([cmd, output]))

> | AssertionError: 1 != 0 : stap --disable-cache /tmp/hello.stp

> | ERROR: module version mismatch (#1 SMP PREEMPT Mon Mar 26 14:41:21

> UTC 2018 vs #1 SMP PREEMPT Mon Mar 26 14:03:27 GMT 2018), release

> 4.14.24-yocto-standard

> | WARNING: /usr/bin/staprun exited with status: 1

> | Pass 5: run failed.  [man error::pass5]

>

> Is this systemtap-uprobes not being rebuilt when it should?


systemtap-uprobes should not be used nowdays.

Does anyone have pointer to what autobuilder is executing?

Above message indicates that version of kernel that is running
'uname -v' does not match version string recorded in
/usr/src/kernel/include/generated/compile.h (which is part of
kernel-devsrc package). Usually such version check is performed
by kernel CONFIG_MODVERSIONS, which is not enabled in OE build.
SystemTap specifically adds its own kernel version check (the
one firing above) and it could be disabled through command
line parameter.

It is easy to reproduce above error by building core-image-lsb-sdk,
then running 'bitbake -c cleansstate linux-yocto' and rebuilding
core-image-lsb-sdk image again. In resulting image 'uname -v'
will not match UTS_VERSION from
/usr/src/kernel/include/generated/compile.h.

I.e now even kernel-devsrc is pulling information from virtual/kernel,
kernel-devsrc is not rebuilt even if virtual/kernel is
rebuilt. IMHO it should be rebuilt. But is it by design or something
does not work, I cannot tell. In kernel-devsrc there are statements like
'do_install[depends] += "virtual/kernel:do_install"', but whether
those just build ordering statement or whether they should
trigger rebuild if "virtual/kernel:do_install" is newer is not clear.

For now I'll modify stap test patch and call stap with kernel version
check disabled assuming that running kernel and kernel-devsrc always
would be close enough to run without problems. But it would be great if
folks could clarify rebuild dependency rule between virtual/kernel
and kernel-devsrc.

Thanks,
Victor

> Ross

>

> On 22 March 2018 at 17:53, Victor Kamensky <kamensky@cisco.com> wrote:

>> Add runtime test for stap to test basic SystemTap

>> operations: can compile very basic module and run on

>> target device.

>>

>> Signed-off-by: Victor Kamensky <kamensky@cisco.com>

>> ---

>>  meta/lib/oeqa/runtime/cases/stap.py   | 33 +++++++++++++++++++++++++++++++++

>>  meta/lib/oeqa/runtime/files/hello.stp |  1 +

>>  2 files changed, 34 insertions(+)

>>  create mode 100644 meta/lib/oeqa/runtime/cases/stap.py

>>  create mode 100644 meta/lib/oeqa/runtime/files/hello.stp

>>

>> diff --git a/meta/lib/oeqa/runtime/cases/stap.py b/meta/lib/oeqa/runtime/cases/stap.py

>> new file mode 100644

>> index 0000000..005da71

>> --- /dev/null

>> +++ b/meta/lib/oeqa/runtime/cases/stap.py

>> @@ -0,0 +1,33 @@

>> +import os

>> +

>> +from oeqa.runtime.case import OERuntimeTestCase

>> +from oeqa.core.decorator.depends import OETestDepends

>> +from oeqa.core.decorator.oeid import OETestID

>> +from oeqa.core.decorator.data import skipIfNotFeature

>> +

>> +class StapTest(OERuntimeTestCase):

>> +

>> +    @classmethod

>> +    def setUpClass(cls):

>> +        src = os.path.join(cls.tc.runtime_files_dir, 'hello.stp')

>> +        dst = '/tmp/hello.stp'

>> +        cls.tc.target.copyTo(src, dst)

>> +

>> +    @classmethod

>> +    def tearDownClass(cls):

>> +        files = '/tmp/hello.stp'

>> +        cls.tc.target.run('rm %s' % files)

>> +

>> +    @OETestID(1652)

>> +    @skipIfNotFeature('tools-profile',

>> +                      'Test requires tools-profile to be in IMAGE_FEATURES')

>> +    @OETestDepends(['kernelmodule.KernelModuleTest.test_kernel_module'])

>> +    def test_stap(self):

>> +        cmds = [

>> +            'cd /usr/src/kernel && make scripts',

>> +            'cd /lib/modules/* && (if [ ! -L build ]; then ln -s /usr/src/kernel build; fi)',

>> +            'stap --disable-cache /tmp/hello.stp'

>> +            ]

>> +        for cmd in cmds:

>> +            status, output = self.target.run(cmd, 900)

>> +            self.assertEqual(status, 0, msg='\n'.join([cmd, output]))

>> diff --git a/meta/lib/oeqa/runtime/files/hello.stp b/meta/lib/oeqa/runtime/files/hello.stp

>> new file mode 100644

>> index 0000000..3677147

>> --- /dev/null

>> +++ b/meta/lib/oeqa/runtime/files/hello.stp

>> @@ -0,0 +1 @@

>> +probe oneshot { println("hello world") }

>> --

>> 2.7.4

>>

>> --

>> _______________________________________________

>> Openembedded-core mailing list

>> Openembedded-core@lists.openembedded.org

>> http://lists.openembedded.org/mailman/listinfo/openembedded-core

>

-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Patch

diff --git a/meta/lib/oeqa/runtime/cases/stap.py b/meta/lib/oeqa/runtime/cases/stap.py
new file mode 100644
index 0000000..005da71
--- /dev/null
+++ b/meta/lib/oeqa/runtime/cases/stap.py
@@ -0,0 +1,33 @@ 
+import os
+
+from oeqa.runtime.case import OERuntimeTestCase
+from oeqa.core.decorator.depends import OETestDepends
+from oeqa.core.decorator.oeid import OETestID
+from oeqa.core.decorator.data import skipIfNotFeature
+
+class StapTest(OERuntimeTestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        src = os.path.join(cls.tc.runtime_files_dir, 'hello.stp')
+        dst = '/tmp/hello.stp'
+        cls.tc.target.copyTo(src, dst)
+
+    @classmethod
+    def tearDownClass(cls):
+        files = '/tmp/hello.stp'
+        cls.tc.target.run('rm %s' % files)
+
+    @OETestID(1652)
+    @skipIfNotFeature('tools-profile',
+                      'Test requires tools-profile to be in IMAGE_FEATURES')
+    @OETestDepends(['kernelmodule.KernelModuleTest.test_kernel_module'])
+    def test_stap(self):
+        cmds = [
+            'cd /usr/src/kernel && make scripts',
+            'cd /lib/modules/* && (if [ ! -L build ]; then ln -s /usr/src/kernel build; fi)',
+            'stap --disable-cache /tmp/hello.stp'
+            ]
+        for cmd in cmds:
+            status, output = self.target.run(cmd, 900)
+            self.assertEqual(status, 0, msg='\n'.join([cmd, output]))
diff --git a/meta/lib/oeqa/runtime/files/hello.stp b/meta/lib/oeqa/runtime/files/hello.stp
new file mode 100644
index 0000000..3677147
--- /dev/null
+++ b/meta/lib/oeqa/runtime/files/hello.stp
@@ -0,0 +1 @@ 
+probe oneshot { println("hello world") }