Skip to content

Commit ed2723f

Browse files
committed
examples/bench: Add SSL mode
1 parent cd53b7f commit ed2723f

File tree

2 files changed

+42
-4
lines changed

2 files changed

+42
-4
lines changed

examples/bench/echoclient.py

+14
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import argparse
66
import concurrent.futures
77
import socket
8+
import ssl
89
import time
910

1011

@@ -22,8 +23,17 @@
2223
help='number of workers')
2324
parser.add_argument('--addr', default='127.0.0.1:25000', type=str,
2425
help='address:port of echoserver')
26+
parser.add_argument('--ssl', default=False, action='store_true')
2527
args = parser.parse_args()
2628

29+
client_context = None
30+
if args.ssl:
31+
print('with SSL')
32+
client_context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
33+
if hasattr(client_context, 'check_hostname'):
34+
client_context.check_hostname = False
35+
client_context.verify_mode = ssl.CERT_NONE
36+
2737
unix = False
2838
if args.addr.startswith('file:'):
2939
unix = True
@@ -56,7 +66,11 @@ def run_test(n):
5666
except (OSError, NameError):
5767
pass
5868

69+
if client_context:
70+
sock = client_context.wrap_socket(sock)
71+
5972
sock.connect(addr)
73+
6074
while n > 0:
6175
sock.sendall(msg)
6276
nrecv = 0

examples/bench/echoserver.py

+28-4
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
import asyncio
33
import gc
44
import os.path
5+
import pathlib
56
import socket
7+
import ssl
68

79

810
PRINT = 0
@@ -86,6 +88,7 @@ async def print_debug(loop):
8688
parser.add_argument('--proto', default=False, action='store_true')
8789
parser.add_argument('--addr', default='127.0.0.1:25000', type=str)
8890
parser.add_argument('--print', default=False, action='store_true')
91+
parser.add_argument('--ssl', default=False, action='store_true')
8992
args = parser.parse_args()
9093

9194
if args.uvloop:
@@ -119,6 +122,19 @@ async def print_debug(loop):
119122

120123
print('serving on: {}'.format(addr))
121124

125+
server_context = None
126+
if args.ssl:
127+
print('with SSL')
128+
server_context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
129+
server_context.load_cert_chain(
130+
(pathlib.Path(__file__).parent.parent.parent /
131+
'tests' / 'certs' / 'ssl_cert.pem'),
132+
(pathlib.Path(__file__).parent.parent.parent /
133+
'tests' / 'certs' / 'ssl_key.pem'))
134+
if hasattr(server_context, 'check_hostname'):
135+
server_context.check_hostname = False
136+
server_context.verify_mode = ssl.CERT_NONE
137+
122138
if args.streams:
123139
if args.proto:
124140
print('cannot use --stream and --proto simultaneously')
@@ -127,10 +143,12 @@ async def print_debug(loop):
127143
print('using asyncio/streams')
128144
if unix:
129145
coro = asyncio.start_unix_server(echo_client_streams,
130-
addr, loop=loop)
146+
addr, loop=loop,
147+
ssl=server_context)
131148
else:
132149
coro = asyncio.start_server(echo_client_streams,
133-
*addr, loop=loop)
150+
*addr, loop=loop,
151+
ssl=server_context)
134152
srv = loop.run_until_complete(coro)
135153
elif args.proto:
136154
if args.streams:
@@ -139,11 +157,17 @@ async def print_debug(loop):
139157

140158
print('using simple protocol')
141159
if unix:
142-
coro = loop.create_unix_server(EchoProtocol, addr)
160+
coro = loop.create_unix_server(EchoProtocol, addr,
161+
ssl=server_context)
143162
else:
144-
coro = loop.create_server(EchoProtocol, *addr)
163+
coro = loop.create_server(EchoProtocol, *addr,
164+
ssl=server_context)
145165
srv = loop.run_until_complete(coro)
146166
else:
167+
if args.ssl:
168+
print('cannot use SSL for loop.sock_* methods')
169+
exit(1)
170+
147171
print('using sock_recv/sock_sendall')
148172
loop.create_task(echo_server(loop, addr, unix))
149173
try:

0 commit comments

Comments
 (0)