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
Beispiel #10
0
 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)
Beispiel #11
0
    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