| # Copyright 2015 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import cherrypy |
| |
| import common |
| import logging |
| from fake_device_server import server_errors |
| |
| FAIL_CONTROL_PATH = 'fail_control' |
| |
| class FailControl(object): |
| """Interface used to control failing of requests.""" |
| |
| # Needed for cherrypy to expose this to requests. |
| exposed = True |
| |
| def __init__(self): |
| self._in_failure_mode = False |
| |
| def ensure_not_in_failure_mode(self): |
| """Ensures we're not in failure mode. |
| |
| If instructed to fail, this method raises an HTTPError |
| exception with code 500 (Internal Server Error). Otherwise |
| does nothing. |
| |
| """ |
| if not self._in_failure_mode: |
| return |
| raise server_errors.HTTPError(500, 'Instructed to fail this request') |
| |
| @cherrypy.tools.json_out() |
| def POST(self, *args, **kwargs): |
| """Handle POST messages.""" |
| path = list(args) |
| if path == ['start_failing_requests']: |
| self._in_failure_mode = True |
| logging.info('Requested to start failing all requests.') |
| return dict() |
| elif path == ['stop_failing_requests']: |
| self._in_failure_mode = False |
| logging.info('Requested to stop failing all requests.') |
| return dict() |
| else: |
| raise server_errors.HTTPError( |
| 400, 'Unsupported fail_control path %s' % path) |