From 501f7b16d93e5a2d3dbc0c8f51e90e79a29f2774 Mon Sep 17 00:00:00 2001 From: Renaud Gaubert Date: Sat, 10 Oct 2020 16:03:31 -0700 Subject: [PATCH] Update podresources api e2e_node tests --- test/e2e_node/BUILD | 2 + test/e2e_node/device_plugin_test.go | 62 ++++++++++++++++++++++------- test/e2e_node/util.go | 24 ++++++++++- 3 files changed, 71 insertions(+), 17 deletions(-) diff --git a/test/e2e_node/BUILD b/test/e2e_node/BUILD index 75250abdfb9..293540f7719 100644 --- a/test/e2e_node/BUILD +++ b/test/e2e_node/BUILD @@ -47,6 +47,7 @@ go_library( "//staging/src/k8s.io/cri-api/pkg/apis:go_default_library", "//staging/src/k8s.io/cri-api/pkg/apis/runtime/v1alpha2:go_default_library", "//staging/src/k8s.io/kubelet/config/v1beta1:go_default_library", + "//staging/src/k8s.io/kubelet/pkg/apis/podresources/v1:go_default_library", "//staging/src/k8s.io/kubelet/pkg/apis/podresources/v1alpha1:go_default_library", "//staging/src/k8s.io/kubelet/pkg/apis/stats/v1alpha1:go_default_library", "//test/e2e/common:go_default_library", @@ -194,6 +195,7 @@ go_test( "//staging/src/k8s.io/component-base/metrics/testutil:go_default_library", "//staging/src/k8s.io/cri-api/pkg/apis:go_default_library", "//staging/src/k8s.io/cri-api/pkg/apis/runtime/v1alpha2:go_default_library", + "//staging/src/k8s.io/kubelet/pkg/apis/podresources/v1:go_default_library", "//staging/src/k8s.io/kubelet/pkg/apis/podresources/v1alpha1:go_default_library", "//staging/src/k8s.io/kubelet/pkg/apis/stats/v1alpha1:go_default_library", "//staging/src/k8s.io/mount-utils:go_default_library", diff --git a/test/e2e_node/device_plugin_test.go b/test/e2e_node/device_plugin_test.go index 5d2f6bf6ecd..7ea69d7ee64 100644 --- a/test/e2e_node/device_plugin_test.go +++ b/test/e2e_node/device_plugin_test.go @@ -32,6 +32,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/uuid" + kubeletpodresourcesv1 "k8s.io/kubelet/pkg/apis/podresources/v1" kubeletpodresourcesv1alpha1 "k8s.io/kubelet/pkg/apis/podresources/v1alpha1" "k8s.io/kubernetes/pkg/features" kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" @@ -157,25 +158,56 @@ func testDevicePlugin(f *framework.Framework, pluginSockDir string) { devID1 := parseLog(f, pod1.Name, pod1.Name, deviceIDRE) gomega.Expect(devID1).To(gomega.Not(gomega.Equal(""))) - podResources, err := getNodeDevices() - var resourcesForOurPod *kubeletpodresourcesv1alpha1.PodResources - framework.Logf("pod resources %v", podResources) + v1alphaPodResources, err := getV1alpha1NodeDevices() framework.ExpectNoError(err) - framework.ExpectEqual(len(podResources.PodResources), 2) - for _, res := range podResources.GetPodResources() { + framework.Logf("v1alpha pod resources %v", v1alphaPodResources) + + v1PodResources, err := getV1NodeDevices() + framework.ExpectNoError(err) + framework.Logf("v1 pod resources %v", v1PodResources) + + framework.ExpectEqual(len(v1alphaPodResources.PodResources), 2) + framework.ExpectEqual(len(v1PodResources.PodResources), 2) + + var v1alphaResourcesForOurPod *kubeletpodresourcesv1alpha1.PodResources + for _, res := range v1alphaPodResources.GetPodResources() { if res.Name == pod1.Name { - resourcesForOurPod = res + v1alphaResourcesForOurPod = res } } - framework.Logf("resourcesForOurPod %v", resourcesForOurPod) - gomega.Expect(resourcesForOurPod).NotTo(gomega.BeNil()) - framework.ExpectEqual(resourcesForOurPod.Name, pod1.Name) - framework.ExpectEqual(resourcesForOurPod.Namespace, pod1.Namespace) - framework.ExpectEqual(len(resourcesForOurPod.Containers), 1) - framework.ExpectEqual(resourcesForOurPod.Containers[0].Name, pod1.Spec.Containers[0].Name) - framework.ExpectEqual(len(resourcesForOurPod.Containers[0].Devices), 1) - framework.ExpectEqual(resourcesForOurPod.Containers[0].Devices[0].ResourceName, resourceName) - framework.ExpectEqual(len(resourcesForOurPod.Containers[0].Devices[0].DeviceIds), 1) + framework.Logf("v1alphaResourcesForOurPod %v", v1alphaResourcesForOurPod) + + var v1ResourcesForOurPod *kubeletpodresourcesv1.PodResources + for _, res := range v1PodResources.GetPodResources() { + if res.Name == pod1.Name { + v1ResourcesForOurPod = res + } + } + framework.Logf("v1ResourcesForOurPod %v", v1ResourcesForOurPod) + + gomega.Expect(v1alphaResourcesForOurPod).NotTo(gomega.BeNil()) + gomega.Expect(v1ResourcesForOurPod).NotTo(gomega.BeNil()) + + framework.ExpectEqual(v1alphaResourcesForOurPod.Name, pod1.Name) + framework.ExpectEqual(v1ResourcesForOurPod.Name, pod1.Name) + + framework.ExpectEqual(v1alphaResourcesForOurPod.Namespace, pod1.Namespace) + framework.ExpectEqual(v1ResourcesForOurPod.Namespace, pod1.Namespace) + + framework.ExpectEqual(len(v1alphaResourcesForOurPod.Containers), 1) + framework.ExpectEqual(len(v1ResourcesForOurPod.Containers), 1) + + framework.ExpectEqual(v1alphaResourcesForOurPod.Containers[0].Name, pod1.Spec.Containers[0].Name) + framework.ExpectEqual(v1ResourcesForOurPod.Containers[0].Name, pod1.Spec.Containers[0].Name) + + framework.ExpectEqual(len(v1alphaResourcesForOurPod.Containers[0].Devices), 1) + framework.ExpectEqual(len(v1ResourcesForOurPod.Containers[0].Devices), 1) + + framework.ExpectEqual(v1alphaResourcesForOurPod.Containers[0].Devices[0].ResourceName, resourceName) + framework.ExpectEqual(v1ResourcesForOurPod.Containers[0].Devices[0].ResourceName, resourceName) + + framework.ExpectEqual(len(v1alphaResourcesForOurPod.Containers[0].Devices[0].DeviceIds), 1) + framework.ExpectEqual(len(v1ResourcesForOurPod.Containers[0].Devices[0].DeviceIds), 1) pod1, err = f.PodClient().Get(context.TODO(), pod1.Name, metav1.GetOptions{}) framework.ExpectNoError(err) diff --git a/test/e2e_node/util.go b/test/e2e_node/util.go index bae5d51f04f..fd6273eac55 100644 --- a/test/e2e_node/util.go +++ b/test/e2e_node/util.go @@ -38,6 +38,7 @@ import ( internalapi "k8s.io/cri-api/pkg/apis" "k8s.io/klog/v2" kubeletconfigv1beta1 "k8s.io/kubelet/config/v1beta1" + kubeletpodresourcesv1 "k8s.io/kubelet/pkg/apis/podresources/v1" kubeletpodresourcesv1alpha1 "k8s.io/kubelet/pkg/apis/podresources/v1alpha1" stats "k8s.io/kubelet/pkg/apis/stats/v1alpha1" "k8s.io/kubernetes/pkg/features" @@ -103,12 +104,12 @@ func getNodeSummary() (*stats.Summary, error) { return &summary, nil } -func getNodeDevices() (*kubeletpodresourcesv1alpha1.ListPodResourcesResponse, error) { +func getV1alpha1NodeDevices() (*kubeletpodresourcesv1alpha1.ListPodResourcesResponse, error) { endpoint, err := util.LocalEndpoint(defaultPodResourcesPath, podresources.Socket) if err != nil { return nil, fmt.Errorf("Error getting local endpoint: %v", err) } - client, conn, err := podresources.GetClient(endpoint, defaultPodResourcesTimeout, defaultPodResourcesMaxSize) + client, conn, err := podresources.GetV1alpha1Client(endpoint, defaultPodResourcesTimeout, defaultPodResourcesMaxSize) if err != nil { return nil, fmt.Errorf("Error getting grpc client: %v", err) } @@ -122,6 +123,25 @@ func getNodeDevices() (*kubeletpodresourcesv1alpha1.ListPodResourcesResponse, er return resp, nil } +func getV1NodeDevices() (*kubeletpodresourcesv1.ListPodResourcesResponse, error) { + endpoint, err := util.LocalEndpoint(defaultPodResourcesPath, podresources.Socket) + if err != nil { + return nil, fmt.Errorf("Error getting local endpoint: %v", err) + } + client, conn, err := podresources.GetV1Client(endpoint, defaultPodResourcesTimeout, defaultPodResourcesMaxSize) + if err != nil { + return nil, fmt.Errorf("Error getting gRPC client: %v", err) + } + defer conn.Close() + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + resp, err := client.List(ctx, &kubeletpodresourcesv1.ListPodResourcesRequest{}) + if err != nil { + return nil, fmt.Errorf("%v.Get(_) = _, %v", client, err) + } + return resp, nil +} + // Returns the current KubeletConfiguration func getCurrentKubeletConfig() (*kubeletconfig.KubeletConfiguration, error) { // namespace only relevant if useProxy==true, so we don't bother