~canonical-platform-qa/snappy-ecosystem-tests/fixing_ci

« back to all changes in this revision

Viewing changes to snappy_ecosystem_tests/plugins/utils.py

  • Committer: Heber Parrucci
  • Date: 2017-02-13 16:00:04 UTC
  • mto: This revision was merged to the branch mainline in revision 14.
  • Revision ID: heber.parrucci@canonical.com-20170213160004-oe9fnfkd6foqllae
Changing runner for pytest to aviod the plugins issues in nose2 using testtools.
Making pylint more strict: fail with Warnings messages.
Refactoring global variables to use Singletons instead.
Updating README.rst with the new runner options

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2
 
 
3
 
#
4
 
# Snappy Ecosystem Tests
5
 
# Copyright (C) 2017 Canonical
6
 
#
7
 
# This program is free software: you can redistribute it and/or modify
8
 
# it under the terms of the GNU General Public License as published by
9
 
# the Free Software Foundation, either version 3 of the License, or
10
 
# (at your option) any later version.
11
 
#
12
 
# This program is distributed in the hope that it will be useful,
13
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
 
# GNU General Public License for more details.
16
 
#
17
 
# You should have received a copy of the GNU General Public License
18
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
 
#
20
 
 
21
 
import traceback
22
 
 
23
 
 
24
 
def exc_info_to_string(err, test):
25
 
    """Format exception info for output"""
26
 
    _format_traceback = getattr(test, 'formatTraceback', None)
27
 
    if _format_traceback is not None:
28
 
        return test.formatTraceback(err)
29
 
    else:
30
 
        return format_traceback(test, err)
31
 
 
32
 
 
33
 
def _is_relevant_tb_level(tb):
34
 
    """Return True if traceback has __unittest in globals"""
35
 
    return '__unittest' in tb.tb_frame.f_globals
36
 
 
37
 
 
38
 
def _count_relevant_tb_levels(tb):
39
 
    """Return the amount of relevant traceback levels in the given traceback"""
40
 
    length = 0
41
 
    while tb and not _is_relevant_tb_level(tb):
42
 
        length += 1
43
 
        tb = tb.tb_next
44
 
    return length
45
 
 
46
 
 
47
 
def format_traceback(test, err):
48
 
    """Converts a :func:`sys.exc_info` -style tuple of values into a string."""
49
 
    exctype, value, tb = err
50
 
    if tb and not hasattr(tb, 'tb_next'):
51
 
        msg_lines = tb
52
 
    else:
53
 
        # Skip test runner traceback levels
54
 
        while tb and _is_relevant_tb_level(tb):
55
 
            tb = tb.tb_next
56
 
        failure = getattr(test, 'failureException', AssertionError)
57
 
        if exctype is failure:
58
 
            # Skip assert*() traceback levels
59
 
            length = _count_relevant_tb_levels(tb)
60
 
            msg_lines = traceback.format_exception(exctype, value, tb, length)
61
 
        else:
62
 
            msg_lines = traceback.format_exception(exctype, value, tb)
63
 
 
64
 
    return ''.join(msg_lines)