Skip to content

Commit b021c9e

Browse files
committed
Add request-id interceptor to use in asserting tests
1 parent 78097e3 commit b021c9e

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

google/cloud/spanner_v1/testing/database_test.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from google.cloud.spanner_v1.testing.interceptors import (
2626
MethodCountInterceptor,
2727
MethodAbortInterceptor,
28+
XGoogRequestIDHeaderInterceptor,
2829
)
2930

3031

@@ -60,9 +61,11 @@ def __init__(
6061

6162
self._method_count_interceptor = MethodCountInterceptor()
6263
self._method_abort_interceptor = MethodAbortInterceptor()
64+
self._x_goog_request_id_interceptor = XGoogRequestIDHeaderInterceptor()
6365
self._interceptors = [
6466
self._method_count_interceptor,
6567
self._method_abort_interceptor,
68+
self._x_goog_request_id_interceptor,
6669
]
6770

6871
@property

google/cloud/spanner_v1/testing/interceptors.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
# limitations under the License.
1414

1515
from collections import defaultdict
16+
import threading
17+
1618
from grpc_interceptor import ClientInterceptor
1719
from google.api_core.exceptions import Aborted
1820

@@ -63,3 +65,30 @@ def reset(self):
6365
self._method_to_abort = None
6466
self._count = 0
6567
self._connection = None
68+
69+
70+
class XGoogRequestIDHeaderInterceptor(ClientInterceptor):
71+
def __init__(self):
72+
self._unary_req_segments = []
73+
self._stream_req_segments = []
74+
self.__lock = threading.Lock()
75+
76+
def intercept(self, method, request_or_iterator, call_details):
77+
metadata = call_details.metadata
78+
x_goog_request_id = None
79+
for key, value in metadata:
80+
if key == "x-goog-spanner-request-id":
81+
x_goog_request_id = value
82+
break
83+
84+
if not x_goog_request_id:
85+
raise Exception(f"Missing {x_goog_request_id}")
86+
87+
streaming = hasattr(request_or_iterator, "__iter__", False)
88+
with self.__lock:
89+
if streaming:
90+
self._stream_req_segments.append(x_goog_request_id)
91+
else:
92+
self._unary_req_segments.append(x_goog_request_id)
93+
94+
return method(request_or_iterator, call_details)

0 commit comments

Comments
 (0)