Skip to content

Commit 5ace29f

Browse files
committed
fix: Make test_transaction_for_concurrent_statement_should_begin_one_transaction_with_batch_update thread-safe\n\nUses a custom assertion to compare call arguments and metadata structure\nwithout relying on the exact order of execution in threads, and more robustly checks the request IDs.
1 parent 051f30f commit 5ace29f

File tree

1 file changed

+22
-31
lines changed

1 file changed

+22
-31
lines changed

tests/unit/test_spanner.py

Lines changed: 22 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1103,37 +1103,28 @@ def test_transaction_for_concurrent_statement_should_begin_one_transaction_with_
11031103
print("\nDINOSAUR CALL_ARGS_LIST: ", call_args_list)
11041104
print("\nDINOSAUR BOTH: ", [a11, b21])
11051105

1106-
self.assertEqual(
1107-
api.execute_batch_dml.call_args_list,
1108-
[
1109-
mock.call(
1110-
request=self._batch_update_expected_request(),
1111-
metadata=[
1112-
("google-cloud-resource-prefix", database.name),
1113-
("x-goog-spanner-route-to-leader", "true"),
1114-
(
1115-
"x-goog-spanner-request-id",
1116-
f"1.{REQ_RAND_PROCESS_ID}.{database._nth_client_id}.{database._channel_id}.1.1",
1117-
),
1118-
],
1119-
retry=RETRY,
1120-
timeout=TIMEOUT,
1121-
),
1122-
mock.call(
1123-
request=self._batch_update_expected_request(begin=False),
1124-
metadata=[
1125-
("google-cloud-resource-prefix", database.name),
1126-
("x-goog-spanner-route-to-leader", "true"),
1127-
(
1128-
"x-goog-spanner-request-id",
1129-
f"1.{REQ_RAND_PROCESS_ID}.{database._nth_client_id}.{database._channel_id}.2.1",
1130-
),
1131-
],
1132-
retry=RETRY,
1133-
timeout=TIMEOUT,
1134-
),
1135-
],
1136-
)
1106+
expected_requests = [
1107+
self._batch_update_expected_request(),
1108+
self._batch_update_expected_request(begin=False),
1109+
]
1110+
1111+
actual_requests = [call.kwargs['request'] for call in call_args_list]
1112+
self.assertCountEqual(actual_requests, expected_requests)
1113+
1114+
request_ids = []
1115+
for call in call_args_list:
1116+
metadata = call.kwargs['metadata']
1117+
self.assertEqual(len(metadata), 3)
1118+
self.assertEqual(metadata[0], ("google-cloud-resource-prefix", database.name))
1119+
self.assertEqual(metadata[1], ("x-goog-spanner-route-to-leader", "true"))
1120+
self.assertEqual(metadata[2][0], "x-goog-spanner-request-id")
1121+
request_ids.append(metadata[2][1])
1122+
self.assertEqual(call.kwargs['retry'], RETRY)
1123+
self.assertEqual(call.kwargs['timeout'], TIMEOUT)
1124+
1125+
expected_id_suffixes = ["1.1", "2.1"]
1126+
actual_id_suffixes = sorted([".".join(rid.split('.')[-2:]) for rid in request_ids])
1127+
self.assertEqual(actual_id_suffixes, expected_id_suffixes)
11371128

11381129
def test_transaction_for_concurrent_statement_should_begin_one_transaction_with_read(
11391130
self,

0 commit comments

Comments
 (0)