@@ -300,6 +300,115 @@ func TestTransformForHostRoot(t *testing.T) {
300300 }
301301}
302302
303+ func TestTransformForKubeletRootDir (t * testing.T ) {
304+ podGPUResourcesVolumeName := "pod-gpu-resources"
305+ devicePluginVolumeName := "device-plugin"
306+ testCases := []struct {
307+ description string
308+ kubeletRootDir string
309+ input Daemonset
310+ expectedOutput Daemonset
311+ }{
312+ {
313+ description : "no pod-gpu-resources volume in daemonset" ,
314+ kubeletRootDir : "/custom-kubelet" ,
315+ input : NewDaemonset (),
316+ expectedOutput : NewDaemonset (),
317+ },
318+ {
319+ description : "empty kubeletRootDir is a no-op" ,
320+ kubeletRootDir : "" ,
321+ input : NewDaemonset ().
322+ WithHostPathVolume (podGPUResourcesVolumeName , "/var/lib/kubelet/pod-resources" , nil ),
323+ expectedOutput : NewDaemonset ().
324+ WithHostPathVolume (podGPUResourcesVolumeName , "/var/lib/kubelet/pod-resources" , nil ),
325+ },
326+ {
327+ description : "default kubeletRootDir is a no-op" ,
328+ kubeletRootDir : DefaultKubeletRootDir ,
329+ input : NewDaemonset ().
330+ WithHostPathVolume (podGPUResourcesVolumeName , "/var/lib/kubelet/pod-resources" , nil ),
331+ expectedOutput : NewDaemonset ().
332+ WithHostPathVolume (podGPUResourcesVolumeName , "/var/lib/kubelet/pod-resources" , nil ),
333+ },
334+ {
335+ description : "custom kubeletRootDir with pod-gpu-resources volume only" ,
336+ kubeletRootDir : "/custom-kubelet" ,
337+ input : NewDaemonset ().
338+ WithHostPathVolume (podGPUResourcesVolumeName , "/var/lib/kubelet/pod-resources" , nil ),
339+ expectedOutput : NewDaemonset ().
340+ WithHostPathVolume (podGPUResourcesVolumeName , "/custom-kubelet/pod-resources" , nil ),
341+ },
342+ {
343+ description : "custom kubeletRootDir with pod-gpu-resources volume and container mount" ,
344+ kubeletRootDir : "/custom-kubelet" ,
345+ input : NewDaemonset ().
346+ WithHostPathVolume (podGPUResourcesVolumeName , "/var/lib/kubelet/pod-resources" , nil ).
347+ WithContainer (corev1.Container {
348+ Name : "test-container" ,
349+ VolumeMounts : []corev1.VolumeMount {
350+ {Name : podGPUResourcesVolumeName , MountPath : "/var/lib/kubelet/pod-resources" },
351+ },
352+ }),
353+ expectedOutput : NewDaemonset ().
354+ WithHostPathVolume (podGPUResourcesVolumeName , "/custom-kubelet/pod-resources" , nil ).
355+ WithContainer (corev1.Container {
356+ Name : "test-container" ,
357+ VolumeMounts : []corev1.VolumeMount {
358+ {Name : podGPUResourcesVolumeName , MountPath : "/var/lib/kubelet/pod-resources" },
359+ },
360+ }),
361+ },
362+ {
363+ description : "custom kubeletRootDir with pod-gpu-resources volume and init container mount" ,
364+ kubeletRootDir : "/custom-kubelet" ,
365+ input : NewDaemonset ().
366+ WithHostPathVolume (podGPUResourcesVolumeName , "/var/lib/kubelet/pod-resources" , nil ).
367+ WithInitContainer (corev1.Container {
368+ Name : "test-init-container" ,
369+ VolumeMounts : []corev1.VolumeMount {
370+ {Name : podGPUResourcesVolumeName , MountPath : "/var/lib/kubelet/pod-resources" },
371+ },
372+ }),
373+ expectedOutput : NewDaemonset ().
374+ WithHostPathVolume (podGPUResourcesVolumeName , "/custom-kubelet/pod-resources" , nil ).
375+ WithInitContainer (corev1.Container {
376+ Name : "test-init-container" ,
377+ VolumeMounts : []corev1.VolumeMount {
378+ {Name : podGPUResourcesVolumeName , MountPath : "/var/lib/kubelet/pod-resources" },
379+ },
380+ }),
381+ },
382+ {
383+ description : "custom kubeletRootDir with device-plugin volume and container mount" ,
384+ kubeletRootDir : "/custom-kubelet" ,
385+ input : NewDaemonset ().
386+ WithHostPathVolume (devicePluginVolumeName , "/var/lib/kubelet/device-plugins" , nil ).
387+ WithContainer (corev1.Container {
388+ Name : "test-container" ,
389+ VolumeMounts : []corev1.VolumeMount {
390+ {Name : devicePluginVolumeName , MountPath : "/var/lib/kubelet/device-plugins" },
391+ },
392+ }),
393+ expectedOutput : NewDaemonset ().
394+ WithHostPathVolume (devicePluginVolumeName , "/custom-kubelet/device-plugins" , nil ).
395+ WithContainer (corev1.Container {
396+ Name : "test-container" ,
397+ VolumeMounts : []corev1.VolumeMount {
398+ {Name : devicePluginVolumeName , MountPath : "/var/lib/kubelet/device-plugins" },
399+ },
400+ }),
401+ },
402+ }
403+
404+ for _ , tc := range testCases {
405+ t .Run (tc .description , func (t * testing.T ) {
406+ transformForKubeletRootDir (tc .input .DaemonSet , tc .kubeletRootDir )
407+ require .EqualValues (t , tc .expectedOutput , tc .input )
408+ })
409+ }
410+ }
411+
303412func TestTransformForDriverInstallDir (t * testing.T ) {
304413 driverInstallDirVolumeName := "driver-install-dir"
305414 testCases := []struct {
0 commit comments