Skip to content

Commit 9c456d4

Browse files
authored
Merge pull request #200 add sync tx tests
2 parents 5adb6d1 + a70533a commit 9c456d4

File tree

1 file changed

+91
-0
lines changed

1 file changed

+91
-0
lines changed

tests/table/test_tx.py

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
import pytest
2+
from contextlib import suppress
3+
4+
import ydb.iam
5+
6+
7+
def test_tx_commit(driver_sync, database):
8+
session = driver_sync.table_client.session().create()
9+
prepared = session.prepare(
10+
"DECLARE $param as Int32;\n SELECT $param as value",
11+
)
12+
13+
tx = session.transaction()
14+
tx.execute(prepared, {"$param": 2})
15+
tx.commit()
16+
tx.commit()
17+
18+
19+
def test_tx_rollback(driver_sync, database):
20+
session = driver_sync.table_client.session().create()
21+
prepared = session.prepare(
22+
"DECLARE $param as Int32;\n SELECT $param as value",
23+
)
24+
25+
tx = session.transaction()
26+
tx.execute(prepared, {"$param": 2})
27+
tx.rollback()
28+
tx.rollback()
29+
30+
31+
def test_tx_begin(driver_sync, database):
32+
session = driver_sync.table_client.session().create()
33+
session.create()
34+
35+
tx = session.transaction()
36+
tx.begin()
37+
tx.begin()
38+
tx.rollback()
39+
40+
41+
def test_credentials():
42+
credentials = ydb.iam.MetadataUrlCredentials()
43+
raised = False
44+
try:
45+
credentials.auth_metadata()
46+
except Exception:
47+
raised = True
48+
49+
assert raised
50+
51+
52+
def test_tx_snapshot_ro(driver_sync, database):
53+
session = driver_sync.table_client.session().create()
54+
description = (
55+
ydb.TableDescription()
56+
.with_primary_keys("key")
57+
.with_columns(
58+
ydb.Column("key", ydb.OptionalType(ydb.PrimitiveType.Uint64)),
59+
ydb.Column("value", ydb.OptionalType(ydb.PrimitiveType.Uint64)),
60+
)
61+
)
62+
tb_name = f"{database}/test"
63+
with suppress(ydb.issues.SchemeError):
64+
session.drop_table(tb_name)
65+
session.create_table(tb_name, description)
66+
session.transaction(ydb.SerializableReadWrite()).execute(
67+
"""INSERT INTO `test` (`key`, `value`) VALUES (1, 1), (2, 2)""",
68+
commit_tx=True,
69+
)
70+
71+
ro_tx = session.transaction(tx_mode=ydb.SnapshotReadOnly())
72+
data1 = ro_tx.execute("SELECT value FROM `test` WHERE key = 1")
73+
74+
session.transaction(ydb.SerializableReadWrite()).execute(
75+
"UPDATE `test` SET value = value + 1", commit_tx=True
76+
)
77+
78+
data2 = ro_tx.execute("SELECT value FROM `test` WHERE key = 1")
79+
assert data1[0].rows == data2[0].rows == [{"value": 1}]
80+
81+
ro_tx.commit()
82+
83+
with pytest.raises(ydb.issues.GenericError) as exc_info:
84+
ro_tx.execute("UPDATE `test` SET value = value + 1")
85+
assert "read only transaction" in exc_info.value.message
86+
87+
data = session.transaction(tx_mode=ydb.SnapshotReadOnly()).execute(
88+
"SELECT value FROM `test` WHERE key = 1",
89+
commit_tx=True,
90+
)
91+
assert data[0].rows == [{"value": 2}]

0 commit comments

Comments
 (0)