Add test for ingress status update
This commit is contained in:
parent
c5949252ed
commit
00ce4f46f3
2 changed files with 52 additions and 18 deletions
|
@ -132,6 +132,11 @@ func (s *statusSync) sync(key interface{}) error {
|
||||||
s.runLock.Lock()
|
s.runLock.Lock()
|
||||||
defer s.runLock.Unlock()
|
defer s.runLock.Unlock()
|
||||||
|
|
||||||
|
if s.syncQueue.IsShuttingDown() {
|
||||||
|
glog.V(2).Infof("skipping Ingress status update (shutting down in progress)")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
if !s.elector.IsLeader() {
|
if !s.elector.IsLeader() {
|
||||||
glog.V(2).Infof("skipping Ingress status update (I am not the current leader)")
|
glog.V(2).Infof("skipping Ingress status update (I am not the current leader)")
|
||||||
return nil
|
return nil
|
||||||
|
@ -249,6 +254,7 @@ func (s *statusSync) updateStatus(newIPs []api.LoadBalancerIngress) {
|
||||||
ing := cur.(*extensions.Ingress)
|
ing := cur.(*extensions.Ingress)
|
||||||
|
|
||||||
if !class.IsValid(ing, s.Config.IngressClass, s.Config.DefaultIngressClass) {
|
if !class.IsValid(ing, s.Config.IngressClass, s.Config.DefaultIngressClass) {
|
||||||
|
wg.Done()
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,14 +23,15 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
cache_store "k8s.io/ingress/core/pkg/cache"
|
|
||||||
"k8s.io/ingress/core/pkg/k8s"
|
|
||||||
"k8s.io/ingress/core/pkg/task"
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
"k8s.io/kubernetes/pkg/client/cache"
|
"k8s.io/kubernetes/pkg/client/cache"
|
||||||
testclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
|
testclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
|
||||||
"k8s.io/kubernetes/pkg/util/sets"
|
|
||||||
|
cache_store "k8s.io/ingress/core/pkg/cache"
|
||||||
|
"k8s.io/ingress/core/pkg/ingress/annotations/class"
|
||||||
|
"k8s.io/ingress/core/pkg/k8s"
|
||||||
|
"k8s.io/ingress/core/pkg/task"
|
||||||
)
|
)
|
||||||
|
|
||||||
func buildLoadBalancerIngressByIP() loadBalancerIngressByIP {
|
func buildLoadBalancerIngressByIP() loadBalancerIngressByIP {
|
||||||
|
@ -150,6 +151,7 @@ func buildSimpleClientSet() *testclient.Clientset {
|
||||||
ObjectMeta: api.ObjectMeta{
|
ObjectMeta: api.ObjectMeta{
|
||||||
Name: "ingress-controller-leader",
|
Name: "ingress-controller-leader",
|
||||||
Namespace: api.NamespaceDefault,
|
Namespace: api.NamespaceDefault,
|
||||||
|
SelfLink: "/api/v1/namespaces/default/endpoints/ingress-controller-leader",
|
||||||
},
|
},
|
||||||
}}},
|
}}},
|
||||||
&extensions.IngressList{Items: buildExtensionsIngresses()},
|
&extensions.IngressList{Items: buildExtensionsIngresses()},
|
||||||
|
@ -178,6 +180,25 @@ func buildExtensionsIngresses() []extensions.Ingress {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: "foo_ingress_different_class",
|
||||||
|
Namespace: api.NamespaceDefault,
|
||||||
|
Annotations: map[string]string{
|
||||||
|
class.IngressKey: "no-nginx",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Status: extensions.IngressStatus{
|
||||||
|
LoadBalancer: api.LoadBalancerStatus{
|
||||||
|
Ingress: []api.LoadBalancerIngress{
|
||||||
|
{
|
||||||
|
IP: "0.0.0.0",
|
||||||
|
Hostname: "foo.bar.com",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
ObjectMeta: api.ObjectMeta{
|
ObjectMeta: api.ObjectMeta{
|
||||||
Name: "foo_ingress_2",
|
Name: "foo_ingress_2",
|
||||||
|
@ -192,16 +213,13 @@ func buildExtensionsIngresses() []extensions.Ingress {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildIngressLIstener() cache_store.StoreToIngressLister {
|
func buildIngressListener() cache_store.StoreToIngressLister {
|
||||||
store := cache.NewStore(cache.MetaNamespaceKeyFunc)
|
store := cache.NewStore(cache.MetaNamespaceKeyFunc)
|
||||||
ids := sets.NewString("foo_ingress_non_01")
|
|
||||||
for id := range ids {
|
|
||||||
store.Add(&extensions.Ingress{
|
store.Add(&extensions.Ingress{
|
||||||
ObjectMeta: api.ObjectMeta{
|
ObjectMeta: api.ObjectMeta{
|
||||||
Name: id,
|
Name: "foo_ingress_non_01",
|
||||||
Namespace: api.NamespaceDefault,
|
Namespace: api.NamespaceDefault,
|
||||||
}})
|
}})
|
||||||
}
|
|
||||||
store.Add(&extensions.Ingress{
|
store.Add(&extensions.Ingress{
|
||||||
ObjectMeta: api.ObjectMeta{
|
ObjectMeta: api.ObjectMeta{
|
||||||
Name: "foo_ingress_1",
|
Name: "foo_ingress_1",
|
||||||
|
@ -230,7 +248,7 @@ func buildStatusSync() statusSync {
|
||||||
Config: Config{
|
Config: Config{
|
||||||
Client: buildSimpleClientSet(),
|
Client: buildSimpleClientSet(),
|
||||||
PublishService: api.NamespaceDefault + "/" + "foo",
|
PublishService: api.NamespaceDefault + "/" + "foo",
|
||||||
IngressLister: buildIngressLIstener(),
|
IngressLister: buildIngressListener(),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -242,7 +260,9 @@ func TestStatusActions(t *testing.T) {
|
||||||
c := Config{
|
c := Config{
|
||||||
Client: buildSimpleClientSet(),
|
Client: buildSimpleClientSet(),
|
||||||
PublishService: "",
|
PublishService: "",
|
||||||
IngressLister: buildIngressLIstener(),
|
IngressLister: buildIngressListener(),
|
||||||
|
DefaultIngressClass: "nginx",
|
||||||
|
IngressClass: "",
|
||||||
}
|
}
|
||||||
// create object
|
// create object
|
||||||
fkSync := NewStatusSyncer(c)
|
fkSync := NewStatusSyncer(c)
|
||||||
|
@ -253,7 +273,7 @@ func TestStatusActions(t *testing.T) {
|
||||||
fk := fkSync.(statusSync)
|
fk := fkSync.(statusSync)
|
||||||
|
|
||||||
ns := make(chan struct{})
|
ns := make(chan struct{})
|
||||||
// start it and wait for the election and syn actions
|
// start it and wait for the election and sync actions
|
||||||
go fk.Run(ns)
|
go fk.Run(ns)
|
||||||
// wait for the election
|
// wait for the election
|
||||||
time.Sleep(100 * time.Millisecond)
|
time.Sleep(100 * time.Millisecond)
|
||||||
|
@ -286,6 +306,14 @@ func TestStatusActions(t *testing.T) {
|
||||||
t.Fatalf("returned %v but expected %v", fooIngress2CurIPs, newIPs2)
|
t.Fatalf("returned %v but expected %v", fooIngress2CurIPs, newIPs2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
oic, err := fk.Client.Extensions().Ingresses(api.NamespaceDefault).Get("foo_ingress_different_class")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected error")
|
||||||
|
}
|
||||||
|
if oic.Status.LoadBalancer.Ingress[0].IP != "0.0.0.0" && oic.Status.LoadBalancer.Ingress[0].Hostname != "foo.bar.com" {
|
||||||
|
t.Fatalf("invalid ingress status for rule with different class")
|
||||||
|
}
|
||||||
|
|
||||||
// end test
|
// end test
|
||||||
ns <- struct{}{}
|
ns <- struct{}{}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue