@@ -567,6 +567,70 @@ def test_online_download_failure_raises_value_error(
567567 extra_patterns = ["model.onnx" ],
568568 )
569569
570+ @patch ("qwen3_embed.common.model_management.list_repo_tree" )
571+ @patch ("qwen3_embed.common.model_management.model_info" )
572+ @patch ("qwen3_embed.common.model_management.snapshot_download" )
573+ def test_metadata_save_mkdir_oserror_swallowed (
574+ self , mock_snap , mock_info , mock_tree , tmp_path
575+ ):
576+ """OSError while creating metadata directory is logged but does not raise."""
577+ snapshot_dir = tmp_path / "models--org--repo"
578+ # We DO NOT create snapshot_dir so that .exists() is False
579+
580+ repo_files = [make_repo_file ("model.onnx" , size = 500 , oid = "aaa" )]
581+ mock_info .return_value = Mock (sha = "rev123" )
582+ mock_tree .return_value = repo_files
583+ mock_snap .return_value = str (snapshot_dir )
584+
585+ # Patch Path.mkdir to raise OSError
586+ original_mkdir = Path .mkdir
587+
588+ def patched_mkdir (self , * args , ** kwargs ):
589+ if "models--org--repo" in str (self ):
590+ raise OSError ("permission denied" )
591+ return original_mkdir (self , * args , ** kwargs )
592+
593+ with patch .object (Path , "mkdir" , patched_mkdir ):
594+ # Should not raise
595+ result = ModelManagement .download_files_from_huggingface (
596+ hf_source_repo = "org/repo" ,
597+ cache_dir = str (tmp_path ),
598+ extra_patterns = ["model.onnx" ],
599+ )
600+ assert result == str (snapshot_dir )
601+
602+ @patch ("qwen3_embed.common.model_management.list_repo_tree" )
603+ @patch ("qwen3_embed.common.model_management.model_info" )
604+ @patch ("qwen3_embed.common.model_management.snapshot_download" )
605+ def test_metadata_save_mkdir_valueerror_swallowed (
606+ self , mock_snap , mock_info , mock_tree , tmp_path
607+ ):
608+ """ValueError while creating metadata directory is logged but does not raise."""
609+ snapshot_dir = tmp_path / "models--org--repo"
610+ # We DO NOT create snapshot_dir so that .exists() is False
611+
612+ repo_files = [make_repo_file ("model.onnx" , size = 500 , oid = "aaa" )]
613+ mock_info .return_value = Mock (sha = "rev123" )
614+ mock_tree .return_value = repo_files
615+ mock_snap .return_value = str (snapshot_dir )
616+
617+ # Patch Path.mkdir to raise ValueError
618+ original_mkdir = Path .mkdir
619+
620+ def patched_mkdir (self , * args , ** kwargs ):
621+ if "models--org--repo" in str (self ):
622+ raise ValueError ("invalid path" )
623+ return original_mkdir (self , * args , ** kwargs )
624+
625+ with patch .object (Path , "mkdir" , patched_mkdir ):
626+ # Should not raise
627+ result = ModelManagement .download_files_from_huggingface (
628+ hf_source_repo = "org/repo" ,
629+ cache_dir = str (tmp_path ),
630+ extra_patterns = ["model.onnx" ],
631+ )
632+ assert result == str (snapshot_dir )
633+
570634 @patch ("qwen3_embed.common.model_management.list_repo_tree" )
571635 @patch ("qwen3_embed.common.model_management.model_info" )
572636 @patch ("qwen3_embed.common.model_management.snapshot_download" )
0 commit comments