def test_random_selection(self): strategy = ResponseSelectionStrategy.random r1 = RouteResponse('id1', '', Delay(), weight=0.4) r2 = RouteResponse('id2', '', Delay(), weight=0.6) for i in range(250): response = strategy.select_response([r1, r2]) response.use() assert r1.used_count < r2.used_count
def test_get_response_found(self): r1 = RouteResponse('id1', 'string', Delay()) r2 = RouteResponse('id2', 'string', Delay()) route = Route( id='id1', responses=[r1, r2], response_selection=ResponseSelectionStrategy.random, path=re.compile(r'/test.*'), auth=NoAuth(), method='GET' ) assert route.get_response('id1') is r1
def test_greedy_selection(self): strategy = ResponseSelectionStrategy.greedy r1 = RouteResponse('id1', '', Delay(), repeat=2) r2 = RouteResponse('id2', '', Delay(), repeat=2) assert strategy.select_response([r1, r2]) is r1 r1.use() assert strategy.select_response([r1, r2]) is r1 r1.use() assert strategy.select_response([r1, r2]) is r2 r2.use() assert strategy.select_response([r1, r2]) is r2 r2.use() assert strategy.select_response([r1, r2]) is None
def test_use(self): response = RouteResponse('id', '', Delay(), repeat=1) assert response.is_active assert response.used_count == 0 assert response.repeat == 1 response.use() assert not response.is_active assert response.used_count == 1 assert response.repeat == 1
def test_as_flask_response(self): context = ResponseContext({}) response = Response({'key': 'value'}, Delay(), headers={'header': 'header_value'}) flask_response = response.as_flask_response(context) assert isinstance(flask_response, flask.Response) assert flask_response.status_code == 200 assert flask_response.data == b'{"key": "value"}' assert flask_response.headers['header'] == 'header_value'
def test_is_not_active_if_no_active_response(self): response = RouteResponse('id1', 'string', Delay(), repeat=0) route = Route( id='id1', responses=[response], response_selection=ResponseSelectionStrategy.greedy, path=re.compile(r'/test.*'), auth=NoAuth(), method='GET' ) assert route.is_active == 0
def test_select_response(self): response = RouteResponse('id1', 'string', Delay()) route = Route( id='id1', responses=[response], response_selection=ResponseSelectionStrategy.greedy, path=re.compile(r'/test.*'), auth=NoAuth(), method='GET' ) assert route.select_response() is response
def test_use_increases_counter(self): response = RouteResponse('id1', 'string', Delay()) route = Route( id='id1', responses=[response], response_selection=ResponseSelectionStrategy.random, path=re.compile(r'/test.*'), auth=NoAuth(), method='GET' ) route.use(response) assert route.used_count == 1 assert response.used_count == 1
def test_match_active(self): route = Route( id='id1', responses=[ RouteResponse('id1', '', Delay(), weight=0.4) ], response_selection=ResponseSelectionStrategy.random, path=re.compile(r'/test.*'), auth=NoAuth(), method='GET' ) request = IncomingTestRequest( base_url='http://localhost/', full_path='/test_url', method='GET' ) assert route.match(request)
def test_deserialize_delay_from_single_number(self): delay = Delay.deserialize(1.2) assert delay.min_delay == 1.2 assert delay.max_delay == 1.2
def test_deserialize_delay_from_list(self): delay = Delay.deserialize([1.2, 3.4]) assert delay.min_delay == 1.2 assert delay.max_delay == 3.4
def test_serialize_body_returns_json_as_string(self): context = ResponseContext({}) response = Response('id', {'key': 'value'}, Delay()) response.serialize_body(context) == '{"key": "value"}'
def test_wait_calls_sleep(self, mocker): sleep = mocker.patch('time.sleep') delay = Delay(1.2, 3.4) delay.wait() sleep.assert_called_once()
def test_serialize_min_and_max(self): delay = Delay(1.2, 3.4) assert delay.serialize() == [1.2, 3.4]
def test_deserialize_delay_from_none(self): delay = Delay.deserialize(None) assert delay.min_delay == 0.0 assert delay.max_delay == 0.0
def test_deserialize_min_larger_than_max(self): with pytest.raises(RouteConfigurationError): delay = Delay.deserialize([3.4, 1.2])
def test_serialize_without_arguments(self): delay = Delay() assert delay.serialize() == 0.0
def test_use(self): response = Response('', Delay()) assert response.used_count == 0 response.use() assert response.used_count == 1
def test_serialize_min_and_max_equal(self): delay = Delay(1.2, 1.2) assert delay.serialize() == 1.2
def test_wait(self, mocker): response = Response('', Delay(1.0, 2.0)) sleep = mocker.patch('time.sleep') response.wait() sleep.assert_called_once()
def test_wait_with_empty_delay_calls_sleep_with_0(self, mocker): sleep = mocker.patch('time.sleep') delay = Delay() delay.wait() sleep.assert_called_once_with(0)
def test_serialize_body_returns_strings_as_inserted(self): context = ResponseContext({}) response = Response('string', Delay()) response.serialize_body(context) == 'string'