1import sys
2
3import pytest
4
5
6import samples.greeter_pb2 as greeter_protos
7import samples.greeter_pb2_grpc as greeter_services
8
9
10
11
12
13async def test_grpc_client_mock_say_hello(service_client, grpc_mockserver):
14 @grpc_mockserver(greeter_services.GreeterServiceServicer.SayHello)
15 async def mock_say_hello(request, context):
16 return greeter_protos.GreetingResponse(
17 greeting=f'Hello, {request.name} from mockserver!',
18 )
19
20 response = await service_client.post('/hello?case=say_hello', data='tests')
21 assert response.status == 200
22 assert 'text/plain' in response.headers['Content-Type']
23 assert response.text == 'Hello, tests from mockserver!'
24 assert mock_say_hello.times_called == 1
25
26
27
28
29async def test_grpc_client_mock_say_hello_response_stream(
30 service_client,
31 grpc_mockserver,
32):
33 @grpc_mockserver(greeter_services.GreeterServiceServicer.SayHelloResponseStream)
34 async def mock_say_hello_response_stream(request, context):
35 message = f'Hello, {request.name}'
36 for i in range(5):
37 message += '!'
38 yield greeter_protos.GreetingResponse(greeting=message)
39
40 response = await service_client.post(
41 '/hello?case=say_hello_response_stream',
42 data='Python',
43 )
44 assert response.status == 200
45 assert 'text/plain' in response.headers['Content-Type']
46 assert (
47 response.text
48 == """Hello, Python!
49Hello, Python!!
50Hello, Python!!!
51Hello, Python!!!!
52Hello, Python!!!!!
53"""
54 )
55 assert mock_say_hello_response_stream.times_called == 1
56
57
58
59
60async def test_grpc_client_mock_say_hello_request_stream(
61 service_client,
62 grpc_mockserver,
63):
64 @grpc_mockserver(greeter_services.GreeterServiceServicer.SayHelloRequestStream)
65 async def mock_say_hello_request_stream(request_iterator, context):
66 message = 'Hello, '
67 async for request in request_iterator:
68 message += f'{request.name}'
69 return greeter_protos.GreetingResponse(greeting=message)
70
71 response = await service_client.post(
72 '/hello?case=say_hello_request_stream',
73 data='Python\n!\n!\n!',
74 )
75 assert response.status == 200
76 assert 'text/plain' in response.headers['Content-Type']
77 assert response.text == 'Hello, Python!!!'
78 assert mock_say_hello_request_stream.times_called == 1
79
80
81
82
83async def test_grpc_client_mock_say_hello_streams(
84 service_client,
85 grpc_mockserver,
86):
87 @grpc_mockserver(greeter_services.GreeterServiceServicer.SayHelloStreams)
88 async def mock_say_hello_streams(request_iterator, context):
89 message = 'Hello, '
90 async for request in request_iterator:
91 message += f'{request.name}'
92 yield greeter_protos.GreetingResponse(greeting=message)
93
94 response = await service_client.post(
95 '/hello?case=say_hello_streams',
96 data='Python\n!\n!\n!',
97 )
98 assert response.status == 200
99 assert 'text/plain' in response.headers['Content-Type']
100 assert (
101 response.text
102 == """Hello, Python
103Hello, Python!
104Hello, Python!!
105Hello, Python!!!
106"""
107 )
108 assert mock_say_hello_streams.times_called == 1
109
110
111
112@pytest.mark.skipif(
113 sys.platform == 'darwin',
114 reason='this test fails in old packages',
115)
116
117async def test_say_hello(grpc_client):
118 request = greeter_protos.GreetingRequest(name='Python')
119 response = await grpc_client.SayHello(request)
120 assert response.greeting == 'Hello, Python!'
121
122
123
124
125async def test_say_hello_response_stream(grpc_client):
126 request = greeter_protos.GreetingRequest(name='Python')
127 message = 'Hello, Python'
128 async for response in grpc_client.SayHelloResponseStream(request):
129 message += '!'
130 assert response.greeting == message
131
132
133
134
135async def test_say_hello_request_stream(grpc_client):
136 request = (greeter_protos.GreetingRequest(name=name) for name in ['Python', '!', '!', '!'])
137 response = await grpc_client.SayHelloRequestStream(request)
138 assert response.greeting == 'Hello, Python!!!'
139
140
141
142
143async def test_say_hello_streams(grpc_client):
144 requests = (greeter_protos.GreetingRequest(name=name) for name in ['Python', '!', '!', '!'])
145 message = 'Hello, Python'
146 async for response in grpc_client.SayHelloStreams(requests):
147 assert response.greeting == message
148 message += '!'
149