@@ -2954,12 +2954,15 @@ async def test_save_load_text_artifact(
29542954@pytest .mark .parametrize (
29552955 "service_type" ,
29562956 [
2957+ ArtifactServiceType .IN_MEMORY ,
29572958 ArtifactServiceType .GCS ,
29582959 ArtifactServiceType .FILE ,
29592960 ],
29602961)
2962+ @pytest .mark .parametrize ("filename" , ["empty.txt" , "user:empty.txt" ])
2963+ @pytest .mark .parametrize ("version" , [None , 0 ])
29612964async def test_save_load_empty_text_artifact (
2962- service_type , artifact_service_factory
2965+ service_type , artifact_service_factory , filename , version
29632966):
29642967 """Tests that empty text artifacts survive round-trip save/load."""
29652968 artifact_service = artifact_service_factory (service_type )
@@ -2969,20 +2972,57 @@ async def test_save_load_empty_text_artifact(
29692972 app_name = "app0" ,
29702973 user_id = "user0" ,
29712974 session_id = "123" ,
2972- filename = "empty.txt" ,
2975+ filename = filename ,
29732976 artifact = artifact ,
29742977 )
29752978 loaded = await artifact_service .load_artifact (
29762979 app_name = "app0" ,
29772980 user_id = "user0" ,
29782981 session_id = "123" ,
2979- filename = "empty.txt" ,
2982+ filename = filename ,
2983+ version = version ,
29802984 )
29812985 assert loaded is not None
29822986 assert loaded .text == ""
29832987 assert loaded .inline_data is None
29842988
29852989
2990+ @pytest .mark .parametrize (
2991+ "service_type" ,
2992+ [
2993+ ArtifactServiceType .IN_MEMORY ,
2994+ ArtifactServiceType .GCS ,
2995+ ArtifactServiceType .FILE ,
2996+ ],
2997+ )
2998+ @pytest .mark .parametrize ("filename" , ["empty.bin" , "user:empty.bin" ])
2999+ @pytest .mark .parametrize ("version" , [None , 0 ])
3000+ async def test_save_load_empty_bytes_artifact (
3001+ service_type , artifact_service_factory , filename , version
3002+ ):
3003+ """Tests that empty bytes artifacts survive round-trip save/load."""
3004+ artifact_service = artifact_service_factory (service_type )
3005+ artifact = types .Part .from_bytes (data = b"" , mime_type = "application/pdf" )
3006+
3007+ await artifact_service .save_artifact (
3008+ app_name = "app0" ,
3009+ user_id = "user0" ,
3010+ session_id = "123" ,
3011+ filename = filename ,
3012+ artifact = artifact ,
3013+ )
3014+ loaded = await artifact_service .load_artifact (
3015+ app_name = "app0" ,
3016+ user_id = "user0" ,
3017+ session_id = "123" ,
3018+ filename = filename ,
3019+ version = version ,
3020+ )
3021+ assert loaded is not None
3022+ assert loaded .inline_data is not None
3023+ assert loaded .inline_data .data == b""
3024+
3025+
29863026def _write_tampered_metadata (
29873027 root : Path ,
29883028 * ,
0 commit comments