From ab5e5f5d602c4e5c84f99c2b5ba3b97d3379f5cf Mon Sep 17 00:00:00 2001 From: Yujun Zhang Date: Mon, 5 Dec 2016 15:40:02 +0800 Subject: Implement __init__ and list_all in Suite Change-Id: I97a34610d9f50d6ee81b487d0446eec3f4eea001 Signed-off-by: Yujun Zhang --- qtip/runner/suite.py | 52 ++++++++++++++++++++++++++++++++++------- tests/data/suite/suite-1 | 0 tests/data/suite/suite-2 | 0 tests/data/suite/suite-3 | 0 tests/unit/runner/suite_test.py | 30 +++++++++++++++++++++++- 5 files changed, 73 insertions(+), 9 deletions(-) create mode 100644 tests/data/suite/suite-1 create mode 100644 tests/data/suite/suite-2 create mode 100644 tests/data/suite/suite-3 diff --git a/qtip/runner/suite.py b/qtip/runner/suite.py index f0f2f63e..1892bb28 100644 --- a/qtip/runner/suite.py +++ b/qtip/runner/suite.py @@ -7,21 +7,57 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## +from itertools import chain +from os import listdir +from os import path + + +class SuiteProperty: + NAME = 'name' + DESCRIPTION = 'description' + ABSPATH = 'abspath' + class Suite: """A suite is consist of one or several perf tests and produces one QPI""" - def __init__(self): - pass + # paths to search for suites + _paths = [path.join(path.dirname(__file__), path.pardir, path.pardir, + 'benchmarks', 'suite')] - @staticmethod - def list_all(): + def __init__(self, name): + """:param name: suite name""" + # TODO(yujunz) check existence and expand to full path + self.name = name + self._abspath = self._find(name) + + def _find(self, name): + """find a suite in searching paths""" + for p in self._paths: + abspath = path.join(p, name) + if path.exists(abspath): + return abspath + return None + + @classmethod + def list_all(cls): """list all available suites""" - pass + suite_names = chain.from_iterable([listdir(p) for p in cls._paths]) + return [Suite(name).describe() for name in suite_names] - def desc(self): - """description of the suite""" - pass + def describe(self): + """description of benchmark suite""" + # TODO(yujunz) + # - read description from suite content + # - verbose mode including even more details + # - referred perftests + # - formula of QPI calculation + # - baseline description + return { + SuiteProperty.NAME: self.name, + SuiteProperty.DESCRIPTION: 'QTIP benchmark suite', + SuiteProperty.ABSPATH: self._abspath + } def run(self): """run included perftests in the suite""" diff --git a/tests/data/suite/suite-1 b/tests/data/suite/suite-1 new file mode 100644 index 00000000..e69de29b diff --git a/tests/data/suite/suite-2 b/tests/data/suite/suite-2 new file mode 100644 index 00000000..e69de29b diff --git a/tests/data/suite/suite-3 b/tests/data/suite/suite-3 new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/runner/suite_test.py b/tests/unit/runner/suite_test.py index a2023cf8..0539cee0 100644 --- a/tests/unit/runner/suite_test.py +++ b/tests/unit/runner/suite_test.py @@ -7,7 +7,35 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## +from os import path +import pytest + +from qtip.runner.suite import Suite +from qtip.runner.suite import SuiteProperty as SProp + + +class TestSuiteClass: + def test_attr(self): + assert len(Suite._paths) is 1 + class TestSuite: + Suite._paths = [path.join(path.dirname(__file__), path.pardir, path.pardir, + 'data', 'suite')] + + def test_init(self): + suite = Suite('suite-1') + assert suite.name == 'suite-1' + + with pytest.raises(TypeError) as excinfo: + Suite() + assert '__init__() takes exactly 2 arguments (1 given)' \ + in str(excinfo.value) + def test_list(self): - assert True + suite_list = Suite.list_all() + assert len(list(suite_list)) is 3 + for suite_desc in suite_list: + assert SProp.NAME in suite_desc + assert SProp.DESCRIPTION in suite_desc + assert SProp.ABSPATH in suite_desc -- cgit 1.2.3-korg