From 03b7658369bb7c1c8fbbaac7d9e281617cc16135 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 8 Nov 2018 19:55:17 +0000 Subject: oeqa/runtime/cases: Improve test dependency information Add the OEHasPackage decorator to a variety of tests so they determine automatically if they should run against a given image. To ensure tests can do this we need to move target operations such as scp commands into the tests and out of the class startup/teardown. (From OE-Core rev: 60d6580b85714b8960a964e775d76a7f937f5e5a) Signed-off-by: Richard Purdie Signed-off-by: Armin Kuster --- meta/lib/oeqa/runtime/cases/date.py | 2 ++ meta/lib/oeqa/runtime/cases/df.py | 2 ++ meta/lib/oeqa/runtime/cases/opkg.py | 4 ++-- meta/lib/oeqa/runtime/cases/ptest.py | 2 ++ meta/lib/oeqa/runtime/cases/python.py | 8 ++------ meta/lib/oeqa/runtime/cases/rpm.py | 31 ++++++++++++++----------------- meta/lib/oeqa/runtime/cases/scp.py | 2 ++ meta/lib/oeqa/runtime/cases/ssh.py | 2 ++ meta/lib/oeqa/runtime/cases/stap.py | 2 ++ meta/lib/oeqa/runtime/cases/xorg.py | 2 ++ 10 files changed, 32 insertions(+), 25 deletions(-) diff --git a/meta/lib/oeqa/runtime/cases/date.py b/meta/lib/oeqa/runtime/cases/date.py index ece7338de7..0887b831f4 100644 --- a/meta/lib/oeqa/runtime/cases/date.py +++ b/meta/lib/oeqa/runtime/cases/date.py @@ -3,6 +3,7 @@ import re from oeqa.runtime.case import OERuntimeTestCase from oeqa.core.decorator.depends import OETestDepends from oeqa.core.decorator.oeid import OETestID +from oeqa.runtime.decorator.package import OEHasPackage class DateTest(OERuntimeTestCase): @@ -18,6 +19,7 @@ class DateTest(OERuntimeTestCase): @OETestID(211) @OETestDepends(['ssh.SSHTest.test_ssh']) + @OEHasPackage(['coreutils', 'busybox']) def test_date(self): (status, output) = self.target.run('date +"%Y-%m-%d %T"') msg = 'Failed to get initial date, output: %s' % output diff --git a/meta/lib/oeqa/runtime/cases/df.py b/meta/lib/oeqa/runtime/cases/df.py index aecc32d7ce..e0b6bb839d 100644 --- a/meta/lib/oeqa/runtime/cases/df.py +++ b/meta/lib/oeqa/runtime/cases/df.py @@ -1,11 +1,13 @@ from oeqa.runtime.case import OERuntimeTestCase from oeqa.core.decorator.depends import OETestDepends from oeqa.core.decorator.oeid import OETestID +from oeqa.runtime.decorator.package import OEHasPackage class DfTest(OERuntimeTestCase): @OETestID(234) @OETestDepends(['ssh.SSHTest.test_ssh']) + @OEHasPackage(['coreutils', 'busybox']) def test_df(self): cmd = "df / | sed -n '2p' | awk '{print $4}'" (status,output) = self.target.run(cmd) diff --git a/meta/lib/oeqa/runtime/cases/opkg.py b/meta/lib/oeqa/runtime/cases/opkg.py index 671ee06c73..668c876a41 100644 --- a/meta/lib/oeqa/runtime/cases/opkg.py +++ b/meta/lib/oeqa/runtime/cases/opkg.py @@ -16,13 +16,13 @@ class OpkgTest(OERuntimeTestCase): class OpkgRepoTest(OpkgTest): @classmethod - def setUpClass(cls): + def setUp(cls): service_repo = os.path.join(cls.tc.td['DEPLOY_DIR_IPK'], 'all') cls.repo_server = HTTPService(service_repo, cls.tc.target.server_ip) cls.repo_server.start() @classmethod - def tearDownClass(cls): + def tearDown(cls): cls.repo_server.stop() def setup_source_config_for_package_install(self): diff --git a/meta/lib/oeqa/runtime/cases/ptest.py b/meta/lib/oeqa/runtime/cases/ptest.py index 77ae7b6b86..0972a583ee 100644 --- a/meta/lib/oeqa/runtime/cases/ptest.py +++ b/meta/lib/oeqa/runtime/cases/ptest.py @@ -5,6 +5,7 @@ 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 +from oeqa.runtime.decorator.package import OEHasPackage from oeqa.utils.logparser import Lparser, Result class PtestRunnerTest(OERuntimeTestCase): @@ -52,6 +53,7 @@ class PtestRunnerTest(OERuntimeTestCase): @OETestID(1600) @skipIfNotFeature('ptest', 'Test requires ptest to be in DISTRO_FEATURES') @OETestDepends(['ssh.SSHTest.test_ssh']) + @OEHasPackage(['ptest-runner']) @unittest.expectedFailure def test_ptestrunner(self): status, output = self.target.run('which ptest-runner', 0) diff --git a/meta/lib/oeqa/runtime/cases/python.py b/meta/lib/oeqa/runtime/cases/python.py index 4419a9f639..66ab4d25f3 100644 --- a/meta/lib/oeqa/runtime/cases/python.py +++ b/meta/lib/oeqa/runtime/cases/python.py @@ -1,16 +1,12 @@ from oeqa.runtime.case import OERuntimeTestCase from oeqa.core.decorator.depends import OETestDepends from oeqa.core.decorator.oeid import OETestID +from oeqa.runtime.decorator.package import OEHasPackage class PythonTest(OERuntimeTestCase): - @classmethod - def setUpClass(cls): - import unittest - if "python3-core" not in cls.tc.image_packages: - raise unittest.SkipTest("Python3 not on target") - @OETestID(965) @OETestDepends(['ssh.SSHTest.test_ssh']) + @OEHasPackage(['python3-core']) def test_python3(self): cmd = "python3 -c \"import codecs; print(codecs.encode('Uryyb, jbeyq', 'rot13'))\"" status, output = self.target.run(cmd) diff --git a/meta/lib/oeqa/runtime/cases/rpm.py b/meta/lib/oeqa/runtime/cases/rpm.py index 1e5e4631d3..de92157c52 100644 --- a/meta/lib/oeqa/runtime/cases/rpm.py +++ b/meta/lib/oeqa/runtime/cases/rpm.py @@ -10,11 +10,6 @@ from oeqa.core.utils.path import findFile class RpmBasicTest(OERuntimeTestCase): - @classmethod - def setUpClass(cls): - if cls.tc.td['PACKAGE_CLASSES'].split()[0] != 'package_rpm': - cls.skipTest('Tests require image to be build from rpm') - @OETestID(960) @OEHasPackage(['rpm']) @OETestDepends(['ssh.SSHTest.test_ssh']) @@ -26,6 +21,9 @@ class RpmBasicTest(OERuntimeTestCase): @OETestID(191) @OETestDepends(['rpm.RpmBasicTest.test_rpm_help']) def test_rpm_query(self): + status, output = self.target.run('ls /var/lib/rpm/') + if status != 0: + self.skipTest('No /var/lib/rpm on target') status, output = self.target.run('rpm -q rpm') msg = 'status and output: %s and %s' % (status, output) self.assertEqual(status, 0, msg=msg) @@ -34,30 +32,25 @@ class RpmInstallRemoveTest(OERuntimeTestCase): @classmethod def setUpClass(cls): - if cls.tc.td['PACKAGE_CLASSES'].split()[0] != 'package_rpm': - cls.skipTest('Tests require image to be build from rpm') - pkgarch = cls.td['TUNE_PKGARCH'].replace('-', '_') rpmdir = os.path.join(cls.tc.td['DEPLOY_DIR'], 'rpm', pkgarch) # Pick base-passwd-doc as a test file to get installed, because it's small # and it will always be built for standard targets rpm_doc = 'base-passwd-doc-*.%s.rpm' % pkgarch + if not os.path.exists(rpmdir): + return for f in fnmatch.filter(os.listdir(rpmdir), rpm_doc): - test_file = os.path.join(rpmdir, f) - dst = '/tmp/base-passwd-doc.rpm' - cls.tc.target.copyTo(test_file, dst) - - @classmethod - def tearDownClass(cls): - dst = '/tmp/base-passwd-doc.rpm' - cls.tc.target.run('rm -f %s' % dst) + cls.test_file = os.path.join(rpmdir, f) + cls.dst = '/tmp/base-passwd-doc.rpm' @OETestID(192) - @OETestDepends(['rpm.RpmBasicTest.test_rpm_help']) + @OETestDepends(['rpm.RpmBasicTest.test_rpm_query']) def test_rpm_install(self): + self.tc.target.copyTo(self.test_file, self.dst) status, output = self.target.run('rpm -ivh /tmp/base-passwd-doc.rpm') msg = 'Failed to install base-passwd-doc package: %s' % output self.assertEqual(status, 0, msg=msg) + self.tc.target.run('rm -f %s' % self.dst) @OETestID(194) @OETestDepends(['rpm.RpmInstallRemoveTest.test_rpm_install']) @@ -118,6 +111,8 @@ class RpmInstallRemoveTest(OERuntimeTestCase): msg = 'Failed to find database files under /var/lib/rpm/ as __db.xxx' self.assertEqual(0, status, msg=msg) + self.tc.target.copyTo(self.test_file, self.dst) + # Remove the package just in case self.target.run('rpm -e base-passwd-doc') @@ -131,6 +126,8 @@ class RpmInstallRemoveTest(OERuntimeTestCase): msg = 'Failed to remove base-passwd-doc package. Reason: {}'.format(output) self.assertEqual(0, status, msg=msg) + self.tc.target.run('rm -f %s' % self.dst) + # if using systemd this should ensure all entries are flushed to /var status, output = self.target.run("journalctl --sync") # Get the amount of entries in the log file diff --git a/meta/lib/oeqa/runtime/cases/scp.py b/meta/lib/oeqa/runtime/cases/scp.py index f488a6175b..8f895da95a 100644 --- a/meta/lib/oeqa/runtime/cases/scp.py +++ b/meta/lib/oeqa/runtime/cases/scp.py @@ -4,6 +4,7 @@ from tempfile import mkstemp from oeqa.runtime.case import OERuntimeTestCase from oeqa.core.decorator.depends import OETestDepends from oeqa.core.decorator.oeid import OETestID +from oeqa.runtime.decorator.package import OEHasPackage class ScpTest(OERuntimeTestCase): @@ -20,6 +21,7 @@ class ScpTest(OERuntimeTestCase): @OETestID(220) @OETestDepends(['ssh.SSHTest.test_ssh']) + @OEHasPackage(['openssh-scp', 'dropbear']) def test_scp_file(self): dst = '/tmp/test_scp_file' diff --git a/meta/lib/oeqa/runtime/cases/ssh.py b/meta/lib/oeqa/runtime/cases/ssh.py index eca167969a..0b1ea7bcc2 100644 --- a/meta/lib/oeqa/runtime/cases/ssh.py +++ b/meta/lib/oeqa/runtime/cases/ssh.py @@ -1,11 +1,13 @@ from oeqa.runtime.case import OERuntimeTestCase from oeqa.core.decorator.depends import OETestDepends from oeqa.core.decorator.oeid import OETestID +from oeqa.runtime.decorator.package import OEHasPackage class SSHTest(OERuntimeTestCase): @OETestID(224) @OETestDepends(['ping.PingTest.test_ping']) + @OEHasPackage(['dropbear', 'openssh-sshd']) def test_ssh(self): (status, output) = self.target.run('uname -a') self.assertEqual(status, 0, msg='SSH Test failed: %s' % output) diff --git a/meta/lib/oeqa/runtime/cases/stap.py b/meta/lib/oeqa/runtime/cases/stap.py index fc728bfc55..cf4e19e117 100644 --- a/meta/lib/oeqa/runtime/cases/stap.py +++ b/meta/lib/oeqa/runtime/cases/stap.py @@ -4,6 +4,7 @@ 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 +from oeqa.runtime.decorator.package import OEHasPackage class StapTest(OERuntimeTestCase): @@ -22,6 +23,7 @@ class StapTest(OERuntimeTestCase): @skipIfNotFeature('tools-profile', 'Test requires tools-profile to be in IMAGE_FEATURES') @OETestDepends(['kernelmodule.KernelModuleTest.test_kernel_module']) + @OEHasPackage(['systemtap']) def test_stap(self): cmds = [ 'cd /usr/src/kernel && make scripts prepare', diff --git a/meta/lib/oeqa/runtime/cases/xorg.py b/meta/lib/oeqa/runtime/cases/xorg.py index 2124813e3c..82521c69ac 100644 --- a/meta/lib/oeqa/runtime/cases/xorg.py +++ b/meta/lib/oeqa/runtime/cases/xorg.py @@ -2,6 +2,7 @@ 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 +from oeqa.runtime.decorator.package import OEHasPackage class XorgTest(OERuntimeTestCase): @@ -9,6 +10,7 @@ class XorgTest(OERuntimeTestCase): @skipIfNotFeature('x11-base', 'Test requires x11 to be in IMAGE_FEATURES') @OETestDepends(['ssh.SSHTest.test_ssh']) + @OEHasPackage(['xserver-nodm-init']) def test_xorg_running(self): cmd ='%s | grep -v xinit | grep [X]org' % self.tc.target_cmds['ps'] status, output = self.target.run(cmd) -- cgit 1.2.3-korg