@@ -399,6 +399,7 @@ async def test_session_memory_rejects_both_session_and_list_input(runner_method)
399
399
400
400
session .close ()
401
401
402
+
402
403
@pytest .mark .asyncio
403
404
async def test_sqlite_session_unicode_content ():
404
405
"""Test that session correctly stores and retrieves unicode/non-ASCII content."""
@@ -437,9 +438,7 @@ async def test_sqlite_session_special_characters_and_sql_injection():
437
438
items : list [TResponseInputItem ] = [
438
439
{"role" : "user" , "content" : "O'Reilly" },
439
440
{"role" : "assistant" , "content" : "DROP TABLE sessions;" },
440
- {"role" : "user" , "content" : (
441
- '"SELECT * FROM users WHERE name = \" admin\" ;"'
442
- )},
441
+ {"role" : "user" , "content" : ('"SELECT * FROM users WHERE name = "admin";"' )},
443
442
{"role" : "assistant" , "content" : "Robert'); DROP TABLE students;--" },
444
443
{"role" : "user" , "content" : "Normal message" },
445
444
]
@@ -450,17 +449,19 @@ async def test_sqlite_session_special_characters_and_sql_injection():
450
449
assert len (retrieved ) == len (items )
451
450
assert retrieved [0 ].get ("content" ) == "O'Reilly"
452
451
assert retrieved [1 ].get ("content" ) == "DROP TABLE sessions;"
453
- assert retrieved [2 ].get ("content" ) == '"SELECT * FROM users WHERE name = \ " admin\ " ;"'
452
+ assert retrieved [2 ].get ("content" ) == '"SELECT * FROM users WHERE name = "admin";"'
454
453
assert retrieved [3 ].get ("content" ) == "Robert'); DROP TABLE students;--"
455
454
assert retrieved [4 ].get ("content" ) == "Normal message"
456
455
session .close ()
457
456
457
+
458
458
@pytest .mark .asyncio
459
459
async def test_sqlite_session_concurrent_access ():
460
460
"""
461
461
Test concurrent access to the same session to verify data integrity.
462
462
"""
463
463
import concurrent .futures
464
+
464
465
with tempfile .TemporaryDirectory () as temp_dir :
465
466
db_path = Path (temp_dir ) / "test_concurrent.db"
466
467
session_id = "concurrent_test"
@@ -477,6 +478,7 @@ def add_item(item):
477
478
asyncio .set_event_loop (loop )
478
479
loop .run_until_complete (session .add_items ([item ]))
479
480
loop .close ()
481
+
480
482
with concurrent .futures .ThreadPoolExecutor (max_workers = 5 ) as executor :
481
483
executor .map (add_item , items )
482
484
0 commit comments