Implement reporter module. 57/29657/5
authorTaseer Ahmed <taseer94@gmail.com>
Thu, 2 Mar 2017 16:03:24 +0000 (21:03 +0500)
committerTaseer Ahmed <taseer94@gmail.com>
Fri, 3 Mar 2017 15:24:00 +0000 (20:24 +0500)
- Add cli module
- Implement timeline outline

JIRA: QTIP-199

Signed-off-by: Taseer Ahmed <taseer94@gmail.com>
Change-Id: I487b76123a785731c356143d1ae7f3123c11f398

qtip/cli/commands/cmd_report.py [new file with mode: 0644]
qtip/reporter/console.py
qtip/reporter/templates/timeline.j2
tests/data/reporter/timeline.pickle [new file with mode: 0644]
tests/unit/cli/cmd_report.py [new file with mode: 0644]
tests/unit/reporter/console_test.py

diff --git a/qtip/cli/commands/cmd_report.py b/qtip/cli/commands/cmd_report.py
new file mode 100644 (file)
index 0000000..c780e84
--- /dev/null
@@ -0,0 +1,27 @@
+##############################################################################
+# Copyright (c) 2017 taseer94@gmail.com 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
+##############################################################################
+
+import click
+
+from qtip.cli.entry import Context
+
+pass_context = click.make_pass_decorator(Context, ensure=False)
+
+
+@click.group()
+@pass_context
+def cli(ctx):
+    """ View Qtip results"""
+    pass
+
+
+@cli.command('show')
+@pass_context
+def show(ctx):
+    pass
index 24c98e7..2b5130a 100644 (file)
@@ -1,5 +1,5 @@
 ##############################################################################
-# Copyright (c) 2016 ZTE Corp and others.
+# Copyright (c) 2017 taseer94@gmail.com and others.
 #
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Apache License, Version 2.0
@@ -7,6 +7,9 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 
+from jinja2 import Environment
+from jinja2 import FileSystemLoader
+from os import path
 from qtip.base import BaseActor
 
 
@@ -16,8 +19,12 @@ class ConsoleReporter(BaseActor):
     """
     def __init__(self, config, parent=None):
         super(ConsoleReporter, self).__init__(config, parent=parent)
-        # TODO(yujunz) remove PoC code
-        self._fmt = "{title}: {description}"
+
+        # TODO (taseer) load template from config
+        tpl_loader = FileSystemLoader(path.join(path.dirname(__file__), 'templates'))
+        env = Environment(loader=tpl_loader)
+        self._template = env.get_template('timeline.j2')
 
     def render(self, var_dict):
-        return self._fmt.format(**var_dict)
+        out = self._template.render(var_dict)
+        return out
index 9c18a99..d4c95c4 100644 (file)
@@ -1,4 +1,4 @@
-{% title %}
+{{ title }}
 {% for phase in phases %}
 {{ phase.name|upper }}{{ "TIME" }}
 {% for cp in phase.checkpoints %}
diff --git a/tests/data/reporter/timeline.pickle b/tests/data/reporter/timeline.pickle
new file mode 100644 (file)
index 0000000..5c870d9
--- /dev/null
@@ -0,0 +1,3 @@
+VTimeline\u000a\u000aMONITOR TIME\u000a\u000aT00 1\u000a\u000a\u000aINSPECTOR TIME\u000a\u000aT01 2\u000a\u000aT02 5\u000a\u000aT03 8\u000a\u000a\u000aCONTROLLER TIME\u000a\u000aT04 11\u000a\u000a\u000aNOTIFIER TIME\u000a\u000aT05 16\u000a\u000a\u000aEVALUATOR TIME\u000a\u000aT06 40\u000a\u000a\u000aTotal: 312ms
+p0
+.
diff --git a/tests/unit/cli/cmd_report.py b/tests/unit/cli/cmd_report.py
new file mode 100644 (file)
index 0000000..e010b96
--- /dev/null
@@ -0,0 +1,23 @@
+###############################################################
+# Copyright (c) 2016 ZTE Corp 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
+##############################################################################
+
+import pytest
+from click.testing import CliRunner
+
+from qtip.cli.entry import cli
+
+
+@pytest.fixture(scope="module")
+def runner():
+    return CliRunner()
+
+
+def test_show(runner):
+    result = runner.invoke(cli, ['report', 'show'])
+    assert result.output == ''
index 8150239..d281669 100644 (file)
@@ -7,7 +7,10 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 
+import pickle
 import pytest
+import os
+
 from qtip.reporter.console import ConsoleReporter
 
 
@@ -21,9 +24,16 @@ def test_constructor(console_reporter):
 
 
 def test_render(console_reporter):
-    var_dict = {
-        'title': 'fake title',
-        'description': 'fake description'
-    }
-    output = console_reporter.render(var_dict=var_dict)
-    assert output == 'fake title: fake description'
+    var_dict = {'title': 'Timeline', 'total': '312ms', 'phases': [{'name': 'Monitor ',
+                'checkpoints': [{'name': 'T00 ', 'timestamp': '1'}]},
+               {'name': 'Inspector ', 'checkpoints': [{'name': 'T01 ', 'timestamp': '2'},
+                {'name': 'T02 ', 'timestamp': '5'}, {'name': 'T03 ', 'timestamp': '8'}]},
+               {'name': 'Controller ', 'checkpoints': [{'name': 'T04 ', 'timestamp': '11'}]},
+               {'name': 'Notifier ', 'checkpoints': [{'name': 'T05 ', 'timestamp': '16'}]},
+               {'name': 'Evaluator ', 'checkpoints': [{'name': 'T06 ', 'timestamp': '40'}]}]}
+
+    result = console_reporter.render(var_dict=var_dict)
+    path = os.path.join(os.path.dirname(__file__), os.pardir, os.pardir,
+                        os.pardir, 'tests/data/reporter/')
+    timeline = pickle.load(open(path + 'timeline.pickle', 'rb'))
+    assert result == timeline