Skip to content

Commit ee7447a

Browse files
KubeKyriewawa0210
authored andcommitted
add ut for device-map
Signed-off-by: KubeKyrie <shaolong.qin@daocloud.io>
1 parent c6b969b commit ee7447a

File tree

1 file changed

+114
-0
lines changed

1 file changed

+114
-0
lines changed

pkg/device-plugin/nvidiadevice/nvinternal/rm/device_map_test.go

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ import (
3636
"fmt"
3737
"testing"
3838

39+
"github.com/Project-HAMi/HAMi/pkg/device/nvidia"
40+
3941
spec "github.com/NVIDIA/k8s-device-plugin/api/config/v1"
4042
"github.com/stretchr/testify/require"
4143
kubeletdevicepluginv1beta1 "k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1"
@@ -124,6 +126,118 @@ func TestDeviceMapInsert(t *testing.T) {
124126
}
125127
}
126128

129+
func TestUpdateDeviceMapWithReplicas(t *testing.T) {
130+
device0 := Device{Device: kubeletdevicepluginv1beta1.Device{ID: "0"}, Index: "0"}
131+
device1 := Device{Device: kubeletdevicepluginv1beta1.Device{ID: "1"}}
132+
device2 := Device{Device: kubeletdevicepluginv1beta1.Device{ID: "2"}}
133+
device3 := Device{Device: kubeletdevicepluginv1beta1.Device{ID: "3"}}
134+
135+
testCases := []struct {
136+
description string
137+
config *nvidia.DeviceConfig
138+
devices DeviceMap
139+
expectedDeviceMap DeviceMap
140+
}{
141+
{
142+
description: "Update device map with replicas",
143+
config: &nvidia.DeviceConfig{
144+
Config: &spec.Config{
145+
Sharing: spec.Sharing{
146+
TimeSlicing: spec.ReplicatedResources{
147+
Resources: []spec.ReplicatedResource{
148+
{
149+
Name: "resource1",
150+
Replicas: 2,
151+
Rename: "replicated-resource1",
152+
Devices: spec.ReplicatedDevices{
153+
All: true,
154+
},
155+
},
156+
{
157+
Name: "resource2",
158+
Replicas: 1,
159+
Devices: spec.ReplicatedDevices{
160+
All: true,
161+
},
162+
},
163+
},
164+
},
165+
},
166+
},
167+
},
168+
devices: DeviceMap{
169+
"resource1": Devices{
170+
"0": &device0,
171+
"1": &device1,
172+
},
173+
"resource2": Devices{
174+
"2": &device2,
175+
},
176+
"resource3": Devices{
177+
"3": &device3,
178+
},
179+
},
180+
expectedDeviceMap: DeviceMap{
181+
"replicated-resource1": Devices{
182+
"0::0": &Device{Device: kubeletdevicepluginv1beta1.Device{ID: "0::0"}, Index: "0"},
183+
"0::1": &Device{Device: kubeletdevicepluginv1beta1.Device{ID: "0::1"}, Index: "0"},
184+
"1::0": &Device{Device: kubeletdevicepluginv1beta1.Device{ID: "1::0"}},
185+
"1::1": &Device{Device: kubeletdevicepluginv1beta1.Device{ID: "1::1"}},
186+
},
187+
"resource2": Devices{
188+
"2::0": &Device{Device: kubeletdevicepluginv1beta1.Device{ID: "2::0"}},
189+
},
190+
"resource3": Devices{
191+
"3": &device3,
192+
},
193+
},
194+
},
195+
{
196+
description: "Some devices are not replicated",
197+
config: &nvidia.DeviceConfig{
198+
Config: &spec.Config{
199+
Sharing: spec.Sharing{
200+
TimeSlicing: spec.ReplicatedResources{
201+
Resources: []spec.ReplicatedResource{
202+
{
203+
Name: "resource1",
204+
Replicas: 2,
205+
Rename: "replicated-resource1",
206+
Devices: spec.ReplicatedDevices{
207+
List: []spec.ReplicatedDeviceRef{"0"}, // only replicate index 0
208+
},
209+
},
210+
},
211+
},
212+
},
213+
},
214+
},
215+
devices: DeviceMap{
216+
"resource1": Devices{
217+
"0": &device0,
218+
"1": &device1,
219+
},
220+
},
221+
expectedDeviceMap: DeviceMap{
222+
"replicated-resource1": Devices{
223+
"0::0": &Device{Device: kubeletdevicepluginv1beta1.Device{ID: "0::0"}, Index: "0"},
224+
"0::1": &Device{Device: kubeletdevicepluginv1beta1.Device{ID: "0::1"}, Index: "0"},
225+
},
226+
"resource1": Devices{
227+
"1": &device1,
228+
},
229+
},
230+
},
231+
}
232+
233+
for _, tc := range testCases {
234+
t.Run(tc.description, func(t *testing.T) {
235+
devices, _ := updateDeviceMapWithReplicas(tc.config, tc.devices)
236+
require.EqualValues(t, tc.expectedDeviceMap, devices)
237+
})
238+
}
239+
}
240+
127241
func TestDeviceMapMerge(t *testing.T) {
128242
device0 := Device{Device: kubeletdevicepluginv1beta1.Device{ID: "0"}}
129243
device1 := Device{Device: kubeletdevicepluginv1beta1.Device{ID: "1"}}

0 commit comments

Comments
 (0)