Openembedded Core Discussions
 help / color / mirror / Atom feed
From: Armin Kuster <akuster808@gmail.com>
To: openembedded-core@lists.openembedded.org
Subject: [PATCH] runtime ptest: refactor for future work
Date: Mon, 13 May 2019 08:41:01 -0700	[thread overview]
Message-ID: <20190513154101.25386-1-akuster808@gmail.com> (raw)

This in preparation for being able to run and capture each
ptest separately.

moves things to setup and finish functions
breaks a few checks out into their own tests.

no change in result tool output.

Recipe  | Passed    | Failed | Skipped | Time(s)
-------------------------------------------------
openssh | 0         | 0      | 1      | 1
openssl | 146       | 1      | 8      | 68
python  | 0         | 0      | 0      | 22

Signed-off-by: Armin Kuster <akuster808@gmail.com>
---
 meta/lib/oeqa/runtime/cases/ptest.py | 100 +++++++++++++++++----------
 1 file changed, 65 insertions(+), 35 deletions(-)

diff --git a/meta/lib/oeqa/runtime/cases/ptest.py b/meta/lib/oeqa/runtime/cases/ptest.py
index d8d1e1b344..95dd19a5eb 100644
--- a/meta/lib/oeqa/runtime/cases/ptest.py
+++ b/meta/lib/oeqa/runtime/cases/ptest.py
@@ -12,59 +12,92 @@ from oeqa.core.decorator.data import skipIfNotFeature
 from oeqa.runtime.decorator.package import OEHasPackage
 from oeqa.utils.logparser import PtestParser
 
-class PtestRunnerTest(OERuntimeTestCase):
 
-    @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)
-        if status != 0:
-            self.skipTest("No -ptest packages are installed in the image")
+class PTestBase(OERuntimeTestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        cls.ptest_startup()
+
+    @classmethod
+    def tearDownClass(cls):
+        cls.ptest_finishup()
 
-        test_log_dir = self.td.get('TEST_LOG_DIR', '')
+    @classmethod
+    def ptest_startup(cls):
+        cls.failmsg = ""
+
+        cls.test_log_dir = cls.td.get('TEST_LOG_DIR', '')
         # The TEST_LOG_DIR maybe NULL when testimage is added after
         # testdata.json is generated.
-        if not test_log_dir:
-            test_log_dir = os.path.join(self.td.get('WORKDIR', ''), 'testimage')
+        if not cls.test_log_dir:
+            cls.test_log_dir = os.path.join(cls.td.get('WORKDIR', ''), 'testimage')
         # Don't use self.td.get('DATETIME'), it's from testdata.json, not
         # up-to-date, and may cause "File exists" when re-reun.
+
         timestamp = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
-        ptest_log_dir_link = os.path.join(test_log_dir, 'ptest_log')
-        ptest_log_dir = '%s.%s' % (ptest_log_dir_link, timestamp)
-        ptest_runner_log = os.path.join(ptest_log_dir, 'ptest-runner.log')
+        cls.ptest_log_dir_link = os.path.join(cls.test_log_dir, 'ptest_log')
+        cls.ptest_log_dir = '%s.%s' % (cls.ptest_log_dir_link, timestamp)
+        cls.ptest_runner_log = os.path.join(cls.ptest_log_dir, 'ptest-runner.log')
+
+        os.makedirs(cls.ptest_log_dir)
+
+        if not hasattr(cls.tc, "extraresults"):
+            cls.tc.extraresults = {}
+
+        cls.extras = cls.tc.extraresults
+
+    @classmethod
+    def ptest_finishup(cls):
 
+        # update symlink to ptest_log
+        if os.path.exists(cls.ptest_log_dir_link):
+            # Remove the old link to create a new one
+            os.remove(cls.ptest_log_dir_link)
+        os.symlink(os.path.basename(cls.ptest_log_dir), cls.ptest_log_dir_link)
+
+        if cls.failmsg:
+            cls.fail(cls.failmsg)
+
+class PtestRunnerTest(PTestBase):
+
+    @skipIfNotFeature('ptest', 'Test requires ptest to be in DISTRO_FEATURES')
+    @OETestDepends(['ssh.SSHTest.test_ssh'])
+    @OEHasPackage(['ptest-runner'])
+    @unittest.expectedFailure
+    def test_ptestrunner_check(self):
+        status, output = self.target.run('which ptest-runner')
+        msg = 'ptest-runner not installed .  %s' % output
+        self.assertEqual(status, 0, msg=msg)
+
+    def test_ptests_installed(self):
+        status, output = self.target.run('ptest-runner -l')
+        msg = 'No ptests found.  %s' % output
+        self.assertEqual(status, 0, msg=msg)
+
+    @OETestDepends(['ptest.PtestRunnerTest.test_ptests_installed'])
+    def test_ptestrunner(self):
         status, output = self.target.run('ptest-runner', 0)
-        os.makedirs(ptest_log_dir)
-        with open(ptest_runner_log, 'w') as f:
+        with open(self.ptest_runner_log, 'w') as f:
             f.write(output)
 
         # status != 0 is OK since some ptest tests may fail
         self.assertTrue(status != 127, msg="Cannot execute ptest-runner!")
 
-        if not hasattr(self.tc, "extraresults"):
-            self.tc.extraresults = {}
-        extras = self.tc.extraresults
-        extras['ptestresult.rawlogs'] = {'log': output}
-
         # Parse and save results
         parser = PtestParser()
-        results, sections = parser.parse(ptest_runner_log)
-        parser.results_as_files(ptest_log_dir)
-        if os.path.exists(ptest_log_dir_link):
-            # Remove the old link to create a new one
-            os.remove(ptest_log_dir_link)
-        os.symlink(os.path.basename(ptest_log_dir), ptest_log_dir_link)
+        results, sections = parser.parse(self.ptest_runner_log)
+        parser.results_as_files(self.ptest_log_dir)
 
-        extras['ptestresult.sections'] = sections
+        self.extras['ptestresult.rawlogs'] = {'log': output}
+        self.extras['ptestresult.sections'] = sections
 
         trans = str.maketrans("()", "__")
         for section in results:
             for test in results[section]:
                 result = results[section][test]
                 testname = "ptestresult." + (section or "No-section") + "." + "_".join(test.translate(trans).split())
-                extras[testname] = {'status': result}
+                self.extras[testname] = {'status': result}
 
         failed_tests = {}
         for section in results:
@@ -72,13 +105,10 @@ class PtestRunnerTest(OERuntimeTestCase):
             if failed_testcases:
                 failed_tests[section] = failed_testcases
 
-        failmsg = ""
         status, output = self.target.run('dmesg | grep "Killed process"', 0)
         if output:
-            failmsg = "ERROR: Processes were killed by the OOM Killer:\n%s\n" % output
+            self.failmsg = "ERROR: Processes were killed by the OOM Killer:\n%s\n" % output
 
         if failed_tests:
-            failmsg = failmsg + "Failed ptests:\n%s" % pprint.pformat(failed_tests)
+            self.failmsg = self.failmsg + "Failed ptests:\n%s" % pprint.pformat(failed_tests)
 
-        if failmsg:
-            self.fail(failmsg)
-- 
2.17.1



             reply	other threads:[~2019-05-13 15:41 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-13 15:41 Armin Kuster [this message]
2019-05-13 21:32 ` [PATCH] runtime ptest: refactor for future work Richard Purdie

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190513154101.25386-1-akuster808@gmail.com \
    --to=akuster808@gmail.com \
    --cc=openembedded-core@lists.openembedded.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox