ingress: promote CRUD API tests for v1 to conformance

Signed-off-by: Christopher M. Luciano <cmluciano@us.ibm.com>
This commit is contained in:
Christopher M. Luciano 2020-06-10 13:59:38 -04:00
parent 13f1d956ea
commit ca2b5b7605
No known key found for this signature in database
GPG Key ID: 5148DBB31F2843F1
3 changed files with 83 additions and 47 deletions

View File

@ -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]'

View File

@ -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")

View File

@ -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")