@@ -241,3 +241,88 @@ func TestPodHasDifferentScheduler(t *testing.T) {
241241 t .Errorf ("Expected allowed response for pod with different scheduler, but got: %v" , resp )
242242 }
243243}
244+
245+ func TestPodHasInitContainer (t * testing.T ) {
246+ config .SchedulerName = "hami-scheduler"
247+ config .ForceOverwriteDefaultScheduler = true
248+ config := & device.Config {
249+ NvidiaConfig : nvidia.NvidiaConfig {
250+ ResourceCountName : "hami.io/gpu" ,
251+ ResourceMemoryName : "hami.io/gpumem" ,
252+ ResourceMemoryPercentageName : "hami.io/gpumem-percentage" ,
253+ ResourceCoreName : "hami.io/gpucores" ,
254+ DefaultMemory : 0 ,
255+ DefaultCores : 0 ,
256+ DefaultGPUNum : 1 ,
257+ },
258+ }
259+
260+ if err := device .InitDevicesWithConfig (config ); err != nil {
261+ klog .Fatalf ("Failed to initialize devices with config: %v" , err )
262+ }
263+
264+ pod := & corev1.Pod {
265+ ObjectMeta : metav1.ObjectMeta {
266+ Name : "test-pod" ,
267+ Namespace : "default" ,
268+ },
269+ Spec : corev1.PodSpec {
270+ Containers : []corev1.Container {
271+ {
272+ Name : "container1" ,
273+ SecurityContext : & corev1.SecurityContext {
274+ Privileged : nil ,
275+ },
276+ Resources : corev1.ResourceRequirements {
277+ Limits : corev1.ResourceList {
278+ "hami.io/gpu" : resource .MustParse ("1" ),
279+ },
280+ },
281+ },
282+ },
283+ InitContainers : []corev1.Container {
284+ {
285+ Name : "container2" ,
286+ SecurityContext : & corev1.SecurityContext {
287+ Privileged : nil ,
288+ },
289+ Resources : corev1.ResourceRequirements {
290+ Limits : corev1.ResourceList {
291+ "hami.io/gpu" : resource .MustParse ("1" ),
292+ },
293+ },
294+ },
295+ },
296+ },
297+ }
298+
299+ scheme := runtime .NewScheme ()
300+ corev1 .AddToScheme (scheme )
301+ codec := serializer .NewCodecFactory (scheme ).LegacyCodec (corev1 .SchemeGroupVersion )
302+ podBytes , err := runtime .Encode (codec , pod )
303+ if err != nil {
304+ t .Fatalf ("Error encoding pod: %v" , err )
305+ }
306+
307+ req := admission.Request {
308+ AdmissionRequest : admissionv1.AdmissionRequest {
309+ UID : "test-uid" ,
310+ Namespace : "default" ,
311+ Name : "test-pod" ,
312+ Object : runtime.RawExtension {
313+ Raw : podBytes ,
314+ },
315+ },
316+ }
317+ wh , err := NewWebHook ()
318+ if err != nil {
319+ t .Fatalf ("Error creating WebHook: %v" , err )
320+ }
321+
322+ resp := wh .Handle (context .Background (), req )
323+
324+ if ! resp .Allowed {
325+ t .Errorf ("Expected allowed response, but got: %v" , resp )
326+ }
327+
328+ }
0 commit comments