14 """Common code used throughout tests of gRPC."""
17 from concurrent
import futures
23 INVOCATION_INITIAL_METADATA = (
28 SERVICE_INITIAL_METADATA = (
33 SERVICE_TERMINAL_METADATA = (
38 DETAILS =
'test details'
42 """Judges whether or not metadata was acceptably transmitted.
44 gRPC is allowed to insert key-value pairs into the metadata values given by
45 applications and to reorder key-value pairs with different keys but it is not
46 allowed to alter existing key-value pairs or to reorder key-value pairs with
50 original_metadata: A metadata value used in a test of gRPC. An iterable over
51 iterables of length 2.
52 transmitted_metadata: A metadata value corresponding to original_metadata
53 after having been transmitted via gRPC. An iterable over iterables of
57 A boolean indicating whether transmitted_metadata accurately reflects
58 original_metadata after having been transmitted via gRPC.
60 original = collections.defaultdict(list)
61 for key, value
in original_metadata:
62 original[key].append(value)
63 transmitted = collections.defaultdict(list)
64 for key, value
in transmitted_metadata:
65 transmitted[key].append(value)
67 for key, values
in six.iteritems(original):
68 transmitted_values = transmitted[key]
69 transmitted_iterator =
iter(transmitted_values)
73 transmitted_value =
next(transmitted_iterator)
74 if value == transmitted_value:
83 """Creates an insecure Channel to a remote host.
86 host: The name of the remote host to which to connect.
87 port: The port of the remote host to which to connect.
88 channel_credentials: The implementations.ChannelCredentials with which to
90 server_host_override: The target name used for SSL host name checking.
93 An implementations.Channel to the remote host through which RPCs may be
97 'grpc.ssl_target_name_override',
104 """Creates an insecure grpc server.
106 These servers have SO_REUSEPORT disabled to prevent cross-talk.
108 return grpc.server(futures.ThreadPoolExecutor(max_workers=max_workers),
109 options=((
'grpc.so_reuseport',
int(reuse_port)),))
116 self.
cv = threading.Condition()
132 while self.
count > 0:
139 from gevent
import monkey
145 return socket.socket
is gevent.socket.socket