diff --git a/pkg/device/pod_test.go b/pkg/device/pod_test.go index a805024c12..1d0e21962a 100644 --- a/pkg/device/pod_test.go +++ b/pkg/device/pod_test.go @@ -299,6 +299,100 @@ func TestAddPod(t *testing.T) { } } +func TestAddPod_UpdateExistingDevices(t *testing.T) { + podManager := NewPodManager() + + pod := &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "default", + Name: "pod1", + UID: k8stypes.UID("uid1"), + }, + } + + added := podManager.AddPod(pod, "node1", PodDevices{"device1": {{}}}) + assert.True(t, added, "AddPod should report true for a new pod") + + updatedAgain := podManager.AddPod(pod, "node2", PodDevices{"device1": {{{UUID: "GPU-1"}}}}) + assert.False(t, updatedAgain, "AddPod should report false when the pod already exists") + + pi, ok := podManager.GetPod(pod) + assert.True(t, ok) + assert.Equal(t, "node1", pi.NodeID, "NodeID should be unchanged on update") + assert.Equal(t, PodDevices{"device1": {{{UUID: "GPU-1"}}}}, pi.Devices, "Devices should be replaced with the new value") +} + +func TestDelPod(t *testing.T) { + podManager := NewPodManager() + + pod := &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "default", + Name: "pod1", + UID: k8stypes.UID("uid1"), + }, + } + podManager.AddPod(pod, "node1", PodDevices{"device1": {{}}}) + + _, ok := podManager.GetPod(pod) + assert.True(t, ok, "pod should be present before deletion") + + podManager.DelPod(pod) + _, ok = podManager.GetPod(pod) + assert.False(t, ok, "pod should be absent after deletion") + + assert.NotPanics(t, func() { + podManager.DelPod(pod) + }) + + unknownPod := &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "default", + Name: "ghost-pod", + UID: k8stypes.UID("uid-ghost"), + }, + } + assert.NotPanics(t, func() { + podManager.DelPod(unknownPod) + }) +} + +func TestListPodsUID(t *testing.T) { + podManager := NewPodManager() + + uids, err := podManager.ListPodsUID() + assert.NoError(t, err) + assert.Empty(t, uids, "expected no pods when the manager is empty") + + pod1 := &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "default", + Name: "pod1", + UID: k8stypes.UID("uid1"), + }, + } + pod2 := &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "default", + Name: "pod2", + UID: k8stypes.UID("uid2"), + }, + } + podManager.AddPod(pod1, "node1", PodDevices{"device1": {{}}}) + podManager.AddPod(pod2, "node2", PodDevices{"device2": {{}}}) + + uids, err = podManager.ListPodsUID() + assert.NoError(t, err) + assert.Len(t, uids, 2, "expected one entry per tracked pod") + + gotUIDs := make(map[k8stypes.UID]bool, len(uids)) + for _, p := range uids { + gotUIDs[p.UID] = true + } + assert.True(t, gotUIDs[pod1.UID], "expected pod1's UID to be present") + assert.True(t, gotUIDs[pod2.UID], "expected pod2's UID to be present") +} + func TestUpdatePod(t *testing.T) { podManager := NewPodManager()