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_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_serialize_deserialize_complete(self): response = RouteResponse.deserialize({ 'id': 'id', 'status': 400, 'weight': 0.3, 'repeat': 3, 'delay': [0.1, 0.2], 'headers': { 'content-type': 'application/json' }, 'body': { 'works': True } }) assert response.serialize() == { 'id': 'id', 'status': 400, 'weight': 0.3, 'repeat': 3, 'delay': [0.1, 0.2], 'is_active': True, 'used_count': 0, 'headers': { 'content-type': 'application/json' }, 'body': { 'works': True } }
def test_deserialize_complete(self): response = RouteResponse.deserialize({ 'id': 'id', 'status': 400, 'weight': 0.3, 'repeat': 3, 'delay': [0.1, 0.2], 'headers': { 'content-type': 'application/json' }, 'body': { 'works': True } }) assert response.id == 'id' assert response.status == 400 assert response.weight == 0.3 assert response.repeat == 3 assert isinstance(response.delay, Delay) assert response.delay.min_delay == 0.1 assert response.delay.max_delay == 0.2 assert response.headers == { 'content-type': 'application/json' } assert response.body == { 'works': True }
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_deserialize_minimal(self): response = RouteResponse.deserialize({ 'id': 'id', 'body': '', }) assert response.id == 'id' assert response.status == 200 assert response.weight == 0.5 assert response.repeat == None assert isinstance(response.delay, Delay) assert response.delay.min_delay == 0.0 assert response.delay.max_delay == 0.0 assert response.headers == {} assert response.body == ''
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_cycle_selection(self): strategy = ResponseSelectionStrategy.cycle r1 = RouteResponse('id1', '', Delay(), repeat=2) r2 = RouteResponse('id2', '', Delay(), repeat=3) 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 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