~ubuntu-branches/ubuntu/saucy/autopilot/saucy-proposed

« back to all changes in this revision

Viewing changes to autopilot/globals.py

  • Committer: Package Import Robot
  • Author(s): Ubuntu daily release, Łukasz 'sil2100' Zemczak, Ubuntu daily release
  • Date: 2013-07-12 00:02:34 UTC
  • mfrom: (52.5.1) (58.1.9 saucy-proposed)
  • Revision ID: package-import@ubuntu.com-20130712000234-gsrwbjke7oi0yfxt
Tags: 1.3.1+13.10.20130712-0ubuntu1
[ Łukasz 'sil2100' Zemczak ]
* I don't like it, but it's the easiest way - make autopilot-touch
  Arch: any and make the python-ubuntu-platform-api [armhf] dependent.

[ Ubuntu daily release ]
* Automatic snapshot from revision 265

Show diffs side-by-side

added added

removed removed

Lines of Context:
40
40
 
41
41
    def __init__(self):
42
42
        self._log_verbose = False
 
43
        self._log_buffer = None
43
44
 
44
45
    def __call__(self, test_instance):
45
46
        self._setUpTestLogging(test_instance)
57
58
        self._log_verbose = verbose
58
59
 
59
60
    def _setUpTestLogging(self, test_instance):
60
 
        self._log_buffer = StringIO()
61
 
        root_logger = logging.getLogger()
62
 
        root_logger.setLevel(logging.DEBUG)
63
 
        formatter = LogFormatter()
64
 
        self._log_handler = logging.StreamHandler(stream=self._log_buffer)
65
 
        self._log_handler.setFormatter(formatter)
66
 
        root_logger.addHandler(self._log_handler)
67
 
        test_instance.addCleanup(self._tearDownLogging, test_instance)
 
61
        if self._log_buffer is None:
 
62
            self._log_buffer = StringIO()
 
63
            root_logger = logging.getLogger()
 
64
            root_logger.setLevel(logging.DEBUG)
 
65
            formatter = LogFormatter()
 
66
            self._log_handler = logging.StreamHandler(stream=self._log_buffer)
 
67
            self._log_handler.setFormatter(formatter)
 
68
            root_logger.addHandler(self._log_handler)
 
69
            test_instance.addCleanup(self._tearDownLogging, test_instance)
68
70
 
69
71
    def _tearDownLogging(self, test_instance):
70
72
        root_logger = logging.getLogger()
72
74
        self._log_buffer.seek(0)
73
75
        test_instance.addDetail('test-log', text_content(self._log_buffer.getvalue()))
74
76
        root_logger.removeHandler(self._log_handler)
75
 
        # Calling del to remove the handler and flush the buffer.  We are
76
 
        # abusing the log handlers here a little.
77
 
        del self._log_buffer
 
77
        self._log_buffer = None
78
78
 
79
79
 
80
80
_test_logger = _TestLogger()
96
96
 
97
97
    def __init__(self):
98
98
        self._enable_recording = False
 
99
        self._currently_recording_description = None
99
100
 
100
101
    def __call__(self, test_instance):
101
102
        if not self._have_recording_app():
102
103
            logger.warning("Disabling video capture since '%s' is not present", self._recording_app)
103
104
 
 
105
        if self._currently_recording_description is not None:
 
106
            logger.warning("Video capture already in progress for %s", self._currently_recording_description)
 
107
            return
 
108
 
 
109
        self._currently_recording_description = test_instance.shortDescription()
104
110
        self._test_passed = True
105
111
        test_instance.addOnException(self._on_test_failed)
106
112
        test_instance.addCleanup(self._stop_video_capture, test_instance)
117
123
    def set_recording_dir(self, directory):
118
124
        self.recording_directory = directory
119
125
 
 
126
    def set_recording_opts(self, opts):
 
127
        if opts is None:
 
128
            return
 
129
        self._recording_opts = opts.split(',') + self._recording_opts
 
130
 
120
131
    def _have_recording_app(self):
121
132
        return os.path.exists(self._recording_app)
122
133
 
149
160
            if self._capture_process.returncode != 0:
150
161
                test_instance.addDetail('video capture log', text_content(self._capture_process.stdout.read()))
151
162
        self._capture_process = None
 
163
        self._currently_recording_description = None
152
164
 
153
165
    def _get_capture_command_line(self):
154
166
        return [self._recording_app] + self._recording_opts
163
175
 
164
176
    def _on_test_failed(self, ex_info):
165
177
        """Called when a test fails."""
166
 
        self._test_passed = False
 
178
        from unittest.case import SkipTest
 
179
        failure_class_type = ex_info[0]
 
180
        if failure_class_type is not SkipTest:
 
181
            self._test_passed = False
167
182
 
168
183
 
169
184
_video_logger = _VideoLogger()
170
185
 
171
186
 
172
 
def configure_video_recording(enable_recording, record_dir):
 
187
def configure_video_recording(enable_recording, record_dir, record_opts=None):
173
188
    """Configure video logging.
174
189
 
175
190
    enable_recording is a boolean, and enables or disables recording globally.
183
198
 
184
199
    _video_logger.enable_recording(enable_recording)
185
200
    _video_logger.set_recording_dir(record_dir)
 
201
    _video_logger.set_recording_opts(record_opts)
186
202