From ee9b0a588fa680a2d9753eb8227c8e5018e9e618 Mon Sep 17 00:00:00 2001 From: Taseer Ahmed Date: Thu, 2 Mar 2017 21:03:24 +0500 Subject: Implement reporter module. - Add cli module - Implement timeline outline JIRA: QTIP-199 Signed-off-by: Taseer Ahmed Change-Id: I487b76123a785731c356143d1ae7f3123c11f398 --- qtip/cli/commands/cmd_report.py | 27 +++++++++++++++++++++++++++ qtip/reporter/console.py | 15 +++++++++++---- qtip/reporter/templates/timeline.j2 | 2 +- tests/data/reporter/timeline.pickle | 3 +++ tests/unit/cli/cmd_report.py | 23 +++++++++++++++++++++++ tests/unit/reporter/console_test.py | 22 ++++++++++++++++------ 6 files changed, 81 insertions(+), 11 deletions(-) create mode 100644 qtip/cli/commands/cmd_report.py create mode 100644 tests/data/reporter/timeline.pickle create mode 100644 tests/unit/cli/cmd_report.py diff --git a/qtip/cli/commands/cmd_report.py b/qtip/cli/commands/cmd_report.py new file mode 100644 index 00000000..c780e847 --- /dev/null +++ b/qtip/cli/commands/cmd_report.py @@ -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 diff --git a/qtip/reporter/console.py b/qtip/reporter/console.py index 24c98e74..2b5130a6 100644 --- a/qtip/reporter/console.py +++ b/qtip/reporter/console.py @@ -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 diff --git a/qtip/reporter/templates/timeline.j2 b/qtip/reporter/templates/timeline.j2 index 9c18a996..d4c95c46 100644 --- a/qtip/reporter/templates/timeline.j2 +++ b/qtip/reporter/templates/timeline.j2 @@ -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 index 00000000..5c870d93 --- /dev/null +++ b/tests/data/reporter/timeline.pickle @@ -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 index 00000000..e010b960 --- /dev/null +++ b/tests/unit/cli/cmd_report.py @@ -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 == '' diff --git a/tests/unit/reporter/console_test.py b/tests/unit/reporter/console_test.py index 8150239e..d2816690 100644 --- a/tests/unit/reporter/console_test.py +++ b/tests/unit/reporter/console_test.py @@ -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 -- cgit 1.2.3-korg