From e38cfb61be5ebed71407149aae468b769a3ade4e Mon Sep 17 00:00:00 2001 From: Hemant Kumar Date: Mon, 1 Oct 2018 14:13:14 -0400 Subject: [PATCH] Add a e2e test to check node limits --- test/e2e/storage/BUILD | 2 + test/e2e/storage/volume_limits.go | 63 +++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 test/e2e/storage/volume_limits.go diff --git a/test/e2e/storage/BUILD b/test/e2e/storage/BUILD index 395a2a7ac5e..2e45fee4ed7 100644 --- a/test/e2e/storage/BUILD +++ b/test/e2e/storage/BUILD @@ -21,6 +21,7 @@ go_library( "regional_pd.go", "subpath.go", "volume_expand.go", + "volume_limits.go", "volume_metrics.go", "volume_provisioning.go", "volumes.go", @@ -29,6 +30,7 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/api/v1/pod:go_default_library", + "//pkg/apis/core/v1/helper:go_default_library", "//pkg/apis/storage/v1/util:go_default_library", "//pkg/client/conditions:go_default_library", "//pkg/kubelet/apis:go_default_library", diff --git a/test/e2e/storage/volume_limits.go b/test/e2e/storage/volume_limits.go new file mode 100644 index 00000000000..9c3a1794493 --- /dev/null +++ b/test/e2e/storage/volume_limits.go @@ -0,0 +1,63 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package storage + +import ( + . "github.com/onsi/ginkgo" + "k8s.io/api/core/v1" + clientset "k8s.io/client-go/kubernetes" + v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" + "k8s.io/kubernetes/test/e2e/framework" + "k8s.io/kubernetes/test/e2e/storage/utils" +) + +var _ = utils.SIGDescribe("Volume limits", func() { + var ( + c clientset.Interface + ) + f := framework.NewDefaultFramework("volume-limits-on-node") + BeforeEach(func() { + framework.SkipUnlessProviderIs("aws", "gce", "gke") + c = f.ClientSet + framework.ExpectNoError(framework.WaitForAllNodesSchedulable(c, framework.TestContext.NodeSchedulableTimeout)) + }) + + It("should verify that all nodes have volume limits", func() { + nodeList := framework.GetReadySchedulableNodesOrDie(f.ClientSet) + if len(nodeList.Items) == 0 { + framework.Failf("Unable to find ready and schedulable Node") + } + for _, node := range nodeList.Items { + volumeLimits := getVolumeLimit(&node) + if len(volumeLimits) == 0 { + framework.Failf("Expected volume limits to be set") + } + } + + }) +}) + +func getVolumeLimit(node *v1.Node) map[v1.ResourceName]int64 { + volumeLimits := map[v1.ResourceName]int64{} + nodeAllocatables := node.Status.Allocatable + for k, v := range nodeAllocatables { + if v1helper.IsAttachableVolumeResourceName(k) { + volumeLimits[k] = v.Value() + } + } + return volumeLimits +}