Home | History | Annotate | Download | only in fake_device_server
      1 # Copyright 2015 The Chromium OS Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import cherrypy
      6 
      7 import common
      8 import logging
      9 from fake_device_server import server_errors
     10 
     11 FAIL_CONTROL_PATH = 'fail_control'
     12 
     13 class FailControl(object):
     14     """Interface used to control failing of requests."""
     15 
     16     # Needed for cherrypy to expose this to requests.
     17     exposed = True
     18 
     19     def __init__(self):
     20         self._in_failure_mode = False
     21 
     22     def ensure_not_in_failure_mode(self):
     23         """Ensures we're not in failure mode.
     24 
     25         If instructed to fail, this method raises an HTTPError
     26         exception with code 500 (Internal Server Error). Otherwise
     27         does nothing.
     28 
     29         """
     30         if not self._in_failure_mode:
     31             return
     32         raise server_errors.HTTPError(500, 'Instructed to fail this request')
     33 
     34     @cherrypy.tools.json_out()
     35     def POST(self, *args, **kwargs):
     36         """Handle POST messages."""
     37         path = list(args)
     38         if path == ['start_failing_requests']:
     39             self._in_failure_mode = True
     40             logging.info('Requested to start failing all requests.')
     41             return dict()
     42         elif path == ['stop_failing_requests']:
     43             self._in_failure_mode = False
     44             logging.info('Requested to stop failing all requests.')
     45             return dict()
     46         else:
     47             raise server_errors.HTTPError(
     48                     400, 'Unsupported fail_control path %s' % path)
     49