diff --git a/pkg/registry/networking/ingress/storage/storage_test.go b/pkg/registry/networking/ingress/storage/storage_test.go index d4b94020c00..e5f27f1122c 100644 --- a/pkg/registry/networking/ingress/storage/storage_test.go +++ b/pkg/registry/networking/ingress/storage/storage_test.go @@ -19,13 +19,17 @@ package storage import ( "testing" + "github.com/google/go-cmp/cmp" + apiequality "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/intstr" + genericapirequest "k8s.io/apiserver/pkg/endpoints/request" "k8s.io/apiserver/pkg/registry/generic" genericregistrytest "k8s.io/apiserver/pkg/registry/generic/testing" + "k8s.io/apiserver/pkg/registry/rest" etcd3testing "k8s.io/apiserver/pkg/storage/etcd3/testing" _ "k8s.io/kubernetes/pkg/apis/extensions/install" "k8s.io/kubernetes/pkg/apis/networking" @@ -49,7 +53,7 @@ func newStorage(t *testing.T) (*REST, *StatusREST, *etcd3testing.EtcdTestServer) } var ( - namespace = metav1.NamespaceNone + namespace = "test" // genericregistrytest.Tester hardcode namespace that will be used when creating contexts. name = "foo-ingress" defaultHostname = "foo.bar.com" defaultBackendName = "default-backend" @@ -242,6 +246,40 @@ func TestWatch(t *testing.T) { ) } +func TestUpdateStatus(t *testing.T) { + storage, statusStorage, server := newStorage(t) + defer server.Terminate(t) + defer storage.Store.DestroyFunc() + + ingStart := validIngress() + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), namespace) + key, _ := storage.KeyFunc(ctx, ingStart.Name) + err := storage.Storage.Create(ctx, key, ingStart, nil, 0, false) + if err != nil { + t.Fatalf("Unexpected error: %v", err) + } + + ing := ingStart.DeepCopy() + ing.Status.LoadBalancer.Ingress = []networking.IngressLoadBalancerIngress{ + { + IP: defaultLoadBalancer, + }, + } + _, _, err = statusStorage.Update(ctx, ing.Name, rest.DefaultUpdatedObjectInfo(ing), rest.ValidateAllObjectFunc, rest.ValidateAllObjectUpdateFunc, false, &metav1.UpdateOptions{}) + if err != nil { + t.Fatalf("Unexpected error: %v", err) + } + obj, err := storage.Get(ctx, ing.Name, &metav1.GetOptions{}) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + ingOut := obj.(*networking.Ingress) + // only compare relevant changes b/c of difference in metadata + if !apiequality.Semantic.DeepEqual(ing.Status, ingOut.Status) { + t.Errorf("unexpected object: %s", cmp.Diff(ing.Status, ingOut.Status)) + } +} + func TestShortNames(t *testing.T) { storage, _, server := newStorage(t) defer server.Terminate(t) @@ -249,5 +287,3 @@ func TestShortNames(t *testing.T) { expected := []string{"ing"} registrytest.AssertShortNames(t, storage, expected) } - -// TODO TestUpdateStatus