func TestNewMultipleSourcesEndpointsMultipleHandlersAddedAndNotified(t *testing.T) { config := NewEndpointsConfig() channelOne := config.Channel("one") channelTwo := config.Channel("two") handler := NewEndpointsHandlerMock() handler2 := NewEndpointsHandlerMock() config.RegisterHandler(handler) config.RegisterHandler(handler2) endpointsUpdate1 := CreateEndpointsUpdate(ADD, api.Endpoints{ ObjectMeta: api.ObjectMeta{Namespace: "testnamespace", Name: "foo"}, Subsets: []api.EndpointSubset{{ Addresses: []api.EndpointAddress{{IP: "1.1.1.1"}, {IP: "2.2.2.2"}}, Ports: []api.EndpointPort{{Port: 80}}, }}, }) endpointsUpdate2 := CreateEndpointsUpdate(ADD, api.Endpoints{ ObjectMeta: api.ObjectMeta{Namespace: "testnamespace", Name: "bar"}, Subsets: []api.EndpointSubset{{ Addresses: []api.EndpointAddress{{IP: "3.3.3.3"}, {IP: "4.4.4.4"}}, Ports: []api.EndpointPort{{Port: 80}}, }}, }) handler.Wait(2) handler2.Wait(2) channelOne <- endpointsUpdate1 channelTwo <- endpointsUpdate2 endpoints := []api.Endpoints{endpointsUpdate2.Endpoints[0], endpointsUpdate1.Endpoints[0]} handler.ValidateEndpoints(t, endpoints) handler2.ValidateEndpoints(t, endpoints) }
func TestNewMultipleSourcesServicesAddedAndNotified(t *testing.T) { config := NewServiceConfig() channelOne := config.Channel("one") channelTwo := config.Channel("two") if channelOne == channelTwo { t.Error("Same channel handed back for one and two") } handler := NewServiceHandlerMock() config.RegisterHandler(handler) serviceUpdate1 := CreateServiceUpdate(ADD, api.Service{ ObjectMeta: api.ObjectMeta{Namespace: "testnamespace", Name: "foo"}, Spec: api.ServiceSpec{Ports: []api.ServicePort{{Protocol: "TCP", Port: 10}}}, }) serviceUpdate2 := CreateServiceUpdate(ADD, api.Service{ ObjectMeta: api.ObjectMeta{Namespace: "testnamespace", Name: "bar"}, Spec: api.ServiceSpec{Ports: []api.ServicePort{{Protocol: "TCP", Port: 20}}}, }) handler.Wait(2) channelOne <- serviceUpdate1 channelTwo <- serviceUpdate2 services := []api.Service{serviceUpdate2.Services[0], serviceUpdate1.Services[0]} handler.ValidateServices(t, services) }
func TestNewServiceAddedAndNotified(t *testing.T) { config := NewServiceConfig() channel := config.Channel("one") handler := NewServiceHandlerMock() handler.Wait(1) config.RegisterHandler(handler) serviceUpdate := CreateServiceUpdate(ADD, api.Service{ ObjectMeta: api.ObjectMeta{Namespace: "testnamespace", Name: "foo"}, Spec: api.ServiceSpec{Ports: []api.ServicePort{{Protocol: "TCP", Port: 10}}}, }) channel <- serviceUpdate handler.ValidateServices(t, serviceUpdate.Services) }
func TestServiceAddedRemovedSetAndNotified(t *testing.T) { config := NewServiceConfig() channel := config.Channel("one") handler := NewServiceHandlerMock() config.RegisterHandler(handler) serviceUpdate := CreateServiceUpdate(ADD, api.Service{ ObjectMeta: api.ObjectMeta{Namespace: "testnamespace", Name: "foo"}, Spec: api.ServiceSpec{Ports: []api.ServicePort{{Protocol: "TCP", Port: 10}}}, }) handler.Wait(1) channel <- serviceUpdate handler.ValidateServices(t, serviceUpdate.Services) serviceUpdate2 := CreateServiceUpdate(ADD, api.Service{ ObjectMeta: api.ObjectMeta{Namespace: "testnamespace", Name: "bar"}, Spec: api.ServiceSpec{Ports: []api.ServicePort{{Protocol: "TCP", Port: 20}}}, }) handler.Wait(1) channel <- serviceUpdate2 services := []api.Service{serviceUpdate2.Services[0], serviceUpdate.Services[0]} handler.ValidateServices(t, services) serviceUpdate3 := CreateServiceUpdate(REMOVE, api.Service{ ObjectMeta: api.ObjectMeta{Namespace: "testnamespace", Name: "foo"}, }) handler.Wait(1) channel <- serviceUpdate3 services = []api.Service{serviceUpdate2.Services[0]} handler.ValidateServices(t, services) serviceUpdate4 := CreateServiceUpdate(SET, api.Service{ ObjectMeta: api.ObjectMeta{Namespace: "testnamespace", Name: "foobar"}, Spec: api.ServiceSpec{Ports: []api.ServicePort{{Protocol: "TCP", Port: 99}}}, }) handler.Wait(1) channel <- serviceUpdate4 services = []api.Service{serviceUpdate4.Services[0]} handler.ValidateServices(t, services) }
func TestNewMultipleSourcesEndpointsMultipleHandlersAddRemoveSetAndNotified(t *testing.T) { config := NewEndpointsConfig() channelOne := config.Channel("one") channelTwo := config.Channel("two") handler := NewEndpointsHandlerMock() handler2 := NewEndpointsHandlerMock() config.RegisterHandler(handler) config.RegisterHandler(handler2) endpointsUpdate1 := CreateEndpointsUpdate(ADD, api.Endpoints{ ObjectMeta: api.ObjectMeta{Namespace: "testnamespace", Name: "foo"}, Subsets: []api.EndpointSubset{{ Addresses: []api.EndpointAddress{{IP: "1.1.1.1"}, {IP: "2.2.2.2"}}, Ports: []api.EndpointPort{{Port: 80}}, }}, }) endpointsUpdate2 := CreateEndpointsUpdate(ADD, api.Endpoints{ ObjectMeta: api.ObjectMeta{Namespace: "testnamespace", Name: "bar"}, Subsets: []api.EndpointSubset{{ Addresses: []api.EndpointAddress{{IP: "3.3.3.3"}, {IP: "4.4.4.4"}}, Ports: []api.EndpointPort{{Port: 80}}, }}, }) handler.Wait(2) handler2.Wait(2) channelOne <- endpointsUpdate1 channelTwo <- endpointsUpdate2 endpoints := []api.Endpoints{endpointsUpdate2.Endpoints[0], endpointsUpdate1.Endpoints[0]} handler.ValidateEndpoints(t, endpoints) handler2.ValidateEndpoints(t, endpoints) // Add one more endpointsUpdate3 := CreateEndpointsUpdate(ADD, api.Endpoints{ ObjectMeta: api.ObjectMeta{Namespace: "testnamespace", Name: "foobar"}, Subsets: []api.EndpointSubset{{ Addresses: []api.EndpointAddress{{IP: "5.5.5.5"}, {IP: "6.6.6.6"}}, Ports: []api.EndpointPort{{Port: 80}}, }}, }) handler.Wait(1) handler2.Wait(1) channelTwo <- endpointsUpdate3 endpoints = []api.Endpoints{endpointsUpdate2.Endpoints[0], endpointsUpdate1.Endpoints[0], endpointsUpdate3.Endpoints[0]} handler.ValidateEndpoints(t, endpoints) handler2.ValidateEndpoints(t, endpoints) // Update the "foo" service with new endpoints endpointsUpdate1 = CreateEndpointsUpdate(ADD, api.Endpoints{ ObjectMeta: api.ObjectMeta{Namespace: "testnamespace", Name: "foo"}, Subsets: []api.EndpointSubset{{ Addresses: []api.EndpointAddress{{IP: "7.7.7.7"}}, Ports: []api.EndpointPort{{Port: 80}}, }}, }) handler.Wait(1) handler2.Wait(1) channelOne <- endpointsUpdate1 endpoints = []api.Endpoints{endpointsUpdate2.Endpoints[0], endpointsUpdate1.Endpoints[0], endpointsUpdate3.Endpoints[0]} handler.ValidateEndpoints(t, endpoints) handler2.ValidateEndpoints(t, endpoints) // Remove "bar" service endpointsUpdate2 = CreateEndpointsUpdate(REMOVE, api.Endpoints{ObjectMeta: api.ObjectMeta{Namespace: "testnamespace", Name: "bar"}}) handler.Wait(1) handler2.Wait(1) channelTwo <- endpointsUpdate2 endpoints = []api.Endpoints{endpointsUpdate1.Endpoints[0], endpointsUpdate3.Endpoints[0]} handler.ValidateEndpoints(t, endpoints) handler2.ValidateEndpoints(t, endpoints) }