Ctrl K
ComunidadGuías…

api/handler/vm_capability_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package handler

import (
	"testing"

	"github.com/stretchr/testify/assert"
	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
	"k8s.io/apimachinery/pkg/runtime"
	"k8s.io/apimachinery/pkg/runtime/schema"
	dynamicfake "k8s.io/client-go/dynamic/fake"
)

func TestBuildVMCapabilities(t *testing.T) {
	scheme := runtime.NewScheme()
	client := dynamicfake.NewSimpleDynamicClientWithCustomListKinds(scheme, map[schema.GroupVersionResource]string{
		kubeVirtGVR: "KubeVirtList",
	},
		&unstructured.Unstructured{
			Object: map[string]interface{}{
				"apiVersion": "kubevirt.io/v1",
				"kind":       "KubeVirt",
				"metadata": map[string]interface{}{
					"name":      "kubevirt",
					"namespace": "kubevirt",
				},
				"spec": map[string]interface{}{
					"configuration": map[string]interface{}{
						"permittedHostDevices": map[string]interface{}{
							"pciHostDevices": []interface{}{
								map[string]interface{}{"resourceName": "nvidia.com/T4"},
							},
							"mediatedDevices": []interface{}{
								map[string]interface{}{"resourceName": "gpu.example.com/A10"},
							},
							"usb": []interface{}{
								map[string]interface{}{"resourceName": "kubevirt.io/usb-a"},
							},
						},
					},
				},
			},
		},
	)

	capabilities, err := BuildVMCapabilities(client)
	assert.NoError(t, err)
	assert.True(t, capabilities.ChunkUploadSupported)
	assert.True(t, capabilities.GPUSupported)
	assert.True(t, capabilities.USBSupported)
	assert.Equal(t, []string{"gpu.example.com/A10", "nvidia.com/T4"}, capabilities.GPUResources)
	assert.Equal(t, []string{"kubevirt.io/usb-a"}, capabilities.USBResources)
}

func TestBuildVMCapabilitiesWithoutOptionalResources(t *testing.T) {
	client := dynamicfake.NewSimpleDynamicClientWithCustomListKinds(runtime.NewScheme(), map[schema.GroupVersionResource]string{
		kubeVirtGVR: "KubeVirtList",
	})
	capabilities, err := BuildVMCapabilities(client)
	assert.NoError(t, err)
	assert.False(t, capabilities.GPUSupported)
	assert.False(t, capabilities.USBSupported)
	assert.Empty(t, capabilities.GPUResources)
	assert.Empty(t, capabilities.USBResources)
}

func TestBuildVMCapabilitiesDeduplicatesDeviceResources(t *testing.T) {
	scheme := runtime.NewScheme()
	client := dynamicfake.NewSimpleDynamicClientWithCustomListKinds(scheme, map[schema.GroupVersionResource]string{
		kubeVirtGVR: "KubeVirtList",
	},
		&unstructured.Unstructured{
			Object: map[string]interface{}{
				"apiVersion": "kubevirt.io/v1",
				"kind":       "KubeVirt",
				"metadata": map[string]interface{}{
					"name":      "kubevirt",
					"namespace": "kubevirt",
				},
				"spec": map[string]interface{}{
					"configuration": map[string]interface{}{
						"permittedHostDevices": map[string]interface{}{
							"pciHostDevices": []interface{}{
								map[string]interface{}{"resourceName": "nvidia.com/T4"},
								map[string]interface{}{"resourceName": "nvidia.com/T4"},
							},
							"usb": []interface{}{
								map[string]interface{}{"resourceName": "kubevirt.io/usb-b"},
								map[string]interface{}{"resourceName": "kubevirt.io/usb-a"},
							},
						},
					},
				},
			},
		},
	)

	capabilities, err := BuildVMCapabilities(client)
	assert.NoError(t, err)
	assert.Equal(t, []string{"nvidia.com/T4"}, capabilities.GPUResources)
	assert.Equal(t, []string{"kubevirt.io/usb-a", "kubevirt.io/usb-b"}, capabilities.USBResources)
}