summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYujun Zhang <zhang.yujunz@zte.com.cn>2017-02-23 20:51:38 +0800
committerYujun Zhang <zhang.yujunz@zte.com.cn>2017-02-24 11:19:17 +0800
commit245b6f4070d1b3b5124a184cb6442b55000fd321 (patch)
tree975a60229a1341a0cc2ea978943b2614b2ee099f
parent452969c058a2f3f3327036b93cbc4bba4d7c574e (diff)
Fix bug when no paths is given for Plan constructor
FileLoader was trying to initialize abspath by finding a matched name from abspath which will lead to an exception. Use default paths of class instead. Change-Id: I8ca2122e97edd734aa68b4c6b12196960842313b Signed-off-by: Yujun Zhang <zhang.yujunz@zte.com.cn>
-rw-r--r--benchmarks/plan/sample.yaml14
-rw-r--r--qtip/collector/logfile.py11
-rw-r--r--qtip/loader/file.py7
-rw-r--r--tests/data/benchmarks/plan/sample.yaml14
-rw-r--r--tests/unit/loader/plan_test.py17
5 files changed, 47 insertions, 16 deletions
diff --git a/benchmarks/plan/sample.yaml b/benchmarks/plan/sample.yaml
new file mode 100644
index 00000000..04e8caf9
--- /dev/null
+++ b/benchmarks/plan/sample.yaml
@@ -0,0 +1,14 @@
+##############################################################################
+# Copyright (c) 2017 ZTE Corporation and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+name: sample
+description: sample benchmark plan for testing default path
+config:
+ collectors: []
+ reporters: []
+QPIs: []
diff --git a/qtip/collector/logfile.py b/qtip/collector/logfile.py
index 2c2e532f..5f0951cb 100644
--- a/qtip/collector/logfile.py
+++ b/qtip/collector/logfile.py
@@ -18,8 +18,8 @@ from qtip.loader.file import FileLoader
class LogItem(BaseActor):
- def find(self, filename, paths=None):
- return self._parent.find(filename, paths)
+ def find(self, filename):
+ return self._parent.find(filename)
class LogfileCollector(BaseActor):
@@ -33,8 +33,7 @@ class LogfileCollector(BaseActor):
self._parent = parent # plan
# TODO(yujunz) handle exception of invalid parent
dirname = os.path.dirname(self._parent.abspath)
- paths = [os.path.join(dirname, p) for p in config.get(self.PATHS, [])]
- self._loader = FileLoader('.', paths)
+ self.paths = [os.path.join(dirname, p) for p in config.get(self.PATHS, [])]
def run(self):
collected = []
@@ -45,8 +44,8 @@ class LogfileCollector(BaseActor):
collected = chain(collected, reduce(chain, matches))
return reduce(merge_matchobj_to_dict, collected, {'groups': (), 'groupdict': {}})
- def find(self, filename, paths=None):
- return self._loader.find(filename, paths)
+ def find(self, filename):
+ return FileLoader.find(filename, self.paths)
def merge_matchobj_to_dict(d, m):
diff --git a/qtip/loader/file.py b/qtip/loader/file.py
index 038f57dd..a39e15f6 100644
--- a/qtip/loader/file.py
+++ b/qtip/loader/file.py
@@ -28,11 +28,12 @@ class FileLoader(BaseLoader):
self._filename = name
self.abspath = self.find(name, paths=paths)
- def find(self, name, paths=None):
+ @classmethod
+ def find(cls, name, paths=None):
"""find a specification in searching paths"""
- paths = [self.abspath] if paths is None else paths
+ paths = cls._paths if paths is None else paths
for p in paths:
- abspath = path.join(p, self.RELATIVE_PATH, name)
+ abspath = path.join(p, cls.RELATIVE_PATH, name)
if path.exists(abspath):
return abspath
raise NotFoundError(name, paths)
diff --git a/tests/data/benchmarks/plan/sample.yaml b/tests/data/benchmarks/plan/sample.yaml
new file mode 100644
index 00000000..04e8caf9
--- /dev/null
+++ b/tests/data/benchmarks/plan/sample.yaml
@@ -0,0 +1,14 @@
+##############################################################################
+# Copyright (c) 2017 ZTE Corporation and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+name: sample
+description: sample benchmark plan for testing default path
+config:
+ collectors: []
+ reporters: []
+QPIs: []
diff --git a/tests/unit/loader/plan_test.py b/tests/unit/loader/plan_test.py
index 70ae2ad5..4c92e8d5 100644
--- a/tests/unit/loader/plan_test.py
+++ b/tests/unit/loader/plan_test.py
@@ -13,15 +13,18 @@ from qtip.collector.logfile import LogfileCollector
from qtip.loader.plan import load_collector
from qtip.loader.plan import Plan
from qtip.loader.plan import PlanProp
-from qtip.loader.plan import QPISpec
-def test_init(plan):
- assert plan.name == 'doctor performance profiling'
- assert isinstance(plan.content, dict)
- for qpi in plan.qpis:
- assert isinstance(qpi, QPISpec)
+def test_construct(benchmarks_root):
+ sample = Plan('sample.yaml')
+ assert isinstance(sample, Plan)
+ # fixture can not be used in pytest.mark.parametrized
+ sample = Plan('sample.yaml', [benchmarks_root])
+ assert isinstance(sample, Plan)
+
+
+def test_invalid_construct():
with pytest.raises(TypeError) as excinfo:
Plan()
assert '__init__() takes at least 2 arguments (1 given)' \
@@ -30,7 +33,7 @@ def test_init(plan):
def test_list_all(benchmarks_root):
plan_list = list(Plan.list_all(paths=[benchmarks_root]))
- assert len(plan_list) is 2
+ assert len(plan_list) is 3
for desc in plan_list:
assert PlanProp.NAME in desc
assert PlanProp.ABSPATH in desc