blob: 77165fe183018d754a7a767b1a7bc9d49fe4c988 [file] [log] [blame]
# 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)