Skip to content

Commit bb6349f

Browse files
committed
test(spanner): update mock server tests for inlined transactions
1 parent 9fe89fb commit bb6349f

File tree

10 files changed

+65
-60
lines changed

10 files changed

+65
-60
lines changed

packages/sqlalchemy-spanner/tests/mockserver_tests/mock_server_test_base.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -161,12 +161,9 @@ def teardown_method(self):
161161
MockServerTestBase.database_admin_service.clear_requests()
162162

163163
def create_engine(self) -> Engine:
164-
from sqlalchemy.pool import NullPool
165-
166164
return create_engine(
167165
"spanner:///projects/p/instances/i/databases/d",
168166
connect_args={"client": self.client, "logger": MockServerTestBase.logger},
169-
poolclass=NullPool, # Disable pooling to force new sessions for every test
170167
)
171168

172169
@property

packages/sqlalchemy-spanner/tests/mockserver_tests/test_auto_increment.py

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

1515
from sqlalchemy.orm import Session
16-
from sqlalchemy.testing import eq_, is_instance_of
16+
from sqlalchemy.testing import eq_, is_instance_of, is_not_none
1717
from google.cloud.spanner_v1 import (
1818
ResultSet,
1919
CreateSessionRequest,
@@ -126,11 +126,12 @@ def test_insert_row(self):
126126
session.commit()
127127
# Verify the requests that we got.
128128
requests = self.spanner_service.requests
129-
eq_(4, len(requests))
129+
# Dialect now inlines BeginTransaction into the first statement.
130+
eq_(3, len(requests))
130131
is_instance_of(requests[0], CreateSessionRequest)
131-
is_instance_of(requests[1], BeginTransactionRequest)
132-
is_instance_of(requests[2], ExecuteSqlRequest)
133-
is_instance_of(requests[3], CommitRequest)
132+
is_instance_of(requests[1], ExecuteSqlRequest)
133+
is_instance_of(requests[2], CommitRequest)
134+
is_not_none(requests[1].transaction.begin) # First request inlines begin
134135

135136
def test_insert_row_with_pk_value(self):
136137
from tests.mockserver_tests.auto_increment_model import Singer

packages/sqlalchemy-spanner/tests/mockserver_tests/test_bit_reversed_sequence.py

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

1515
from sqlalchemy.orm import Session
16-
from sqlalchemy.testing import eq_, is_instance_of
16+
from sqlalchemy.testing import eq_, is_instance_of, is_not_none
1717
from google.cloud.spanner_v1 import (
1818
ResultSet,
1919
CreateSessionRequest,
@@ -119,8 +119,9 @@ def test_insert_row(self):
119119
session.commit()
120120
# Verify the requests that we got.
121121
requests = self.spanner_service.requests
122-
eq_(4, len(requests))
122+
# Dialect now inlines BeginTransaction into the first statement.
123+
eq_(3, len(requests))
123124
is_instance_of(requests[0], CreateSessionRequest)
124-
is_instance_of(requests[1], BeginTransactionRequest)
125-
is_instance_of(requests[2], ExecuteSqlRequest)
126-
is_instance_of(requests[3], CommitRequest)
125+
is_instance_of(requests[1], ExecuteSqlRequest)
126+
is_instance_of(requests[2], CommitRequest)
127+
is_not_none(requests[1].transaction.begin) # First request inlines begin

packages/sqlalchemy-spanner/tests/mockserver_tests/test_float32.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
eq_,
1818
is_instance_of,
1919
is_false,
20+
is_not_none,
2021
)
2122
from google.cloud.spanner_v1 import (
2223
CreateSessionRequest,
@@ -58,12 +59,13 @@ def test_insert_data(self):
5859
session.commit()
5960

6061
requests = self.spanner_service.requests
61-
eq_(4, len(requests))
62+
# Dialect now inlines BeginTransaction into the first statement.
63+
eq_(3, len(requests))
6264
is_instance_of(requests[0], CreateSessionRequest)
63-
is_instance_of(requests[1], BeginTransactionRequest)
64-
is_instance_of(requests[2], ExecuteSqlRequest)
65-
is_instance_of(requests[3], CommitRequest)
66-
request: ExecuteSqlRequest = requests[2]
65+
is_instance_of(requests[1], ExecuteSqlRequest)
66+
is_instance_of(requests[2], CommitRequest)
67+
is_not_none(requests[1].transaction.begin) # First request inlines begin
68+
request: ExecuteSqlRequest = requests[1]
6769
eq_(3, len(request.params))
6870
eq_("1", request.params["a0"])
6971
eq_("One", request.params["a1"])

packages/sqlalchemy-spanner/tests/mockserver_tests/test_insertmany.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
import sqlalchemy
1919
from sqlalchemy.orm import Session
20-
from sqlalchemy.testing import eq_, is_instance_of
20+
from sqlalchemy.testing import eq_, is_instance_of, is_not_none
2121
from google.cloud.spanner_v1 import (
2222
ExecuteSqlRequest,
2323
CommitRequest,
@@ -53,11 +53,12 @@ def test_insertmany_with_uuid_sentinels(self):
5353

5454
# Verify the requests that we got.
5555
requests = self.spanner_service.requests
56-
eq_(4, len(requests))
56+
# Dialect now inlines BeginTransaction into the first statement.
57+
eq_(3, len(requests))
5758
is_instance_of(requests[0], CreateSessionRequest)
58-
is_instance_of(requests[1], BeginTransactionRequest)
59-
is_instance_of(requests[2], ExecuteSqlRequest)
60-
is_instance_of(requests[3], CommitRequest)
59+
is_instance_of(requests[1], ExecuteSqlRequest)
60+
is_instance_of(requests[2], CommitRequest)
61+
is_not_none(requests[1].transaction.begin) # First request inlines begin
6162

6263
def test_no_insertmany_with_bit_reversed_id(self):
6364
"""Ensures we don't try to bulk insert rows with bit-reversed PKs.
@@ -93,12 +94,13 @@ def test_no_insertmany_with_bit_reversed_id(self):
9394

9495
# Verify the requests that we got.
9596
requests = self.spanner_service.requests
96-
eq_(5, len(requests))
97+
# Dialect now inlines BeginTransaction into the first statement.
98+
eq_(4, len(requests))
9799
is_instance_of(requests[0], CreateSessionRequest)
98-
is_instance_of(requests[1], BeginTransactionRequest)
100+
is_instance_of(requests[1], ExecuteSqlRequest)
99101
is_instance_of(requests[2], ExecuteSqlRequest)
100-
is_instance_of(requests[3], ExecuteSqlRequest)
101-
is_instance_of(requests[4], RollbackRequest)
102+
is_instance_of(requests[3], RollbackRequest)
103+
is_not_none(requests[1].transaction.begin) # First request inlines begin
102104

103105
def add_uuid_insert_result(self, sql):
104106
result = result_set.ResultSet(

packages/sqlalchemy-spanner/tests/mockserver_tests/test_isolation_level.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -150,20 +150,20 @@ def test_invalid_isolation_level(self):
150150
def verify_isolation_level(self, level):
151151
# Verify the requests that we got.
152152
requests = self.spanner_service.requests
153-
eq_(4, len(requests))
153+
# Dialect now inlines BeginTransaction into the first statement.
154+
eq_(3, len(requests))
154155
is_instance_of(requests[0], CreateSessionRequest)
155-
is_instance_of(requests[1], BeginTransactionRequest)
156-
is_instance_of(requests[2], ExecuteSqlRequest)
157-
is_instance_of(requests[3], CommitRequest)
158-
begin_request: BeginTransactionRequest = requests[1]
156+
is_instance_of(requests[1], ExecuteSqlRequest)
157+
is_instance_of(requests[2], CommitRequest)
158+
execute_request: ExecuteSqlRequest = requests[1]
159159
eq_(
160160
TransactionOptions(
161161
dict(
162162
isolation_level=level,
163163
read_write=TransactionOptions.ReadWrite(),
164164
)
165165
),
166-
begin_request.options,
166+
execute_request.transaction.begin,
167167
)
168168

169169
def add_insert_result(self, sql):

packages/sqlalchemy-spanner/tests/mockserver_tests/test_json.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
from sqlalchemy import func, select, text
1616
from sqlalchemy.orm import Session
17-
from sqlalchemy.testing import eq_, is_instance_of
17+
from sqlalchemy.testing import eq_, is_instance_of, is_not_none
1818
from google.cloud.spanner_v1 import (
1919
ResultSet,
2020
CreateSessionRequest,
@@ -105,12 +105,13 @@ def _test_insert_json(
105105

106106
# Verify the requests that we got.
107107
requests = self.spanner_service.requests
108-
eq_(4, len(requests))
108+
# Dialect now inlines BeginTransaction into the first statement.
109+
eq_(3, len(requests))
109110
is_instance_of(requests[0], CreateSessionRequest)
110-
is_instance_of(requests[1], BeginTransactionRequest)
111-
is_instance_of(requests[2], ExecuteSqlRequest)
112-
is_instance_of(requests[3], CommitRequest)
113-
request: ExecuteSqlRequest = requests[2]
111+
is_instance_of(requests[1], ExecuteSqlRequest)
112+
is_instance_of(requests[2], CommitRequest)
113+
is_not_none(requests[1].transaction.begin) # First request inlines begin
114+
request: ExecuteSqlRequest = requests[1]
114115
eq_(3, len(request.params))
115116
eq_("1", request.params["a0"])
116117
eq_("Test", request.params["a1"])

packages/sqlalchemy-spanner/tests/mockserver_tests/test_pickle_type.py

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

1515
from sqlalchemy.orm import Session
16-
from sqlalchemy.testing import eq_, is_instance_of
16+
from sqlalchemy.testing import eq_, is_instance_of, is_not_none
1717
from google.cloud.spanner_v1 import (
1818
ResultSet,
1919
CreateSessionRequest,
@@ -85,12 +85,13 @@ def test_insert_and_query(self):
8585

8686
# Verify the requests that we got.
8787
requests = self.spanner_service.requests
88-
eq_(4, len(requests))
88+
# Dialect now inlines BeginTransaction into the first statement.
89+
eq_(3, len(requests))
8990
is_instance_of(requests[0], CreateSessionRequest)
90-
is_instance_of(requests[1], BeginTransactionRequest)
91-
is_instance_of(requests[2], ExecuteSqlRequest)
92-
is_instance_of(requests[3], CommitRequest)
93-
request: ExecuteSqlRequest = requests[2]
91+
is_instance_of(requests[1], ExecuteSqlRequest)
92+
is_instance_of(requests[2], CommitRequest)
93+
is_not_none(requests[1].transaction.begin) # First request inlines begin
94+
request: ExecuteSqlRequest = requests[1]
9495
eq_(4, len(request.params))
9596
eq_("1", request.params["a0"])
9697
eq_("test_user", request.params["a1"])

packages/sqlalchemy-spanner/tests/mockserver_tests/test_quickstart.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -115,12 +115,12 @@ def test_insert_data(self):
115115
session.commit()
116116

117117
requests = self.spanner_service.requests
118-
eq_(5, len(requests))
118+
# Dialect now inlines BeginTransaction into the first statement.
119+
eq_(4, len(requests))
119120
is_instance_of(requests[0], CreateSessionRequest)
120-
is_instance_of(requests[1], BeginTransactionRequest)
121+
is_instance_of(requests[1], ExecuteBatchDmlRequest)
121122
is_instance_of(requests[2], ExecuteBatchDmlRequest)
122-
is_instance_of(requests[3], ExecuteBatchDmlRequest)
123-
is_instance_of(requests[4], CommitRequest)
124-
is_not_none(requests[2].transaction.id)
125-
eq_(requests[2].transaction.id, requests[3].transaction.id)
126-
eq_(requests[2].transaction.id, requests[4].transaction_id)
123+
is_instance_of(requests[3], CommitRequest)
124+
is_not_none(requests[1].transaction.begin) # First request inlines begin
125+
is_not_none(requests[2].transaction.id) # Subsequent requests use ID
126+
eq_(requests[2].transaction.id, requests[3].transaction_id)

packages/sqlalchemy-spanner/tests/mockserver_tests/test_tags.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -83,18 +83,18 @@ def test_transaction_tag(self):
8383

8484
# Verify the requests that we got.
8585
requests = self.spanner_service.requests
86-
eq_(6, len(requests))
86+
# Dialect now inlines BeginTransaction into the first statement.
87+
eq_(5, len(requests))
8788
is_instance_of(requests[0], CreateSessionRequest)
88-
is_instance_of(requests[1], BeginTransactionRequest)
89+
is_instance_of(requests[1], ExecuteSqlRequest)
8990
is_instance_of(requests[2], ExecuteSqlRequest)
9091
is_instance_of(requests[3], ExecuteSqlRequest)
91-
is_instance_of(requests[4], ExecuteSqlRequest)
92-
is_instance_of(requests[5], CommitRequest)
93-
for request in requests[2:]:
92+
is_instance_of(requests[4], CommitRequest)
93+
for request in requests[1:]:
9494
eq_("my-transaction-tag", request.request_options.transaction_tag)
95-
eq_("my-tag-1", requests[2].request_options.request_tag)
96-
eq_("my-tag-2", requests[3].request_options.request_tag)
97-
eq_("insert-singer", requests[4].request_options.request_tag)
95+
eq_("my-tag-1", requests[1].request_options.request_tag)
96+
eq_("my-tag-2", requests[2].request_options.request_tag)
97+
eq_("insert-singer", requests[3].request_options.request_tag)
9898

9999

100100
def empty_singer_result_set():

0 commit comments

Comments
 (0)