Пример #1
0
async def test_watch_service_status(loop):
    svc = Service()
    s1 = ServiceStatus(loop=loop)
    s2 = ServiceStatus(loop=loop)
    health = Health({svc: [s1, s2]})
    with channel_for([svc, health], loop=loop) as channel:
        stub = HealthStub(channel)
        async with stub.Watch.open() as stream:
            await stream.send_message(
                HealthCheckRequest(service=Service.__name__, ))
            assert await stream.recv_message() == HealthCheckResponse(
                status=HealthCheckResponse.UNKNOWN, )
            s1.set(True)
            assert await stream.recv_message() == HealthCheckResponse(
                status=HealthCheckResponse.NOT_SERVING, )
            s2.set(True)
            assert await stream.recv_message() == HealthCheckResponse(
                status=HealthCheckResponse.SERVING, )
            s1.set(False)
            assert await stream.recv_message() == HealthCheckResponse(
                status=HealthCheckResponse.NOT_SERVING, )
            s1.set(True)
            assert await stream.recv_message() == HealthCheckResponse(
                status=HealthCheckResponse.SERVING, )

            # check that there are no unnecessary messages if status isn't
            # changed
            s1.set(True)
            try:
                with async_timeout.timeout(0.01):
                    assert not await stream.recv_message()
            except asyncio.TimeoutError:
                pass

            await stream.cancel()
Пример #2
0
async def test_check_zero_checks(loop):
    svc = Service()
    health = Health({svc: []})
    with channel_for([svc, health], loop=loop) as channel:
        stub = HealthStub(channel)
        response = await stub.Check(
            HealthCheckRequest(service=Service.__name__, ))
        assert response == HealthCheckResponse(
            status=HealthCheckResponse.SERVING, )
Пример #3
0
async def test_check_unknown_service(loop):
    svc = Service()
    health = Health({svc: []})
    with channel_for([svc, health], loop=loop) as channel:
        stub = HealthStub(channel)

        with pytest.raises(GRPCError):
            await stub.Check(HealthCheckRequest())

        with pytest.raises(GRPCError):
            await stub.Check(HealthCheckRequest(service='Unknown'))
Пример #4
0
async def test_check_service_status(loop, v1, v2, status):
    svc = Service()
    s1 = ServiceStatus(loop=loop)
    s2 = ServiceStatus(loop=loop)
    health = Health({svc: [s1, s2]})
    with channel_for([svc, health], loop=loop) as channel:
        stub = HealthStub(channel)
        s1.set(v1)
        s2.set(v2)
        response = await stub.Check(
            HealthCheckRequest(service=Service.__name__, ))
        assert response == HealthCheckResponse(status=status)
Пример #5
0
async def test_watch_unknown_service(loop, request):
    svc = Service()
    health = Health({svc: []})
    with channel_for([svc, health], loop=loop) as channel:
        stub = HealthStub(channel)
        async with stub.Watch.open() as stream:
            await stream.send_message(request, end=True)
            assert await stream.recv_message() == HealthCheckResponse(
                status=HealthCheckResponse.SERVICE_UNKNOWN, )
            try:
                with async_timeout.timeout(0.01):
                    assert not await stream.recv_message()
            except asyncio.TimeoutError:
                pass
            await stream.cancel()
Пример #6
0
async def test_check_service_check(loop, v1, v2, status):
    svc = Service()
    c1 = Check()
    c2 = Check()
    health = Health({
        svc: [
            ServiceCheck(c1, loop=loop, check_ttl=0),
            ServiceCheck(c2, loop=loop, check_ttl=0),
        ]
    })
    with channel_for([svc, health], loop=loop) as channel:
        stub = HealthStub(channel)
        c1.__current_status__ = v1
        c2.__current_status__ = v2
        response = await stub.Check(
            HealthCheckRequest(service=Service.__name__, ))
        assert response == HealthCheckResponse(status=status)
Пример #7
0
async def test_watch_zero_checks(loop):
    svc = Service()
    health = Health({svc: []})
    with channel_for([svc, health], loop=loop) as channel:
        stub = HealthStub(channel)
        async with stub.Watch.open() as stream:
            await stream.send_message(
                HealthCheckRequest(service=Service.__name__, ))
            response = await stream.recv_message()
            assert response == HealthCheckResponse(
                status=HealthCheckResponse.SERVING, )
            try:
                with async_timeout.timeout(0.01):
                    assert not await stream.recv_message()
            except asyncio.TimeoutError:
                pass
            await stream.cancel()
Пример #8
0
async def test_watch_service_check(loop):
    svc = Service()
    c1 = Check()
    c2 = Check()
    health = Health({
        svc: [
            ServiceCheck(c1, loop=loop, check_ttl=0.001),
            ServiceCheck(c2, loop=loop, check_ttl=0.001),
        ]
    })
    with channel_for([svc, health], loop=loop) as channel:
        stub = HealthStub(channel)
        async with stub.Watch.open() as stream:
            await stream.send_message(
                HealthCheckRequest(service=Service.__name__, ))
            assert await stream.recv_message() == HealthCheckResponse(
                status=HealthCheckResponse.UNKNOWN, )

            # check that there are no unnecessary messages
            try:
                with async_timeout.timeout(0.01):
                    assert not await stream.recv_message()
            except asyncio.TimeoutError:
                pass

            c1.__current_status__ = True
            assert await stream.recv_message() == HealthCheckResponse(
                status=HealthCheckResponse.NOT_SERVING, )
            c2.__current_status__ = True
            assert await stream.recv_message() == HealthCheckResponse(
                status=HealthCheckResponse.SERVING, )
            c1.__current_status__ = False
            assert await stream.recv_message() == HealthCheckResponse(
                status=HealthCheckResponse.NOT_SERVING, )
            c1.__current_status__ = True
            assert await stream.recv_message() == HealthCheckResponse(
                status=HealthCheckResponse.SERVING, )
            await stream.cancel()
Пример #9
0
def stub_fixture(loop):
    with channel_for([DummyService()], loop=loop) as channel:
        yield DummyServiceStub(channel)