Skip to content

Commit

Permalink
Add tests for ingress patch methods
Browse files Browse the repository at this point in the history
  • Loading branch information
skmatti committed Jun 8, 2020
1 parent 95ff5cc commit 504069b
Showing 1 changed file with 175 additions and 0 deletions.
175 changes: 175 additions & 0 deletions pkg/utils/patch/patch_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,18 @@ limitations under the License.
package patch

import (
"context"
"fmt"
"testing"

"github.com/google/go-cmp/cmp"

apiv1 "k8s.io/api/core/v1"
"k8s.io/api/networking/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/client-go/kubernetes/fake"
"k8s.io/kubernetes/pkg/util/slice"
)

func TestStrategicMergePatchBytes(t *testing.T) {
Expand Down Expand Up @@ -49,3 +57,170 @@ func TestStrategicMergePatchBytes(t *testing.T) {
t.Errorf("StrategicMergePatchBytes(%+v, %+v) = %s ; want %s", ing, updated, string(b), expected)
}
}

func TestPatchIngressObjectMetadata(t *testing.T) {
for _, tc := range []struct {
desc string
ing *v1beta1.Ingress
newMetaFunc func(*v1beta1.Ingress) *v1beta1.Ingress
}{
{
desc: "add annotation",
ing: newTestIngress("ns1", "add-annotation-ing"),
newMetaFunc: func(ing *v1beta1.Ingress) *v1beta1.Ingress {
ret := ing.DeepCopy()
ret.Annotations["test-annotation-key3"] = "test-value3"
return ret
},
},
{
desc: "delete annotation",
ing: newTestIngress("ns2", "delete-annotation-ing"),
newMetaFunc: func(ing *v1beta1.Ingress) *v1beta1.Ingress {
ret := ing.DeepCopy()
delete(ret.Annotations, testAnnotationKey)
return ret
},
},
{
desc: "delete all annotations",
ing: newTestIngress("ns3", "delete-all-annotations-ing"),
newMetaFunc: func(ing *v1beta1.Ingress) *v1beta1.Ingress {
ret := ing.DeepCopy()
ret.Annotations = nil
return ret
},
},
{
desc: "add finalizer",
ing: newTestIngress("ns4", "add-finalizer-ing"),
newMetaFunc: func(ing *v1beta1.Ingress) *v1beta1.Ingress {
ret := ing.DeepCopy()
ret.Finalizers = append(ret.Finalizers, "new-test-ingress-finalizer")
return ret
},
},
{
desc: "delete finalizer",
ing: newTestIngress("ns5", "delete-finalizer-ing"),
newMetaFunc: func(ing *v1beta1.Ingress) *v1beta1.Ingress {
ret := ing.DeepCopy()
ret.Finalizers = slice.RemoveString(ret.Finalizers, testFinalizer, nil)
return ret
},
},
{
desc: "delete annotation and finalizer",
ing: newTestIngress("ns6", "delete-annotation-and-finalizer-ing"),
newMetaFunc: func(ing *v1beta1.Ingress) *v1beta1.Ingress {
ret := ing.DeepCopy()
ret.Annotations = nil
ret.Finalizers = nil
return ret
},
},
} {
t.Run(tc.desc, func(t *testing.T) {
ingKey := fmt.Sprintf("%s/%s", tc.ing.Namespace, tc.ing.Name)
ingClient := fake.NewSimpleClientset().NetworkingV1beta1().Ingresses(tc.ing.Namespace)
if _, err := ingClient.Create(context.TODO(), tc.ing, metav1.CreateOptions{}); err != nil {
t.Fatalf("Create(%s) = %v, want nil", ingKey, err)
}
expectIng := tc.newMetaFunc(tc.ing)
gotIng, err := PatchIngressObjectMetadata(ingClient, tc.ing, expectIng.ObjectMeta)
if err != nil {
t.Fatalf("PatchIngressObjectMetadata(%s) = %v, want nil", ingKey, err)
}

if diff := cmp.Diff(expectIng, gotIng); diff != "" {
t.Errorf("Got mismatch for Ingress patch (-want +got):\n%s", diff)
}
})
}
}

func TestPatchIngressStatus(t *testing.T) {
for _, tc := range []struct {
desc string
ing *v1beta1.Ingress
newMetaFunc func(*v1beta1.Ingress) *v1beta1.Ingress
}{
{
desc: "update status",
ing: newTestIngress("ns1", "update-status-ing"),
newMetaFunc: func(ing *v1beta1.Ingress) *v1beta1.Ingress {
ret := ing.DeepCopy()
ret.Status = v1beta1.IngressStatus{
LoadBalancer: apiv1.LoadBalancerStatus{
Ingress: []apiv1.LoadBalancerIngress{
{IP: "10.0.0.1"},
},
},
}
return ret
},
},
{
desc: "delete status",
ing: newTestIngress("ns2", "delete-status-ing"),
newMetaFunc: func(ing *v1beta1.Ingress) *v1beta1.Ingress {
ret := ing.DeepCopy()
ret.Status = v1beta1.IngressStatus{}
return ret
},
},
} {
t.Run(tc.desc, func(t *testing.T) {
ingKey := fmt.Sprintf("%s/%s", tc.ing.Namespace, tc.ing.Name)
ingClient := fake.NewSimpleClientset().NetworkingV1beta1().Ingresses(tc.ing.Namespace)
if _, err := ingClient.Create(context.TODO(), tc.ing, metav1.CreateOptions{}); err != nil {
t.Fatalf("Create(%s) = %v, want nil", ingKey, err)
}
expectIng := tc.newMetaFunc(tc.ing)
gotIng, err := PatchIngressStatus(ingClient, tc.ing, expectIng.Status)
if err != nil {
t.Fatalf("PatchIngressStatus(%s) = %v, want nil", ingKey, err)
}

if diff := cmp.Diff(expectIng, gotIng); diff != "" {
t.Errorf("Got mismatch for Ingress patch (-want +got):\n%s", diff)
}
})
}
}

const (
testAnnotationKey = "test-annotations-key1"
testFinalizer = "test-finalizer"
)

func newTestIngress(namespace, name string) *v1beta1.Ingress {
return &v1beta1.Ingress{
TypeMeta: metav1.TypeMeta{
Kind: "Ingress",
APIVersion: "networking/v1beta1",
},
ObjectMeta: metav1.ObjectMeta{
Name: name,
Namespace: namespace,
Annotations: map[string]string{
testAnnotationKey: "test-value1",
"test-annotations-key2": "test-value2",
},
Finalizers: []string{testFinalizer},
},
Spec: v1beta1.IngressSpec{
Backend: &v1beta1.IngressBackend{
ServiceName: "test-svc",
ServicePort: intstr.FromInt(8080),
},
},
Status: v1beta1.IngressStatus{
LoadBalancer: apiv1.LoadBalancerStatus{
Ingress: []apiv1.LoadBalancerIngress{
{IP: "127.0.0.1"},
},
},
},
}
}

0 comments on commit 504069b

Please sign in to comment.