diff options
| -rw-r--r-- | meta/lib/oeqa/runtime/cases/_ptest.py | 130 | ||||
| -rw-r--r-- | meta/lib/oeqa/runtime/cases/_qemutiny.py | 11 |
2 files changed, 59 insertions, 82 deletions
diff --git a/meta/lib/oeqa/runtime/cases/_ptest.py b/meta/lib/oeqa/runtime/cases/_ptest.py index a2432517e3..aaed9a5352 100644 --- a/meta/lib/oeqa/runtime/cases/_ptest.py +++ b/meta/lib/oeqa/runtime/cases/_ptest.py | |||
| @@ -1,30 +1,39 @@ | |||
| 1 | import unittest, os, shutil | 1 | import os |
| 2 | from oeqa.oetest import oeRuntimeTest, skipModule | 2 | import shutil |
| 3 | from oeqa.utils.decorators import * | 3 | import subprocess |
| 4 | |||
| 5 | from oeqa.runtime.case import OERuntimeTestCase | ||
| 6 | from oeqa.core.decorator.depends import OETestDepends | ||
| 7 | from oeqa.core.decorator.oeid import OETestID | ||
| 8 | from oeqa.core.decorator.data import skipIfNotDataVar, skipIfNotFeature | ||
| 9 | from oeqa.runtime.decorator.package import OEHasPackage | ||
| 10 | |||
| 11 | from oeqa.runtime.cases.dnf import DnfTest | ||
| 4 | from oeqa.utils.logparser import * | 12 | from oeqa.utils.logparser import * |
| 5 | from oeqa.utils.httpserver import HTTPService | 13 | from oeqa.utils.httpserver import HTTPService |
| 6 | import bb | ||
| 7 | import glob | ||
| 8 | from oe.package_manager import RpmPkgsList | ||
| 9 | import subprocess | ||
| 10 | 14 | ||
| 11 | def setUpModule(): | 15 | class PtestRunnerTest(DnfTest): |
| 12 | if not oeRuntimeTest.hasFeature("package-management"): | 16 | |
| 13 | skipModule("Image doesn't have package management feature") | 17 | @classmethod |
| 14 | if not oeRuntimeTest.hasPackage("smartpm"): | 18 | def setUpClass(cls): |
| 15 | skipModule("Image doesn't have smart installed") | 19 | rpm_deploy = os.path.join(cls.tc.td['DEPLOY_DIR'], 'rpm') |
| 16 | if "package_rpm" != oeRuntimeTest.tc.d.getVar("PACKAGE_CLASSES").split()[0]: | 20 | cls.repo_server = HTTPService(rpm_deploy, cls.tc.target.server_ip) |
| 17 | skipModule("Rpm is not the primary package manager") | 21 | cls.repo_server.start() |
| 18 | 22 | ||
| 19 | class PtestRunnerTest(oeRuntimeTest): | 23 | @classmethod |
| 24 | def tearDownClass(cls): | ||
| 25 | cls.repo_server.stop() | ||
| 20 | 26 | ||
| 21 | # a ptest log parser | 27 | # a ptest log parser |
| 22 | def parse_ptest(self, logfile): | 28 | def parse_ptest(self, logfile): |
| 23 | parser = Lparser(test_0_pass_regex="^PASS:(.+)", test_0_fail_regex="^FAIL:(.+)", section_0_begin_regex="^BEGIN: .*/(.+)/ptest", section_0_end_regex="^END: .*/(.+)/ptest") | 29 | parser = Lparser(test_0_pass_regex="^PASS:(.+)", |
| 30 | test_0_fail_regex="^FAIL:(.+)", | ||
| 31 | section_0_begin_regex="^BEGIN: .*/(.+)/ptest", | ||
| 32 | section_0_end_regex="^END: .*/(.+)/ptest") | ||
| 24 | parser.init() | 33 | parser.init() |
| 25 | result = Result() | 34 | result = Result() |
| 26 | 35 | ||
| 27 | with open(logfile) as f: | 36 | with open(logfile, errors='replace') as f: |
| 28 | for line in f: | 37 | for line in f: |
| 29 | result_tuple = parser.parse_line(line) | 38 | result_tuple = parser.parse_line(line) |
| 30 | if not result_tuple: | 39 | if not result_tuple: |
| @@ -50,70 +59,39 @@ class PtestRunnerTest(oeRuntimeTest): | |||
| 50 | result.sort_tests() | 59 | result.sort_tests() |
| 51 | return result | 60 | return result |
| 52 | 61 | ||
| 53 | @classmethod | 62 | def _install_ptest_packages(self): |
| 54 | def setUpClass(self): | 63 | # Get ptest packages that can be installed in the image. |
| 55 | #note the existing channels that are on the board before creating new ones | 64 | packages_dir = os.path.join(self.tc.td['DEPLOY_DIR'], 'rpm') |
| 56 | # self.existingchannels = set() | 65 | ptest_pkgs = [pkg[:pkg.find('-ptest')+6] |
| 57 | # (status, result) = oeRuntimeTest.tc.target.run('smart channel --show | grep "\["', 0) | 66 | for _, _, filenames in os.walk(packages_dir) |
| 58 | # for x in result.split("\n"): | 67 | for pkg in filenames |
| 59 | # self.existingchannels.add(x) | 68 | if 'ptest' in pkg |
| 60 | self.repo_server = HTTPService(oeRuntimeTest.tc.d.getVar('DEPLOY_DIR'), oeRuntimeTest.tc.target.server_ip) | 69 | and pkg[:pkg.find('-ptest')] in self.tc.image_packages] |
| 61 | self.repo_server.start() | 70 | |
| 62 | 71 | repo_url = 'http://%s:%s' % (self.target.server_ip, | |
| 63 | @classmethod | 72 | self.repo_server.port) |
| 64 | def tearDownClass(self): | 73 | dnf_options = ('--repofrompath=oe-ptest-repo,%s ' |
| 65 | self.repo_server.stop() | 74 | '--nogpgcheck ' |
| 66 | #remove created channels to be able to repeat the tests on same image | 75 | 'install -y' % repo_url) |
| 67 | # (status, result) = oeRuntimeTest.tc.target.run('smart channel --show | grep "\["', 0) | 76 | self.dnf('%s %s ptest-runner' % (dnf_options, ' '.join(ptest_pkgs))) |
| 68 | # for x in result.split("\n"): | 77 | |
| 69 | # if x not in self.existingchannels: | 78 | @skipIfNotFeature('package-management', |
| 70 | # oeRuntimeTest.tc.target.run('smart channel --remove '+x[1:-1]+' -y', 0) | 79 | 'Test requires package-management to be in DISTRO_FEATURES') |
| 71 | 80 | @skipIfNotFeature('ptest', | |
| 72 | def add_smart_channel(self): | 81 | 'Test requires package-management to be in DISTRO_FEATURES') |
| 73 | image_pkgtype = self.tc.d.getVar('IMAGE_PKGTYPE') | 82 | @skipIfNotDataVar('IMAGE_PKGTYPE', 'rpm', |
| 74 | deploy_url = 'http://%s:%s/%s' %(self.target.server_ip, self.repo_server.port, image_pkgtype) | 83 | 'RPM is not the primary package manager') |
| 75 | pkgarchs = self.tc.d.getVar('PACKAGE_ARCHS').replace("-","_").split() | 84 | @OEHasPackage(['dnf']) |
| 76 | for arch in os.listdir('%s/%s' % (self.repo_server.root_dir, image_pkgtype)): | 85 | @OETestDepends(['ssh.SSHTest.test_ssh']) |
| 77 | if arch in pkgarchs: | ||
| 78 | self.target.run('smart channel -y --add {a} type=rpm-md baseurl={u}/{a}'.format(a=arch, u=deploy_url), 0) | ||
| 79 | self.target.run('smart update', 0) | ||
| 80 | |||
| 81 | def install_complementary(self, globs=None): | ||
| 82 | installed_pkgs_file = os.path.join(oeRuntimeTest.tc.d.getVar('WORKDIR'), | ||
| 83 | "installed_pkgs.txt") | ||
| 84 | self.pkgs_list = RpmPkgsList(oeRuntimeTest.tc.d, oeRuntimeTest.tc.d.getVar('IMAGE_ROOTFS'), oeRuntimeTest.tc.d.getVar('arch_var'), oeRuntimeTest.tc.d.getVar('os_var')) | ||
| 85 | with open(installed_pkgs_file, "w+") as installed_pkgs: | ||
| 86 | installed_pkgs.write(self.pkgs_list.list("arch")) | ||
| 87 | |||
| 88 | cmd = [bb.utils.which(os.getenv('PATH'), "oe-pkgdata-util"), | ||
| 89 | "-p", oeRuntimeTest.tc.d.getVar('PKGDATA_DIR'), "glob", installed_pkgs_file, | ||
| 90 | globs] | ||
| 91 | try: | ||
| 92 | bb.note("Installing complementary packages ...") | ||
| 93 | complementary_pkgs = subprocess.check_output(cmd, stderr=subprocess.STDOUT) | ||
| 94 | except subprocess.CalledProcessError as e: | ||
| 95 | bb.fatal("Could not compute complementary packages list. Command " | ||
| 96 | "'%s' returned %d:\n%s" % | ||
| 97 | (' '.join(cmd), e.returncode, e.output)) | ||
| 98 | |||
| 99 | return complementary_pkgs.split() | ||
| 100 | |||
| 101 | def setUpLocal(self): | ||
| 102 | self.ptest_log = os.path.join(oeRuntimeTest.tc.d.getVar("TEST_LOG_DIR"), "ptest-%s.log" % oeRuntimeTest.tc.d.getVar('DATETIME')) | ||
| 103 | |||
| 104 | @skipUnlessPassed('test_ssh') | ||
| 105 | def test_ptestrunner(self): | 86 | def test_ptestrunner(self): |
| 106 | self.add_smart_channel() | 87 | self.ptest_log = os.path.join(self.tc.td['TEST_LOG_DIR'], |
| 107 | (runnerstatus, result) = self.target.run('which ptest-runner', 0) | 88 | 'ptest-%s.log' % self.tc.td['DATETIME']) |
| 108 | cond = oeRuntimeTest.hasPackage("ptest-runner") and oeRuntimeTest.hasFeature("ptest") and oeRuntimeTest.hasPackageMatch("-ptest") and (runnerstatus != 0) | 89 | self._install_ptest_packages() |
| 109 | if cond: | ||
| 110 | self.install_packages(self.install_complementary("*-ptest")) | ||
| 111 | self.install_packages(['ptest-runner']) | ||
| 112 | 90 | ||
| 113 | (runnerstatus, result) = self.target.run('/usr/bin/ptest-runner > /tmp/ptest.log 2>&1', 0) | 91 | (runnerstatus, result) = self.target.run('/usr/bin/ptest-runner > /tmp/ptest.log 2>&1', 0) |
| 114 | #exit code is !=0 even if ptest-runner executes because some ptest tests fail. | 92 | #exit code is !=0 even if ptest-runner executes because some ptest tests fail. |
| 115 | self.assertTrue(runnerstatus != 127, msg="Cannot execute ptest-runner!") | 93 | self.assertTrue(runnerstatus != 127, msg="Cannot execute ptest-runner!") |
| 116 | self.target.copy_from('/tmp/ptest.log', self.ptest_log) | 94 | self.target.copyFrom('/tmp/ptest.log', self.ptest_log) |
| 117 | shutil.copyfile(self.ptest_log, "ptest.log") | 95 | shutil.copyfile(self.ptest_log, "ptest.log") |
| 118 | 96 | ||
| 119 | result = self.parse_ptest("ptest.log") | 97 | result = self.parse_ptest("ptest.log") |
diff --git a/meta/lib/oeqa/runtime/cases/_qemutiny.py b/meta/lib/oeqa/runtime/cases/_qemutiny.py index a3c29f3572..7b5b48141f 100644 --- a/meta/lib/oeqa/runtime/cases/_qemutiny.py +++ b/meta/lib/oeqa/runtime/cases/_qemutiny.py | |||
| @@ -1,9 +1,8 @@ | |||
| 1 | import unittest | 1 | from oeqa.runtime.case import OERuntimeTestCase |
| 2 | from oeqa.oetest import oeRuntimeTest | ||
| 3 | from oeqa.utils.qemutinyrunner import * | ||
| 4 | 2 | ||
| 5 | class QemuTinyTest(oeRuntimeTest): | 3 | class QemuTinyTest(OERuntimeTestCase): |
| 6 | 4 | ||
| 7 | def test_boot_tiny(self): | 5 | def test_boot_tiny(self): |
| 8 | (status, output) = self.target.run_serial('uname -a') | 6 | status, output = self.target.run_serial('uname -a') |
| 9 | self.assertTrue("yocto-tiny" in output, msg="Cannot detect poky tiny boot!") \ No newline at end of file | 7 | msg = "Cannot detect poky tiny boot!" |
| 8 | self.assertTrue("yocto-tiny" in output, msg) | ||
