mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 19:31:44 +00:00
ingress: promote CRUD API tests for v1 to conformance
Signed-off-by: Christopher M. Luciano <cmluciano@us.ibm.com>
This commit is contained in:
parent
13f1d956ea
commit
ca2b5b7605
21
test/conformance/testdata/conformance.yaml
vendored
21
test/conformance/testdata/conformance.yaml
vendored
@ -1561,6 +1561,27 @@
|
||||
DNS configuration MUST be configured in the Pod.
|
||||
release: v1.17
|
||||
file: test/e2e/network/dns.go
|
||||
- testname: Ingress API
|
||||
codename: '[sig-network] Ingress API should support creating Ingress API operations
|
||||
[Conformance]'
|
||||
description: ' The networking.k8s.io API group MUST exist in the /apis discovery
|
||||
document. The networking.k8s.io/v1 API group/version MUST exist in the /apis/networking.k8s.io
|
||||
discovery document. The ingresses resources MUST exist in the /apis/networking.k8s.io/v1
|
||||
discovery document. The ingresses resource must support create, get, list, watch,
|
||||
update, patch, delete, and deletecollection. The ingresses/status resource must
|
||||
support update and patch'
|
||||
release: v1.19
|
||||
file: test/e2e/network/ingress.go
|
||||
- testname: IngressClass API
|
||||
codename: '[sig-network] IngressClass API should support creating IngressClass
|
||||
API operations [Conformance]'
|
||||
description: ' - The networking.k8s.io API group MUST exist in the /apis discovery
|
||||
document. - The networking.k8s.io/v1 API group/version MUST exist in the /apis/networking.k8s.io
|
||||
discovery document. - The ingressclasses resource MUST exist in the /apis/networking.k8s.io/v1
|
||||
discovery document. - The ingressclass resource must support create, get, list,
|
||||
watch, update, patch, delete, and deletecollection.'
|
||||
release: v1.19
|
||||
file: test/e2e/network/ingressclass.go
|
||||
- testname: Networking, intra pod http
|
||||
codename: '[sig-network] Networking Granular Checks: Pods should function for intra-pod
|
||||
communication: http [NodeConformance] [Conformance]'
|
||||
|
@ -28,13 +28,13 @@ import (
|
||||
compute "google.golang.org/api/compute/v1"
|
||||
|
||||
v1 "k8s.io/api/core/v1"
|
||||
networkingv1 "k8s.io/api/networking/v1"
|
||||
networkingv1beta1 "k8s.io/api/networking/v1beta1"
|
||||
rbacv1 "k8s.io/api/rbac/v1"
|
||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
types "k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/apimachinery/pkg/util/intstr"
|
||||
"k8s.io/apimachinery/pkg/util/uuid"
|
||||
"k8s.io/apimachinery/pkg/util/wait"
|
||||
"k8s.io/apimachinery/pkg/watch"
|
||||
@ -947,42 +947,52 @@ var _ = SIGDescribe("Ingress API", func() {
|
||||
Testname: Ingress API
|
||||
Description:
|
||||
The networking.k8s.io API group MUST exist in the /apis discovery document.
|
||||
The networking.k8s.io/v1beta1 API group/version MUST exist in the /apis/networking.k8s.io discovery document.
|
||||
The ingresses resources MUST exist in the /apis/networking.k8s.io/v1beta1 discovery document.
|
||||
The networking.k8s.io/v1 API group/version MUST exist in the /apis/networking.k8s.io discovery document.
|
||||
The ingresses resources MUST exist in the /apis/networking.k8s.io/v1 discovery document.
|
||||
The ingresses resource must support create, get, list, watch, update, patch, delete, and deletecollection.
|
||||
The ingresses/status resource must support update and patch
|
||||
|
||||
*/
|
||||
|
||||
ginkgo.It("should support creating Ingress API operations", func() {
|
||||
framework.ConformanceIt("should support creating Ingress API operations", func() {
|
||||
// Setup
|
||||
ns := f.Namespace.Name
|
||||
ingVersion := "v1beta1"
|
||||
ingClient := f.ClientSet.NetworkingV1beta1().Ingresses(ns)
|
||||
ingVersion := "v1"
|
||||
ingClient := f.ClientSet.NetworkingV1().Ingresses(ns)
|
||||
|
||||
prefixPathType := networkingv1beta1.PathTypePrefix
|
||||
prefixPathType := networkingv1.PathTypePrefix
|
||||
serviceBackend := &networkingv1.IngressServiceBackend{
|
||||
Name: "default-backend",
|
||||
Port: networkingv1.ServiceBackendPort{
|
||||
Name: "",
|
||||
Number: 8080,
|
||||
},
|
||||
}
|
||||
defaultBackend := networkingv1.IngressBackend{
|
||||
Service: serviceBackend,
|
||||
}
|
||||
|
||||
ingTemplate := &networkingv1beta1.Ingress{
|
||||
ingTemplate := &networkingv1.Ingress{
|
||||
ObjectMeta: metav1.ObjectMeta{GenerateName: "e2e-example-ing",
|
||||
Labels: map[string]string{
|
||||
"special-label": f.UniqueName,
|
||||
}},
|
||||
Spec: networkingv1beta1.IngressSpec{
|
||||
Backend: &networkingv1beta1.IngressBackend{
|
||||
ServiceName: "default-backend",
|
||||
ServicePort: intstr.FromInt(8080),
|
||||
},
|
||||
Rules: []networkingv1beta1.IngressRule{
|
||||
Spec: networkingv1.IngressSpec{
|
||||
DefaultBackend: &defaultBackend,
|
||||
Rules: []networkingv1.IngressRule{
|
||||
{
|
||||
Host: "foo.bar.com",
|
||||
IngressRuleValue: networkingv1beta1.IngressRuleValue{
|
||||
HTTP: &networkingv1beta1.HTTPIngressRuleValue{
|
||||
Paths: []networkingv1beta1.HTTPIngressPath{{
|
||||
IngressRuleValue: networkingv1.IngressRuleValue{
|
||||
HTTP: &networkingv1.HTTPIngressRuleValue{
|
||||
Paths: []networkingv1.HTTPIngressPath{{
|
||||
Path: "/",
|
||||
PathType: &prefixPathType,
|
||||
Backend: networkingv1beta1.IngressBackend{
|
||||
ServiceName: "test-backend",
|
||||
ServicePort: intstr.FromInt(8080),
|
||||
Backend: networkingv1.IngressBackend{
|
||||
Service: &networkingv1.IngressServiceBackend{
|
||||
Name: "test-backend",
|
||||
Port: networkingv1.ServiceBackendPort{
|
||||
Number: 8080,
|
||||
},
|
||||
},
|
||||
},
|
||||
}},
|
||||
},
|
||||
@ -990,7 +1000,7 @@ var _ = SIGDescribe("Ingress API", func() {
|
||||
},
|
||||
},
|
||||
},
|
||||
Status: networkingv1beta1.IngressStatus{LoadBalancer: v1.LoadBalancerStatus{}},
|
||||
Status: networkingv1.IngressStatus{LoadBalancer: v1.LoadBalancerStatus{}},
|
||||
}
|
||||
// Discovery
|
||||
ginkgo.By("getting /apis")
|
||||
@ -1028,7 +1038,7 @@ var _ = SIGDescribe("Ingress API", func() {
|
||||
|
||||
ginkgo.By("getting /apis/networking.k8s.io" + ingVersion)
|
||||
{
|
||||
resources, err := f.ClientSet.Discovery().ServerResourcesForGroupVersion(networkingv1beta1.SchemeGroupVersion.String())
|
||||
resources, err := f.ClientSet.Discovery().ServerResourcesForGroupVersion(networkingv1.SchemeGroupVersion.String())
|
||||
framework.ExpectNoError(err)
|
||||
foundIngress := false
|
||||
for _, resource := range resources.APIResources {
|
||||
@ -1065,7 +1075,7 @@ var _ = SIGDescribe("Ingress API", func() {
|
||||
framework.ExpectNoError(err)
|
||||
|
||||
// Test cluster-wide list and watch
|
||||
clusterIngClient := f.ClientSet.NetworkingV1beta1().Ingresses("")
|
||||
clusterIngClient := f.ClientSet.NetworkingV1().Ingresses("")
|
||||
ginkgo.By("cluster-wide listing")
|
||||
clusterIngs, err := clusterIngClient.List(context.TODO(), metav1.ListOptions{LabelSelector: "special-label=" + f.UniqueName})
|
||||
framework.ExpectNoError(err)
|
||||
@ -1094,7 +1104,7 @@ var _ = SIGDescribe("Ingress API", func() {
|
||||
case evt, ok := <-ingWatch.ResultChan():
|
||||
framework.ExpectEqual(ok, true, "watch channel should not close")
|
||||
framework.ExpectEqual(evt.Type, watch.Modified)
|
||||
watchedIngress, isIngress := evt.Object.(*networkingv1beta1.Ingress)
|
||||
watchedIngress, isIngress := evt.Object.(*networkingv1.Ingress)
|
||||
framework.ExpectEqual(isIngress, true, fmt.Sprintf("expected Ingress, got %T", evt.Object))
|
||||
if watchedIngress.Annotations["patched"] == "true" {
|
||||
framework.Logf("saw patched and updated annotations")
|
||||
|
@ -22,11 +22,12 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
networkingv1 "k8s.io/api/networking/v1"
|
||||
networkingv1beta1 "k8s.io/api/networking/v1beta1"
|
||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
types "k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/apimachinery/pkg/util/intstr"
|
||||
|
||||
"k8s.io/apimachinery/pkg/util/wait"
|
||||
"k8s.io/apimachinery/pkg/watch"
|
||||
clientset "k8s.io/client-go/kubernetes"
|
||||
@ -83,7 +84,7 @@ var _ = SIGDescribe("IngressClass [Feature:Ingress]", func() {
|
||||
expectedErr := "2 default IngressClasses were found, only 1 allowed"
|
||||
var lastErr error
|
||||
if err := wait.Poll(time.Second, time.Minute, func() (bool, error) {
|
||||
defer cs.NetworkingV1beta1().Ingresses(f.Namespace.Name).Delete(context.TODO(), "ingress1", metav1.DeleteOptions{})
|
||||
defer cs.NetworkingV1().Ingresses(f.Namespace.Name).Delete(context.TODO(), "ingress1", metav1.DeleteOptions{})
|
||||
_, err := createBasicIngress(cs, f.Namespace.Name)
|
||||
if err == nil {
|
||||
return false, nil
|
||||
@ -97,8 +98,8 @@ var _ = SIGDescribe("IngressClass [Feature:Ingress]", func() {
|
||||
|
||||
})
|
||||
|
||||
func createIngressClass(cs clientset.Interface, name string, isDefault bool, uniqueName string) (*networkingv1beta1.IngressClass, error) {
|
||||
ingressClass := &networkingv1beta1.IngressClass{
|
||||
func createIngressClass(cs clientset.Interface, name string, isDefault bool, uniqueName string) (*networkingv1.IngressClass, error) {
|
||||
ingressClass := &networkingv1.IngressClass{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: name,
|
||||
Labels: map[string]string{
|
||||
@ -106,7 +107,7 @@ func createIngressClass(cs clientset.Interface, name string, isDefault bool, uni
|
||||
"special-label": "generic",
|
||||
},
|
||||
},
|
||||
Spec: networkingv1beta1.IngressClassSpec{
|
||||
Spec: networkingv1.IngressClassSpec{
|
||||
Controller: "example.com/controller",
|
||||
},
|
||||
}
|
||||
@ -115,25 +116,29 @@ func createIngressClass(cs clientset.Interface, name string, isDefault bool, uni
|
||||
ingressClass.Annotations = map[string]string{networkingv1beta1.AnnotationIsDefaultIngressClass: "true"}
|
||||
}
|
||||
|
||||
return cs.NetworkingV1beta1().IngressClasses().Create(context.TODO(), ingressClass, metav1.CreateOptions{})
|
||||
return cs.NetworkingV1().IngressClasses().Create(context.TODO(), ingressClass, metav1.CreateOptions{})
|
||||
}
|
||||
|
||||
func createBasicIngress(cs clientset.Interface, namespace string) (*networkingv1beta1.Ingress, error) {
|
||||
return cs.NetworkingV1beta1().Ingresses(namespace).Create(context.TODO(), &networkingv1beta1.Ingress{
|
||||
func createBasicIngress(cs clientset.Interface, namespace string) (*networkingv1.Ingress, error) {
|
||||
return cs.NetworkingV1().Ingresses(namespace).Create(context.TODO(), &networkingv1.Ingress{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "ingress1",
|
||||
},
|
||||
Spec: networkingv1beta1.IngressSpec{
|
||||
Backend: &networkingv1beta1.IngressBackend{
|
||||
ServiceName: "default-backend",
|
||||
ServicePort: intstr.FromInt(80),
|
||||
Spec: networkingv1.IngressSpec{
|
||||
DefaultBackend: &networkingv1.IngressBackend{
|
||||
Service: &networkingv1.IngressServiceBackend{
|
||||
Name: "defaultbackend",
|
||||
Port: networkingv1.ServiceBackendPort{
|
||||
Number: 80,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}, metav1.CreateOptions{})
|
||||
}
|
||||
|
||||
func deleteIngressClass(cs clientset.Interface, name string) {
|
||||
err := cs.NetworkingV1beta1().IngressClasses().Delete(context.TODO(), name, metav1.DeleteOptions{})
|
||||
err := cs.NetworkingV1().IngressClasses().Delete(context.TODO(), name, metav1.DeleteOptions{})
|
||||
framework.ExpectNoError(err)
|
||||
}
|
||||
|
||||
@ -148,15 +153,15 @@ var _ = SIGDescribe("IngressClass API", func() {
|
||||
Testname: IngressClass API
|
||||
Description:
|
||||
- The networking.k8s.io API group MUST exist in the /apis discovery document.
|
||||
- The networking.k8s.io/v1beta1 API group/version MUST exist in the /apis/networking.k8s.io discovery document.
|
||||
- The IngressClasses resources MUST exist in the /apis/networking.k8s.io/v1beta1 discovery document.
|
||||
- The IngressClass resource must support create, get, list, watch, update, patch, delete, and deletecollection.
|
||||
- The networking.k8s.io/v1 API group/version MUST exist in the /apis/networking.k8s.io discovery document.
|
||||
- The ingressclasses resource MUST exist in the /apis/networking.k8s.io/v1 discovery document.
|
||||
- The ingressclass resource must support create, get, list, watch, update, patch, delete, and deletecollection.
|
||||
*/
|
||||
ginkgo.It(" should support creating IngressClass API operations", func() {
|
||||
framework.ConformanceIt(" should support creating IngressClass API operations", func() {
|
||||
|
||||
// Setup
|
||||
icClient := f.ClientSet.NetworkingV1beta1().IngressClasses()
|
||||
icVersion := "v1beta1"
|
||||
icClient := f.ClientSet.NetworkingV1().IngressClasses()
|
||||
icVersion := "v1"
|
||||
|
||||
// Discovery
|
||||
ginkgo.By("getting /apis")
|
||||
@ -165,7 +170,7 @@ var _ = SIGDescribe("IngressClass API", func() {
|
||||
framework.ExpectNoError(err)
|
||||
found := false
|
||||
for _, group := range discoveryGroups.Groups {
|
||||
if group.Name == networkingv1beta1.GroupName {
|
||||
if group.Name == networkingv1.GroupName {
|
||||
for _, version := range group.Versions {
|
||||
if version.Version == icVersion {
|
||||
found = true
|
||||
@ -193,7 +198,7 @@ var _ = SIGDescribe("IngressClass API", func() {
|
||||
|
||||
ginkgo.By("getting /apis/networking.k8s.io" + icVersion)
|
||||
{
|
||||
resources, err := f.ClientSet.Discovery().ServerResourcesForGroupVersion(networkingv1beta1.SchemeGroupVersion.String())
|
||||
resources, err := f.ClientSet.Discovery().ServerResourcesForGroupVersion(networkingv1.SchemeGroupVersion.String())
|
||||
framework.ExpectNoError(err)
|
||||
foundIC := false
|
||||
for _, resource := range resources.APIResources {
|
||||
@ -248,7 +253,7 @@ var _ = SIGDescribe("IngressClass API", func() {
|
||||
case evt, ok := <-icWatch.ResultChan():
|
||||
framework.ExpectEqual(ok, true, "watch channel should not close")
|
||||
framework.ExpectEqual(evt.Type, watch.Modified)
|
||||
watchedIngress, isIngress := evt.Object.(*networkingv1beta1.IngressClass)
|
||||
watchedIngress, isIngress := evt.Object.(*networkingv1.IngressClass)
|
||||
framework.ExpectEqual(isIngress, true, fmt.Sprintf("expected Ingress, got %T", evt.Object))
|
||||
if watchedIngress.Annotations["patched"] == "true" {
|
||||
framework.Logf("saw patched and updated annotations")
|
||||
|
Loading…
Reference in New Issue
Block a user