def test_timer_normal(): from shadow.proxy.web import ProxyFlask svc = mock.Mock() func = mock.Mock(return_value='meh') app = ProxyFlask(svc, ['localhost'], ['localhost']) result, elapsed = app.timer(func, 'hello', world='lol') eq_(result, 'meh') func.assert_called_with('hello', world='lol') assert elapsed >= 0 exception = Exception('test') func = mock.Mock(side_effect=exception) result, elapsed = app.timer(func, 'hello', world='lol') eq_(result, exception) func.assert_called_with('hello', world='lol') assert elapsed >= 0
def test_timer_normal(): from shadow.proxy.web import ProxyFlask svc = mock.Mock() func = mock.Mock(return_value='meh') app = ProxyFlask( svc, ['localhost'], ['localhost'] ) result, elapsed = app.timer(func, 'hello', world='lol') eq_(result, 'meh') func.assert_called_with('hello', world='lol') assert elapsed >= 0 exception = Exception('test') func = mock.Mock(side_effect=exception) result, elapsed = app.timer(func, 'hello', world='lol') eq_(result, exception) func.assert_called_with('hello', world='lol') assert elapsed >= 0
def test_catch_all_default(): from shadow.proxy.web import ProxyFlask from shadow.proxy.web import AbstractResultsLogger import shadow.proxy.web import gevent shadow.proxy.web.config = { 'safe_mode': True } svc = gevent req, expected_req = _mock_request() shadow.proxy.web.request = req mock_result_logger = mock.Mock(spec=AbstractResultsLogger) additional_headers = [('add_header', 'header_value'), ('header', 'altered_header_value')] additional_get = [('add_get', 'get_value')] additional_post = [('add_post', 'post_value')] additional_true_headers = [('add_true_header', 'true_header_value'), ('true_header', 'altered_true_header_value')] additional_true_get = [('add_true_get', 'get_true_value')] additional_true_post = [('add_true_post', 'post_true_value')] app = ProxyFlask( svc, ['old_server'], ['new_server'], new_servers_timeout=1337.0, old_servers_timeout=1339.0, old_servers_additional_headers=additional_true_headers, old_servers_additional_get_params=additional_true_get, old_servers_additional_post_params=additional_true_post, new_servers_additional_headers=additional_headers, new_servers_additional_get_params=additional_get, new_servers_additional_post_params=additional_post, result_loggers=[mock_result_logger] ) with mock.patch.object(app, 'session') as requests: requests.request = mock.Mock() resp, expected_resp, elapsed_time = _mock_response() requests.request.return_value = resp path = "/" # mock timer to return the randomly generated time app.timer = lambda timed_func, *args, **kwargs: (timed_func(*args, **kwargs), elapsed_time) app.catch_all(path) requests.request.assert_has_calls([call( url="old_server/", headers=dict(expected_req['headers'].items() + additional_true_headers), data=dict(expected_req['post'].items() + additional_true_post), params=dict(expected_req['get'].items() + additional_true_get), timeout=1339.0, method=expected_req['method'], config=shadow.proxy.web.config ), call( url="new_server/", headers=dict(expected_req['headers'].items() + additional_headers), data=dict(expected_req['post'].items() + additional_post), params=dict(expected_req['get'].items() + additional_get), timeout=1337.0, method=expected_req['method'], config=shadow.proxy.web.config )], any_order=True) mock_result_logger.log_result.assert_called_with({ 'request': { 'modified': expected_req, 'original': { 'url': req.path, 'method': req.method, 'headers': dict([(unicode(k), unicode(v)) for k, v in req.headers.items()]), 'get': dict([(unicode(k), unicode(v)) for k, v in req.args.items()]), 'post': dict([(unicode(k), unicode(v)) for k, v in req.form.items()]) } }, 'results': [ expected_resp, expected_resp ] })
def test_catch_all_default(): from shadow.proxy.web import ProxyFlask from shadow.proxy.web import AbstractResultsLogger import shadow.proxy.web import gevent shadow.proxy.web.config = {'safe_mode': True} svc = gevent req, expected_req = _mock_request() shadow.proxy.web.request = req mock_result_logger = mock.Mock(spec=AbstractResultsLogger) additional_headers = [('add_header', 'header_value'), ('header', 'altered_header_value')] additional_get = [('add_get', 'get_value')] additional_post = [('add_post', 'post_value')] additional_true_headers = [('add_true_header', 'true_header_value'), ('true_header', 'altered_true_header_value')] additional_true_get = [('add_true_get', 'get_true_value')] additional_true_post = [('add_true_post', 'post_true_value')] app = ProxyFlask(svc, ['old_server'], ['new_server'], new_servers_timeout=1337.0, old_servers_timeout=1339.0, old_servers_additional_headers=additional_true_headers, old_servers_additional_get_params=additional_true_get, old_servers_additional_post_params=additional_true_post, new_servers_additional_headers=additional_headers, new_servers_additional_get_params=additional_get, new_servers_additional_post_params=additional_post, result_loggers=[mock_result_logger]) with mock.patch.object(app, 'session') as requests: requests.request = mock.Mock() resp, expected_resp, elapsed_time = _mock_response() requests.request.return_value = resp path = "/" # mock timer to return the randomly generated time app.timer = lambda timed_func, *args, **kwargs: (timed_func( *args, **kwargs), elapsed_time) app.catch_all(path) requests.request.assert_has_calls([ call( url="old_server/", headers=dict(expected_req['headers'].items() + additional_true_headers), data=dict(expected_req['post'].items() + additional_true_post), params=dict(expected_req['get'].items() + additional_true_get), timeout=1339.0, method=expected_req['method'], config=shadow.proxy.web.config), call(url="new_server/", headers=dict(expected_req['headers'].items() + additional_headers), data=dict(expected_req['post'].items() + additional_post), params=dict(expected_req['get'].items() + additional_get), timeout=1337.0, method=expected_req['method'], config=shadow.proxy.web.config) ], any_order=True) mock_result_logger.log_result.assert_called_with({ 'request': { 'modified': expected_req, 'original': { 'url': req.path, 'method': req.method, 'headers': dict([(unicode(k), unicode(v)) for k, v in req.headers.items()]), 'get': dict([(unicode(k), unicode(v)) for k, v in req.args.items()]), 'post': dict([(unicode(k), unicode(v)) for k, v in req.form.items()]) } }, 'results': [expected_resp, expected_resp] })