From 22341590bd72128416f9d909e7a8d6e45641f793 Mon Sep 17 00:00:00 2001 From: Patrick Ohly Date: Wed, 4 Jan 2023 21:04:09 +0100 Subject: [PATCH] e2e framework: add NamespacedName The E2E framework contains several functions which only differ in how they get name and namespace: from an API object (WaitForPodRunningInNamespace) or as separate parameters (WaitTimeoutForPodRunningInNamespace). NamespacedName and the NamedObject interface enable writing helper functions that can be called with both an API object (like *v1.Pod, which implements Object and thus NamedObject) and name+namespace string (via NamespacedName). The other advantage of NamespacedName is that the order of name and namespace parameter cannot be mixed up. NamespacedName was derived from k8s.io/apimachinery/pkg/types.NamespacedName. A separate type in the framework package was chosen a) to avoid additional imports in test code and b) because the interface might not be suitable for k8s.io/apimachinery. --- test/e2e/framework/namespacedname.go | 49 ++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 test/e2e/framework/namespacedname.go diff --git a/test/e2e/framework/namespacedname.go b/test/e2e/framework/namespacedname.go new file mode 100644 index 00000000000..531d950a6b5 --- /dev/null +++ b/test/e2e/framework/namespacedname.go @@ -0,0 +1,49 @@ +/* +Copyright 2023 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 framework + +// NamespacedName comprises a resource name, with a mandatory namespace, +// rendered as "/". It implements NamedObject and thus can be +// used as function parameter instead of a full API object. +type NamespacedName struct { + Namespace string + Name string +} + +var _ NamedObject = NamespacedName{} + +// NamedObject is a subset of metav1.Object which provides read-only access +// to name and namespace of an object. +type NamedObject interface { + GetNamespace() string + GetName() string +} + +// GetNamespace implements NamedObject. +func (n NamespacedName) GetNamespace() string { + return n.Namespace +} + +// GetName implements NamedObject. +func (n NamespacedName) GetName() string { + return n.Name +} + +// String returns the general purpose string representation +func (n NamespacedName) String() string { + return n.Namespace + "/" + n.Name +}