@@ -1217,3 +1217,51 @@ def test_add_virtio_drivers_missing_iso_url(
12171217
12181218 self .morphing_tools ._conn .download_file .assert_not_called ()
12191219 mock_mount_disk_image .assert_not_called ()
1220+
1221+ @mock .patch .object (windows .BaseWindowsMorphingTools , "_get_sid" )
1222+ @mock .patch .object (windows .BaseWindowsMorphingTools , "_grant_permissions" )
1223+ @mock .patch .object (windows .BaseWindowsMorphingTools , "_add_dism_driver" )
1224+ @mock .patch .object (windows .BaseWindowsMorphingTools , "_revoke_permissions" )
1225+ def test_install_dism_drivers (
1226+ self , mock_revoke_permissions , mock_add_dism_driver ,
1227+ mock_grant_permissions , mock_get_sid ):
1228+ null_sid = "S-1-0-0"
1229+ mock_get_sid .return_value = null_sid
1230+
1231+ existing_driver_path = "e:\\ NetKVM\\ w11\\ amd64"
1232+ missing_driver_path = "e:\\ Missing\\ w11\\ amd64"
1233+ driver_paths = [existing_driver_path , missing_driver_path ]
1234+ self .conn .test_path .side_effect = lambda path : (
1235+ path == existing_driver_path )
1236+
1237+ self .morphing_tools ._install_dism_drivers (driver_paths )
1238+
1239+ exp_repo_path = "C:\\ Windows\\ System32\\ DriverStore\\ FileRepository"
1240+ mock_grant_permissions .assert_called_once_with (
1241+ exp_repo_path , f"*{ null_sid } " )
1242+ mock_revoke_permissions .assert_called_once_with (
1243+ exp_repo_path , f"*{ null_sid } " )
1244+ # Only the existing driver path should be installed:
1245+ mock_add_dism_driver .assert_called_once_with (existing_driver_path )
1246+
1247+ @mock .patch .object (windows .BaseWindowsMorphingTools , "_get_sid" )
1248+ @mock .patch .object (windows .BaseWindowsMorphingTools , "_grant_permissions" )
1249+ @mock .patch .object (windows .BaseWindowsMorphingTools , "_add_dism_driver" )
1250+ @mock .patch .object (windows .BaseWindowsMorphingTools , "_revoke_permissions" )
1251+ def test_install_dism_drivers_revokes_on_failure (
1252+ self , mock_revoke_permissions , mock_add_dism_driver ,
1253+ mock_grant_permissions , mock_get_sid ):
1254+ null_sid = "S-1-0-0"
1255+ mock_get_sid .return_value = null_sid
1256+ mock_add_dism_driver .side_effect = IOError
1257+
1258+ self .assertRaises (
1259+ IOError ,
1260+ self .morphing_tools ._install_dism_drivers , ["e:\\ NetKVM" ])
1261+
1262+ exp_repo_path = "C:\\ Windows\\ System32\\ DriverStore\\ FileRepository"
1263+ mock_grant_permissions .assert_called_once_with (
1264+ exp_repo_path , f"*{ null_sid } " )
1265+ # Permissions must be revoked even if driver installation fails:
1266+ mock_revoke_permissions .assert_called_once_with (
1267+ exp_repo_path , f"*{ null_sid } " )
0 commit comments